
MT5 MT5 取引サーバーのリターンコード
10038
- 定数名
TRADE_RETCODE_INVALID_CLOSE_VOLUME- 意味
- 決済する数量がポジションの数量を超えている
MT5エラー10038とは
部分決済などで、保有しているポジションの数量より大きな数量を決済しようとしたときのリターンコードです。
標準ライブラリの CTrade はこの番号の説明文を持っていないため、CTrade のログには「unknown retcode 10038」と表示されます。
ログの表示例
CTrade::PositionClosePartial: close position #123456 0.20 USDJPY [unknown retcode 10038]
「エキスパート」タブまたは「操作履歴」タブに表示されます。数値や表記の細部は、ビルド・ブローカー・EAの作りによって異なります。
MT5エラー10038の主な原因
- 部分決済の数量が保有数量より大きい
- すでに一部決済して残りが減っているのに、元の数量で決済しようとした
MT5エラー10038の対処法
- 決済前に PositionGetDouble(POSITION_VOLUME) で現在の数量を取得する
- 部分決済の数量は SYMBOL_VOLUME_STEP で丸め、保有数量以下にする
コード例(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に組み込むときは、変数名や設定値を合わせてください。












