MT5マーチンゲール

2025/08/13 16:31
72

オプションのマーチンゲールを使用しているのですが何連敗しても初期ロットのまま取引します。
バックテストでは機能しております。
ご確認おねがいします。

スクリーンショット.zip

コメント

GogoJungle
2025/08/15 10:10

マーチンゲールがリアル運用では初期ロットのまま変化しない、というご質問ですね。

この場合、設定や環境によってマーチンゲールが発動しないことがあります。以下をご確認ください。


1. 「損切り」の設定をご確認ください

マーチンゲールは 「損切りでポジションが決済された直後」 に次回ロット数を増やします。

  • 基本項目の「損切り」に0が設定されている場合は、損切りによる決済が発生せず、マーチンゲールが動作しません。
  • バックテストでは想定通り損切りにかかっているのに、リアル運用では「手動決済」や「別の条件での決済」になっていると、ロットは増えません。

修正例:
基本項目 → 損切り → 損切り幅をpipsで入力(例:50)
※このとき「マーチンゲール」オプションの倍率設定も忘れずに確認してください。


2. 「ロット数の計算方法」の確認

マーチンゲールオプションの

  • 「ロット数の計算方法」が「一定(ロット倍率・追加を使用)」になっているか
  • 倍率に1より大きな値(例:2)が設定されているかをご確認ください。倍率が1の場合は増えません。

3. 他オプションとの干渉

  • 「ナンピン」や「ピラミッディング」など、ポジション追加型オプションと併用している場合、ロット計算が期待通りにならないことがあります。
  • 特にナンピン使用時は基本項目の損切りを0にする必要があり、結果的にマーチンゲールは機能しなくなります。

4. リアル運用時の注意点

バックテストではサーバーの約定状況やスリッページが発生しないため、必ず損切りで決済されますが、リアルではスプレッド変動などにより損切り決済にならないケースがあります。その場合もロットは据え置きになります。
→「履歴」タブで実際にどのように決済されたか(損切りか別条件か)を確認してください。


5. 通貨ペアがGOLDの場合の注意

GOLD(XAUUSDなど)では、通常の通貨ペアとpipsの定義が異なります。EA内部で価格差をpipsに変換する関数 PriceToPips をそのまま使うと、計算がずれることがあります。

  • 例えば、GOLDは小数点以下2桁や3桁で価格が表示される場合があり、1pipsの扱いがFX通貨ペア(小数点4桁や5桁)と異なります。
  • EAつくーるの出力コードをMQLエディタで開き、PriceToPips 関数内のティックサイズや桁数計算部分をGOLDに合わせて修正する必要があります。

まとめ

  • 損切り幅を設定し、損切り決済が確実に発生するようにする
  • マーチンゲールの「倍率」を1より大きく設定する
  • ナンピン等と併用しない
  • 実運用では決済理由を履歴で確認する
  • GOLDで使う場合は PriceToPips の計算方法を通貨仕様に合わせて調整する

