
MT5 MT5 取引サーバーのリターンコード
10015
- 定数名
TRADE_RETCODE_INVALID_PRICE- メッセージ
invalid price- 意味
- 注文価格が不正
MT5エラー10015とは
注文に指定した価格が不正なときのリターンコードです。成行注文で買いに Bid、売りに Ask を使っている、待機注文の価格が現在値の逆側にある、桁数が合っていない、などが原因です。
ログの表示例
CTrade::OrderSend: buy limit 0.10 USDJPY at 151.000 [invalid price]
「エキスパート」タブまたは「操作履歴」タブに表示されます。数値や表記の細部は、ビルド・ブローカー・EAの作りによって異なります。
MT5エラー10015の主な原因
- 成行の買いに Bid、売りに Ask を指定している(買いは Ask、売りは Bid)
- 買い指値(BUY_LIMIT)を現在値より上に置くなど、待機注文の種類と価格の位置関係が逆
- 価格を NormalizeDouble() で丸めていない、またはティックサイズの倍数になっていない
- 古い価格のまま注文している
MT5エラー10015の対処法
- SymbolInfoTick() で最新の ask / bid を取得して使う
- 待機注文は「買い指値・売り逆指値は現在値より下」「売り指値・買い逆指値は現在値より上」を守る
- 価格は NormalizeDouble(価格, _Digits) で丸める。CFDなどは SYMBOL_TRADE_TICK_SIZE の倍数にそろえる
コード例(MQL5)
// 損切り・利確をストップレベルより外側に置く(10016 invalid stops 対策)(MQL5)
#include <Trade\Trade.mqh>
CTrade trade;
input double InpSlPips = 20;
input double InpTpPips = 40;
bool BuyWithStops(double lots)
{
MqlTick tick;
if(!SymbolInfoTick(_Symbol, tick)) return false;
double pip = (_Digits == 3 || _Digits == 5) ? _Point * 10 : _Point;
double minDist = (double)SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL) * _Point;
double spread = tick.ask - tick.bid;
double slDist = MathMax(InpSlPips * pip, minDist + spread);
double tpDist = MathMax(InpTpPips * pip, minDist + spread);
double sl = NormalizeDouble(tick.bid - slDist, _Digits); // 買いは SL < bid
double tp = NormalizeDouble(tick.bid + tpDist, _Digits); // 買いは TP > bid
if(!trade.Buy(lots, _Symbol, tick.ask, sl, tp))
{
Print("retcode=", trade.ResultRetcode(), " ", trade.ResultRetcodeDescription());
return false;
}
return true;
}MetaEditor(MT5)でコンパイルできることを確認済みです。自分のEAに組み込むときは、変数名や設定値を合わせてください。












