当サイトはアフィリエイト広告を含みます(PR)

MT5 リターンコード10014「TRADE_RETCODE_INVALID_VOLUME」ロット数が無効な場合の対処法

✅ 結論(解決策)

リターンコード10014とは

MT5のリターンコード10014(定数名:TRADE_RETCODE_INVALID_VOLUME)は、注文リクエストに含まれるロット数(取引量)が無効な場合にサーバーから返されるコードです。ロット数が小さすぎる、大きすぎる、またはロットステップに合っていない場合に発生します。

MT4のエラー131(Invalid trade volume)に相当するエラーで、MT5でEAを開発・運用する際に頻繁に遭遇します。

原因

  1. 最小ロット未満のロット数:口座タイプやブローカーにより最小ロットが設定されています。例えば最小ロットが0.01の場合、0.001ロットの注文はエラーになります。
  2. 最大ロット超過:1回の注文で許可される最大ロット数を超えた場合。XMではスタンダード口座で最大50ロット、マイクロ口座で最大100マイクロロットなど、口座タイプにより異なります。
  3. ロットステップ不一致:ロット数はステップの倍数でなければなりません。ステップが0.01の場合、0.015ロットは無効です。浮動小数点の丸め誤差でこの問題が発生することがあります。
  4. ロット数が0またはマイナス:EAのバグでロット数の計算結果が0以下になった場合。ロット数計算にゼロ除算が含まれていないか確認してください。

解決手順

銘柄の仕様を確認する

MT5の「気配値」ウィンドウで対象銘柄を右クリック →「仕様」を選択します。「最小ボリューム」「最大ボリューム」「ボリュームステップ」の3つの値を確認してください。注文のロット数はこの範囲内かつステップの倍数である必要があります。

EAのロット数計算を修正する

MQL5ではSymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN)で最小ロット、SYMBOL_VOLUME_MAXで最大ロット、SYMBOL_VOLUME_STEPでステップを取得できます。計算後のロット数をこれらの値でバリデーションしてから注文を送信してください。

浮動小数点の丸め処理を入れる

ロット数の計算結果には浮動小数点の丸め誤差が含まれることがあります。MathFloor(lots / step) * stepのようにステップの倍数に丸めてからNormalizeDouble()で正規化してください。

手動注文の場合はロット数を確認する

MT5の注文画面で「ボリューム」欄に入力するロット数が、その銘柄の許容範囲内であることを確認してください。プルダウンから選択するか、許容範囲内の値を直接入力します。

口座タイプ別のロット設定一覧(XMの場合)

口座タイプ最小ロット最大ロットロットステップ1ロットの通貨量
スタンダード口座0.01500.01100,000通貨
マイクロ口座MT4: 0.01 / MT5: 0.11000.011,000通貨
KIWAMI極口座0.01500.01100,000通貨
ゼロ口座0.01500.01100,000通貨

※マイクロ口座のMT5では最小ロットが0.1マイクロロット(100通貨)である点に注意してください。MT4のマイクロ口座では0.01マイクロロット(10通貨)から取引可能です。この違いがエラー10014の原因になることがあります。

よくあるロット数計算のバグと修正方法

バグ1:証拠金ベースのロット計算でゼロ除算

口座残高に対する一定割合をリスクとしてロット数を計算するEAでは、口座残高がゼロの場合にゼロ除算が発生し、ロット数が0またはNaN(非数)になることがあります。ボーナスのみで取引している場合、AccountBalance()が0を返すケースがあるため、AccountEquity()を使用するか、最小ロット数へのフォールバック処理を入れてください。

バグ2:浮動小数点の丸め誤差

ロット数の計算結果が0.010000000000000002のような微小な誤差を含む場合、ステップの倍数チェックで不一致と判定されエラー10014が返されます。計算後は必ずNormalizeDouble(lots, 2)で小数点以下2桁に正規化してください。

バグ3:シンボルごとの仕様を無視

