
MT4 MT4 取引エラー
130
- 定数名
ERR_INVALID_STOPS- メッセージ
invalid stops- 意味
- 損切り・利確(ストップ)の価格が不正
MT4エラー130とは
OrderSend() や OrderModify() で指定した損切り(SL)・利確(TP)・待機注文の価格が、現在値に近すぎるか、向きが逆のときに出るエラーです。MT4のEAで最もよく見るエラーのひとつです。
ログの表示例
OrderSend error 130 OrderModify error 130
「エキスパート」タブまたは「操作履歴」タブに表示されます。数値や表記の細部は、ビルド・ブローカー・EAの作りによって異なります。
MT4エラー130の主な原因
- SL・TPが現在値に近すぎる(ブローカーの「ストップレベル」MODE_STOPLEVEL より内側)
- SL・TPの向きが逆(買いなのに SL が Bid より上、TP が下など)
- pips を価格に変換するときに Point と pips を取り違え、5桁(3桁)口座で10倍ずれている
- SL・TPを NormalizeDouble() で丸めていない
- 待機注文(指値・逆指値)の価格が、現在値からストップレベル以上離れていない
- フリーズレベル(MODE_FREEZELEVEL)内でポジションを変更しようとした
MT4エラー130の対処法
- MarketInfo(Symbol(), MODE_STOPLEVEL) * Point を最小距離として、SL・TPがそれより離れているか確認する
- 買いは SL = Bid より下・TP = Bid より上、売りは SL = Ask より上・TP = Ask より下になっているか確認する
- 5桁・3桁口座では 1pips = Point × 10 として計算する
- SL・TPは NormalizeDouble(値, Digits) で丸めてから渡す
- ストップレベルが 0 の口座でも、スプレッドぶんは離す
昔のECN口座では「成行注文と同時にSL・TPを付けられない」仕様があり、その場合は SL・TP を 0 で発注してから OrderModify() で付けます。今はほとんどの口座で同時に指定できます。
コード例(MQL4)
// 損切り・利確をストップレベルより外側に置いて発注する(MQL4)
input double InpSlPips = 20; // 損切り(pips)
input double InpTpPips = 40; // 利確(pips)
double PipSize()
{
// 5桁・3桁口座では 1pips = 10ポイント
return (Digits == 3 || Digits == 5) ? Point * 10 : Point;
}
int BuyWithStops(double lots, int magic)
{
RefreshRates();
double minDist = MarketInfo(Symbol(), MODE_STOPLEVEL) * Point; // 最小距離
double spread = Ask - Bid;
double slDist = MathMax(InpSlPips * PipSize(), minDist + spread);
double tpDist = MathMax(InpTpPips * PipSize(), minDist + spread);
double sl = NormalizeDouble(Bid - slDist, Digits); // 買いの SL は Bid より下
double tp = NormalizeDouble(Bid + tpDist, Digits); // 買いの TP は Bid より上
int ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, 30, sl, tp, "", magic, 0, clrBlue);
if(ticket < 0)
Print("OrderSend error ", GetLastError(), " sl=", sl, " tp=", tp, " stoplevel=", minDist);
return ticket;
}MetaEditor(MT4)でコンパイルできることを確認済みです。自分のEAに組み込むときは、変数名や設定値を合わせてください。












