タイトルが入力されていません。
コンテンツがありません。
There have no category
There have no subcategory
お世話になります。 マーチンゲールの設定で0.1ロットから負けるたびに1.1倍づつロット数をあげていく場合で勝ったときに初期値の0.1に戻るのではなく、一つ前のロット数に減らすやり方があれば教えてください。 例えば、3連敗でロット数が0.1→0.12→0.13→0.14に増加し、4回目に勝ったら次のロット数が0.14→0.13に戻るような方法です。 よろしくお願いします。
お問い合わせありがとうございます。
EAつくーるの「マーチンゲール設定」では、標準機能としては 「負ければ倍率アップ」「勝てば初期化」 という挙動しかサポートしておらず、「勝ちで一段階だけロットを減らす」動きは設定画面からは実現できません。
ただし、出力されたEAコードを一部修正することでご希望の動作は可能です。以下に修正方法をご案内いたします。
EAつくーるの出力コードを MetaEditor で開き、次の修正を行ってください。
ファイル冒頭(input などの宣言の下あたり)に追記します。
input
double CurrentLot = 0.1; // 初期ロット double LotStepRate = 1.1; // 負けた時に掛ける倍率
OnTick() 内で、ポジション決済直後に呼ばれる箇所を探して、下記のように勝敗判定を追加してください。
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); } } }
> 補足:ticket は OrderClose() 直後に取得できる約定チケット番号を渡してください。 > EAつくーる出力コードでは、ポジションを決済する部分(closePosition() 呼び出し後)に UpdateLotByResult(ticket); を追記すれば連動できます。
ticket
OrderClose()
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; }
このように「階段状の増減」が実現されます。
CurrentLot
GlobalVariableSet()
GlobalVariableGet()
NormalizeDouble(..., 2)
コメント文がありません。
お問い合わせありがとうございます。
EAつくーるの「マーチンゲール設定」では、標準機能としては 「負ければ倍率アップ」「勝てば初期化」 という挙動しかサポートしておらず、「勝ちで一段階だけロットを減らす」動きは設定画面からは実現できません。
ただし、出力されたEAコードを一部修正することでご希望の動作は可能です。以下に修正方法をご案内いたします。
修正のポイント
コード修正例(MQL4)
EAつくーるの出力コードを MetaEditor で開き、次の修正を行ってください。
① グローバル変数の追加
ファイル冒頭(
input
などの宣言の下あたり)に追記します。② 勝敗によるロット更新処理
OnTick()
内で、ポジション決済直後に呼ばれる箇所を探して、下記のように勝敗判定を追加してください。> 補足:
ticket
はOrderClose()
直後に取得できる約定チケット番号を渡してください。> EAつくーる出力コードでは、ポジションを決済する部分(
closePosition()
呼び出し後)にUpdateLotByResult(ticket);
を追記すれば連動できます。③ エントリー時のロット数を差し替え
エントリーを実行している部分を探し、下記のように修正します。
【修正前】
【修正後】
動作イメージ
このように「階段状の増減」が実現されます。
注意点
CurrentLot
がリセットされます。継続管理したい場合はGlobalVariableSet()
/GlobalVariableGet()
を利用して MT4 のグローバル変数に保存してください。NormalizeDouble(..., 2)
の小数点桁数を調整してください。