FX通貨ペアでは0.01ロットが最小でも、CFD銘柄(株式指数、商品など)では最小ロットが1.0や0.1に設定されていることがあります。SymbolInfoDouble()で各銘柄の仕様を都度取得する設計にしてください。

ℹ MQL5でのロット数正規化コード例

double NormalizeLot(double lots, string symbol){ double min=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN); double max=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX); double step=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP); lots=MathFloor(lots/step)*step; lots=MathMax(min,MathMin(max,lots)); return NormalizeDouble(lots,2); }

MT4からMT5への移行時の注意点

MT4で使用していたEAをMT5に移行する際、ロット数の処理が異なるためにエラー10014が発生するケースが多いです。MT4ではMarketInfo(Symbol(), MODE_MINLOT)で最小ロットを取得しますが、MT5ではSymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN)を使用します。関数名が異なるだけでなく、取得される値も口座タイプにより異なる場合があるため、移行時は必ずテストしてください。

特にマイクロ口座でMT4からMT5に切り替えた場合、最小ロットが0.01から0.1に変わるケースがあり、MT4時代のロット計算ロジックをそのまま使うとエラー10014が頻発します。

手動注文でエラー10014が出た場合の対処

MT5の新規注文画面でロット数を入力する際、入力可能な最小値より小さい値を手入力するとエラー10014に相当するエラーが表示されます。注文画面の「ボリューム」欄のドロップダウンメニューから選択するか、「仕様」画面で確認した最小ロット以上の値を入力してください。

また、CFD銘柄(株式指数、コモディティなど)ではFX通貨ペアとは異なるロット設定が適用されることがあります。日経225(JP225)やダウ(US30)などの株式指数CFDでは最小ロットが1.0に設定されている場合があり、0.01ロットの注文は通りません。取引する銘柄の「仕様」を都度確認する習慣をつけてください。

よくある質問

MT5で0.01ロットの注文を出したらリターンコード10014が出ました。なぜですか?
口座タイプによって最小ロット数が異なります。一部のECN口座やプロ口座では最小ロットが0.1ロットに設定されている場合があります。MT5の「気配値」で対象銘柄を右クリック→「仕様」→「最小ボリューム」で確認してください。
リターンコード10014と10016の違いは何ですか?
10014はロット数自体が無効な場合(最小/最大ロット外、ステップ不一致など)に返されます。10016はロット数は有効だが、証拠金が不足している場合やポジション数上限に達している場合に返されます。10014はロット数の設定、10016は資金管理の問題です。

リターンコード10014のまとめ

リターンコード10014はロット数に関するバリデーションエラーであり、銘柄の仕様(最小ロット、最大ロット、ロットステップ)を確認すれば必ず解決できるエラーです。EA開発者はNormalizeLot()のようなユーティリティ関数を作成し、注文送信前に必ずロット数を正規化する設計にしてください。手動取引の場合は、注文画面の「ボリューム」欄で許容範囲内の値を入力するか、ドロップダウンから選択してください。

特にMT4からMT5への移行時は、マイクロ口座の最小ロットが変わる点に注意が必要です。移行後は必ずテスト取引でロット数の動作を確認してから本格運用を開始してください。

少額から始められる口座を選ぶ

XMのマイクロ口座なら最小0.01マイクロロット(10通貨)から取引可能です。MT5にも対応しており、少額でのEA検証やリアルトレードの練習に最適です。

XM公式サイトで口座開設(無料)
※ 当サイト経由の口座開設でボーナスが付与されます(PR)
※ XMは日本の金融庁に未登録の海外FX業者です。取引にはリスクが伴います。
リスクに関する注意事項
FX(外国為替証拠金取引)は元本保証のない金融商品です。レバレッジにより、預けた証拠金以上の損失が発生する可能性があります。余剰資金の範囲で取引を行ってください。当サイトで紹介する海外FX業者は日本の金融庁に未登録であり、日本の投資者保護基金の対象外です。当サイトの情報は一般的な情報提供を目的としたものであり、特定の業者の利用を推奨するものでも、個別の売買助言でもありません。