MQL4 よく見るエラーコードERR_NOT_ENOUGH_MONEY
目次
エラー134ERR_NOT_ENOUGH_MONEY ― 証拠金が足りず発注できない
発注しようとしたロット数に対して、口座の証拠金が足りないときに出る。
1主な原因
- 証拠金維持率が低い状態で、さらに新規ポジションを持とうとした
- ロット数の計算式を誤っていて、意図よりずっと大きい数量になっていた
- レバレッジや契約サイズ(1ロットあたりの通貨量)を勘違いしていた
2対処法
✓ 発注前に必要証拠金を見積もる
MarketInfo(symbol, MODE_MARGINREQUIRED)で1ロットあたりの必要証拠金を調べ、AccountFreeMargin()と比べてからロット数を決める。
3発生する例と直し方
// 悪い例:見積もりせずに固定ロットで送る double lot = 1.0; int t = OrderSend(Symbol(), OP_BUY, lot, Ask, 3, 0, 0); // 直した例:必要証拠金と自由証拠金を先に比べる double marginPerLot = MarketInfo(Symbol(), MODE_MARGINREQUIRED); double lot2 = 1.0; if(marginPerLot * lot2 > AccountFreeMargin()) Print("証拠金不足のため発注を見送りました"); else int t2 = OrderSend(Symbol(), OP_BUY, lot2, Ask, 3, 0, 0);
4MQL5では
🔁 差分
MQL5ではTRADE_RETCODE_NO_MONEY(コード10019)。事前に見積もっておく考え方はMQL4のMarketInfo(MODE_MARGINREQUIRED)と同じで、MQL5ではOrderCalcMarginを使う。