解決済み

ロットの変更

2025/12/08 21:31
48

勝敗に応じてロット変更させるコードを御教示ください。
初期ロット:0.01
負け 0.01ロット加算
勝ち 0.01ロット減算
ダランベール方式のようにロットを変動させたいのですが、コードを追加するしか方法が無いと思うので、どうかよろしくお願いいたします。

コメント

GogoJungle
2025/12/11 12:29

MT4版EAつくーるで作成した「MT4用EA」を前提に、勝敗に応じてロットを0.01ずつ増減させる方法(ダランベール方式)をご説明します。


1. 前提(EAつくーる側の設定:MT4)

まず、EAつくーる側では「ロットはコードで管理する」前提にしておくと動作がわかりやすくなります。

  • 「基本項目」

    • ロット数:0.01(初期ロット)
  • 「オプション」

    • 「マーチンゲール」「ナンピン」「ピラミッディング」「複利運用」など、ロットを自動変更する系のオプションはすべてオフ

こうなっていませんか?
ここがオンのままだと、せっかく Lots をコード側で更新しても別ロジックで上書きされる可能性がありますので、ロット制御は一元化しておくと安心です。


2. 修正する場所:MT4の closePosition 関数

MT4用に出力された mq4 ファイルを MetaEditor で開き、次の手順で該当箇所を探します。

  1. Ctrl + F で検索
  2. bool closePosition で検索
  3. 関数内に、次のような OrderClose の行があるはずです(元コードの例):
if(OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, ArrowColor[OrderType()]) == true) {
            
   continue;
}

ここが「決済に成功した直後に何もしていない」状態なので、
この部分を「勝敗を判定して Lots を更新する」コードに差し替えます。


3. 具体的な修正内容(before/after)

方針どおり、「Lots に現在のロットが入っている」前提で、OrderClose 成功後に勝敗を見て Lots を増減させます。

before(元コード)

if(OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, ArrowColor[OrderType()]) == true) {
            
   continue;
}

after(書き換え例:MT4用)

if(OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, ArrowColor[OrderType()]) == true) {
    // この決済注文の損益を取得(MT4)
    double profit = OrderProfit();

    // 負け → ロット +0.01
    if(profit < 0) {
        Lots += 0.01;
    }
    // 勝ち → ロット -0.01
    else if(profit > 0) {
        Lots -= 0.01;
    }
    // 引き分け(profit == 0)はロット変更なし

    // 最低ロット 0.01 を保証
    if(Lots < 0.01) Lots = 0.01;

    // ロットを小数第2位までに丸める(口座仕様に合わせて調整)
    Lots = NormalizeDouble(Lots, 2);

    continue;
}

このように書き換えることで、

  • 負けたトレードの決済後:Lots が 0.01 増加
  • 勝ったトレードの決済後:Lots が 0.01 減少(ただし 0.01 未満にはならない)

というダランベール方式のロット変動が実現できます。


4. 動作イメージと注意点

  • 初期ロット:Lots = 0.01
  • 1回負けるたびに:0.02 → 0.03 → 0.04 … と 0.01 ずつロットアップ
  • 1回勝つたびに:0.05 → 0.04 → 0.03 … と 0.01 ずつロットダウン
    (0.01 未満には下がらないようにガード)

口座の最小ロットが 0.1 などの場合は、

  • コード中の 0.010.1 に変更
  • NormalizeDouble(Lots, 1) のように小数桁を合わせる

と、同じ考え方でその口座仕様に合わせることができます。

以上のように、「MT4用EAつくーるで生成されたEA」の closePosition 関数内の OrderClose 直後に上記の処理を追加していただくことで、
ご希望の「初期ロット 0.01/負けで 0.01 加算/勝ちで 0.01 減算」というダランベール方式のロット変更を実装できます

関連トピックス

検索結果がありません。

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

注目トピックス

検索結果がありません。