上記をご確認いただいても改善されない場合、出力されたファイルを確認させていただきたいと思います。
こちらより、ソースファイルをzipにしてお送りいただければ、弊社エンジニアの方でコードの確認をさせていただきます。
(通常はいきなりDMをお送りいただいてもご返信を差し上げられない場合がございます。「弊社からの依頼に対するコードのご提供であること」の識別のため、メッセージの本文内に今回のQAのリンク https://labo.gogojungle.co.jp/articles/2269 の記載をお願いします。)

調査後の回答につきましては、引き続きこのQAにてコメントさせていただきます。
お手数をおかけしますが、何卒よろしくお願いいたします。

GogoJungle
2025/08/20 10:35

コードをご提供いただきありがとうございます。
内容を拝見したところ、バックテストではマーチンゲールが動作するのに、リアル運用ではロットが初期値のままになる原因として、いくつか考えられる点がございます。特に「連敗カウント(lose)が増えない」ことが要因になっている可能性が高いです。以下の観点でご確認ください。


1. 損益判定が純損になっていない

コード内の負け判定は OrderProfit() のみで行われています。
この値は 手数料やスワップを含まないため、実際にはマイナスでも「±0扱い」や「微プラス」になり、連敗と判定されないことがあります。

チェックポイント:

  • 取引履歴で直近のクローズが純損益で確実にマイナスになっているか。

回避策(設定側):

  • 基本項目の「損切り」幅を広げ、手数料・スワップを差し引いても必ず負けになる幅に設定してください。

MQL補足(必要なら):

  • コードを修正できる場合は、

    if(OrderProfit() + OrderSwap() + OrderCommission() < 0) lose++;
    

    のように純損益で判定すると安定します。


2. 途中の±0や他マジックの履歴で連敗が途切れている

Martingale() は「同一マジック番号・同一シンボル」の履歴を最新から見ていき、最初にプラスが出た時点でカウントを止めます。

  • 間に「±0決済」「微益決済」「別マジックの勝ち」があると、連敗数が0にリセットされます。

回避策:

  • 基本項目の損切り決済のみで負けを出す形にして、余計な決済条件や手動決済を入れないようにしてください。

3. ロット刻み(LOTSTEP)や最小ロットの丸め

コード内の checkLots() で口座仕様に合わせてロットが丸められます。

  • 例えば、口座が 0.1 ロット刻みなのに初期ロットを 0.01 にしていると、常に 0.1 に丸められ、倍率をかけても変化が見えないことがあります。

チェックポイント:

  • 口座仕様の「最小ロット・ロット刻み(LOTSTEP)」に初期ロットを合わせているか。

4. オプション干渉

ナンピンやピラミッディングと同時に設定していると、マーチンゲールが効かないケースがあります。
まずはマーチンゲール単独で検証してください。


5. 「最大ロット数」の制限による頭打ち

ご提示のコードでは、マーチンゲールオプションに

input double MartingaleMax = 10;

という制限値が設定されています。
この場合、計算上のロットが 10 を超えると強制的に「10」に固定され、それ以上は増えません。

チェックポイント:

  • 「オプション → マーチンゲール → 最大ロット数」が「10」のままになっていませんか。

回避策:

  • より多くのステップで増加させたい場合は、ここを「0」(無効)にするか、ブローカーの最大ロットに合わせて十分大きな値を設定してください。

6. カスタムロット設定での回数制御

「倍率方式」ではロットが口座上限に突き当たると増えなくなりますが、
「カスタムロット設定」を使えば、回数を任意に制御できます。

設定方法(例:15段階にしたい場合):

オプション → マーチンゲール → ロット数の計算方法を「可変(カスタムロット設定を使用)」に変更し、

0.01,0.02,0.04,0.08,0.16,0.32,0.64,1.28,2.56,5.12,10.24,20.48,40.96,81.92,163.84

のように15個以上をカンマ区切りで入力します。
※あわせて「最大ロット数」もこれらを超えないように調整してください。


7. ブローカー仕様の上限確認

最後に、ブローカー側の「最大ロット(MODE_MAXLOT)」が10に設定されている場合、コード上の設定を変えても実際には10以上の発注はできません。
その場合は残念ながら「EAつくーる」やマーチン設定だけでは回避できず、ブローカー仕様に従う必要があります。


まとめ

  • 損切り幅を広げて「純損」が確実に履歴に残るようにする
  • マーチンゲールは単独でテストし、ナンピンや他オプションは併用しない
  • 初期ロットを口座の LOTSTEP に合わせる
  • コード調整が可能であれば「純損益ベースで負け判定」に変更する
  • 最大ロット数を0(無効)または十分大きな値に設定する
  • 15段以上で使いたい場合は「カスタムロット設定」を利用し、任意のロット列を入力する
  • ブローカー側の最大ロット仕様に達していないかを確認する(上限が10ならそれ以上は増やせない)

これらを順に見直すことで、リアル口座でもロットが正しく増えるはずです。

wahhoi
2025/08/22 17:00

ご回答ありがとうございます。
1~7確認させて頂きましたが改善しませんでした。
最初の投稿に取引履歴、EAの設定画面を添付しておりますが、どこかおかしいところはありますでしょうか?
後、他に考えられる要因はありますでしょうか?
ご確認お願いします。

GogoJungle
2025/08/26 18:52

改めまして、履歴と設定画面を確認させていただきました。今回のケースでは、マーチンゲールのロットが増えない原因は「連敗判定の不具合」よりも 設定値やブローカー仕様の制約による可能性が高いです。

1. MartingaleMax の解釈

設定値が 10.0 となっていますが、EAつくーるのコードでは「最大ロット数」として使われます。
この場合、口座仕様や小数点の扱いによっては 10ロット固定ではなく、0.10ロットが上限扱いになるケースがあります。
→ そのため、計算上は 0.02 ロットに増えても「上限制御」で 0.01 に丸められてしまう可能性があります。

対策:
まずは MartingaleMax を「0」(無制限)に設定し、挙動を確認してください。


2. ロット刻み(LOTSTEP)

履歴を見るとすべて 0.01 ロットで発注されています。
ブローカーの「最小ロット」や「ロット刻み(LOTSTEP)」が 0.01 であれば問題ありませんが、もし 0.1 刻みの口座仕様なら すべて丸められて 0.01 のままになってしまいます。

対策:
口座仕様を確認し、初期ロットを LOTSTEP に合わせることが重要です。


3. 初期設定のまま動作確認

現在の設定では、TakeProfit・Slippage・その他オプションに干渉要素は見当たりません。
まずは マーチンゲール単独(他オプションOFF)+ MartingaleMax = 0 の状態で再テストすると、原因を切り分けやすいです。


まとめ

  • MartingaleMax を「0(無制限)」に変更
  • ブローカーのロット刻み(LOTSTEP)と最小ロットを確認
  • 単独設定で挙動確認

この3点を見直すことで、バックテストと同じようにリアル口座でもロットが増えていくはずです。

wahhoi
2025/08/28 08:54

1~3まで確認させていただきましたが改善されません。
build5200バージョンアップしたことは関係ありますか?

関連トピックス

検索結果がありません。

ノーコードで誰でも簡単EA開発!MQL言語学習にも使える! | GogoJungle

注目トピックス

検索結果がありません。