マーチンゲールの設定について

2025/09/21 19:01
15

お世話になります。
マーチンゲールの設定で0.1ロットから負けるたびに1.1倍づつロット数をあげていく場合で勝ったときに初期値の0.1に戻るのではなく、一つ前のロット数に減らすやり方があれば教えてください。
例えば、3連敗でロット数が0.1→0.12→0.13→0.14に増加し、4回目に勝ったら次のロット数が0.14→0.13に戻るような方法です。
よろしくお願いします。

コメント

GogoJungle
2025/09/24 18:31

お問い合わせありがとうございます。

EAつくーるの「マーチンゲール設定」では、標準機能としては 「負ければ倍率アップ」「勝てば初期化」 という挙動しかサポートしておらず、「勝ちで一段階だけロットを減らす」動きは設定画面からは実現できません。

ただし、出力されたEAコードを一部修正することでご希望の動作は可能です。以下に修正方法をご案内いたします。


修正のポイント
  1. EAつくーるで出力する際は ロット数は固定(例:0.1)、マーチンゲール機能はオフにしてください。
  2. 出力されたコードに「現在のロット数を保持する変数」と「勝ち負けによる更新処理」を追加します。
  3. 次回エントリー直前に、この変数を読み込んでロット数を決定します。

コード修正例(MQL4)

EAつくーるの出力コードを MetaEditor で開き、次の修正を行ってください。

① グローバル変数の追加

ファイル冒頭(input などの宣言の下あたり)に追記します。

double CurrentLot = 0.1;      // 初期ロット
double LotStepRate = 1.1;     // 負けた時に掛ける倍率

② 勝敗によるロット更新処理

OnTick() 内で、ポジション決済直後に呼ばれる箇所を探して、下記のように勝敗判定を追加してください。

// 勝ち負け判定とロット更新
void UpdateLotByResult(int ticket) {
   if(OrderSelect(ticket, SELECT_BY_TICKET)) {
      double profit = OrderProfit() + OrderSwap() + OrderCommission();
      if(profit < 0) {
         // 負け → ロットを倍率で増やす
         CurrentLot = NormalizeDouble(CurrentLot * LotStepRate, 2);
      } else if(profit > 0) {
         // 勝ち → 1段階戻す
         double prevLot = CurrentLot / LotStepRate;
         if(prevLot < 0.1) prevLot = 0.1; // 初期値以下にならないよう制御
         CurrentLot = NormalizeDouble(prevLot, 2);
      }
   }
}

> 補足:ticketOrderClose() 直後に取得できる約定チケット番号を渡してください。
> EAつくーる出力コードでは、ポジションを決済する部分(closePosition() 呼び出し後)に UpdateLotByResult(ticket); を追記すれば連動できます。


③ エントリー時のロット数を差し替え

エントリーを実行している部分を探し、下記のように修正します。

【修正前】

if(openPosition(signal, lots, take_profit, stop_loss, Magic1)) {
   bars1 = Bars;
}

【修正後】

// lots の代わりに CurrentLot を使用
if(openPosition(signal, CurrentLot, take_profit, stop_loss, Magic1)) {
   bars1 = Bars;
}

動作イメージ
  • 0.1ロットでエントリー → 負け → 次回は 0.11ロット
  • 再度負け → 次回は 0.12ロット
  • さらに負け → 次回は 0.13ロット
  • 次で勝ち → 次回は 0.12ロット(初期化せず、1段階戻す)

このように「階段状の増減」が実現されます。


注意点
  • EAを停止 → 再稼働すると CurrentLot がリセットされます。継続管理したい場合は GlobalVariableSet() / GlobalVariableGet() を利用して MT4 のグローバル変数に保存してください。
  • ブローカーの最小ロット・ステップに合わない場合、注文がエラーになることがあります。その場合は NormalizeDouble(..., 2) の小数点桁数を調整してください。

関連トピックス

検索結果がありません。

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

注目トピックス

検索結果がありません。