MT5 MT5 取引サーバーのリターンコード
10014
- 定数名
TRADE_RETCODE_INVALID_VOLUME- メッセージ
invalid volume- 意味
- ロット数(取引数量)が不正
MT5エラー10014とは
注文のロット数が、銘柄の最小ロット・最大ロット・刻み幅に合っていないときのリターンコードです。
ログの表示例
CTrade::OrderSend: market buy 0.015 USDJPY [invalid volume]
「エキスパート」タブまたは「操作履歴」タブに表示されます。数値や表記の細部は、ビルド・ブローカー・EAの作りによって異なります。
MT5エラー10014の主な原因
- ロットが SYMBOL_VOLUME_MIN より小さい、または SYMBOL_VOLUME_MAX より大きい
- ロットが SYMBOL_VOLUME_STEP の倍数になっていない
- 一部決済の数量が不正(残りが最小ロット未満になるなど)
- ロット計算の結果を丸めていない
MT5エラー10014の対処法
- SYMBOL_VOLUME_MIN / MAX / STEP を取得し、刻み幅で切り捨ててから範囲内に収める
- 計算したロットを Print() で出力して確認する
コード例(MQL5)
// ロット数を銘柄の最小・最大・刻み幅に合わせる(10014 invalid volume 対策)(MQL5)
double NormalizeVolume(const string symbol, double lots)
{
double minV = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN);
double maxV = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX);
double step = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP);
if(step <= 0) return 0;
lots = MathFloor(lots / step) * step;
lots = MathMax(minV, MathMin(maxV, lots));
int digits = (int)MathMax(0, -MathFloor(MathLog10(step)));
return NormalizeDouble(lots, digits);
}MetaEditor(MT5)でコンパイルできることを確認済みです。自分のEAに組み込むときは、変数名や設定値を合わせてください。
このエラーが出やすい関数
このエラーを避けるコードの書き方(逆引きレシピ)
- 成行で買い・売りの注文を出したいMQL4 は OrderSend(銘柄, OP_BUY, ロット, Ask, …)、MQL5 は CTrade の trade.Buy(ロット) を使います。
- 利益が出たら半分だけ決済したいMQL4 は OrderClose() のロットに保有量より小さい値、MQL5 は trade.PositionClosePartial(チケット, ロット) を使います。
- 資金の◯%のリスクでロット数を計算したい「許容損失額 ÷(損切り幅 × 1ロットあたりの1ポイントの価値)」で計算し、最小ロット・刻み幅に合わせます。
- ロット数を最小ロット・刻み幅に合わせたいSYMBOL_VOLUME_STEP(刻み幅)で切り捨て、SYMBOL_VOLUME_MIN・SYMBOL_VOLUME_MAX の範囲に収めます。












