タイトルが入力されていません。
コンテンツがありません。
There have no category
There have no subcategory
勝敗に応じてロット変更させるコードを御教示ください。 初期ロット:0.01 負け 0.01ロット加算 勝ち 0.01ロット減算 ダランベール方式のようにロットを変動させたいのですが、コードを追加するしか方法が無いと思うので、どうかよろしくお願いいたします。
MT4版EAつくーるで作成した「MT4用EA」を前提に、勝敗に応じてロットを0.01ずつ増減させる方法(ダランベール方式)をご説明します。
まず、EAつくーる側では「ロットはコードで管理する」前提にしておくと動作がわかりやすくなります。
「基本項目」
0.01
「オプション」
こうなっていませんか? ここがオンのままだと、せっかく Lots をコード側で更新しても別ロジックで上書きされる可能性がありますので、ロット制御は一元化しておくと安心です。
Lots
closePosition
MT4用に出力された mq4 ファイルを MetaEditor で開き、次の手順で該当箇所を探します。
Ctrl + F
bool closePosition
OrderClose
if(OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, ArrowColor[OrderType()]) == true) { continue; }
ここが「決済に成功した直後に何もしていない」状態なので、 この部分を「勝敗を判定して Lots を更新する」コードに差し替えます。
方針どおり、「Lots に現在のロットが入っている」前提で、OrderClose 成功後に勝敗を見て Lots を増減させます。
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
0.02 → 0.03 → 0.04 …
0.05 → 0.04 → 0.03 …
口座の最小ロットが 0.1 などの場合は、
0.1
NormalizeDouble(Lots, 1)
と、同じ考え方でその口座仕様に合わせることができます。
以上のように、「MT4用EAつくーるで生成されたEA」の closePosition 関数内の OrderClose 直後に上記の処理を追加していただくことで、 ご希望の「初期ロット 0.01/負けで 0.01 加算/勝ちで 0.01 減算」というダランベール方式のロット変更を実装できます
コメント文がありません。
MT4版EAつくーるで作成した「MT4用EA」を前提に、勝敗に応じてロットを0.01ずつ増減させる方法(ダランベール方式)をご説明します。
1. 前提(EAつくーる側の設定:MT4)
まず、EAつくーる側では「ロットはコードで管理する」前提にしておくと動作がわかりやすくなります。
「基本項目」
0.01(初期ロット)「オプション」
こうなっていませんか?
ここがオンのままだと、せっかく
Lotsをコード側で更新しても別ロジックで上書きされる可能性がありますので、ロット制御は一元化しておくと安心です。2. 修正する場所:MT4の
closePosition関数MT4用に出力された mq4 ファイルを MetaEditor で開き、次の手順で該当箇所を探します。
Ctrl + Fで検索bool closePositionで検索OrderCloseの行があるはずです(元コードの例):ここが「決済に成功した直後に何もしていない」状態なので、
この部分を「勝敗を判定して
Lotsを更新する」コードに差し替えます。3. 具体的な修正内容(before/after)
方針どおり、「Lots に現在のロットが入っている」前提で、
OrderClose成功後に勝敗を見てLotsを増減させます。before(元コード)
after(書き換え例:MT4用)
このように書き換えることで、
Lotsが 0.01 増加Lotsが 0.01 減少(ただし 0.01 未満にはならない)というダランベール方式のロット変動が実現できます。
4. 動作イメージと注意点
Lots = 0.010.02 → 0.03 → 0.04 …と 0.01 ずつロットアップ0.05 → 0.04 → 0.03 …と 0.01 ずつロットダウン(0.01 未満には下がらないようにガード)
口座の最小ロットが 0.1 などの場合は、
0.01を0.1に変更NormalizeDouble(Lots, 1)のように小数桁を合わせると、同じ考え方でその口座仕様に合わせることができます。
以上のように、「MT4用EAつくーるで生成されたEA」の
closePosition関数内のOrderClose直後に上記の処理を追加していただくことで、ご希望の「初期ロット 0.01/負けで 0.01 加算/勝ちで 0.01 減算」というダランベール方式のロット変更を実装できます