MQL4 よく見るエラーコードERR_REQUOTE
エラー138ERR_REQUOTE ― 価格が動いて約定できなかった
送った注文の価格が、サーバー側の現在値からもう離れてしまい、その価格では約定できなかったときに出る(いわゆるリクオート)。
1主な原因
- 値動きが速い時間帯(指標発表直後等)に発注した
- Slippage(許容ずれ幅)を0など厳しい値にしていた
- 処理に時間がかかり、その間に価格が動いた
2対処法
✓ 許容ずれ幅を持たせ、取り直して再試行する
OrderSendのslippage引数を0にせず、数pips分の余裕を持たせる。それでも失敗したらRefreshRatesで最新値を取り直し、数回までリトライする作りにする。
3発生する例と直し方
// 悪い例:slippage=0で1回だけ送る bool ok = OrderSend(Symbol(), OP_BUY, 0.1, Ask, 0, 0, 0) > 0; // 直した例:許容ずれ幅を持たせ、失敗したら取り直して再試行 int ticket = -1; for(int i = 0; i < 3 && ticket < 0; i++) { RefreshRates(); ticket = OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0); }
4MQL5では
🔁 差分
MQL5ではTRADE_RETCODE_REQUOTE(コード10004)。この状況自体はMQL4・MQL5どちらでも起こり得る。
5関連するエラー
ERR_OFF_QUOTES(136)ERR_PRICE_CHANGED(135)