解決済み

EAの複利運用のパラメータについて

2024/12/28 18:49
74

複利リスクパーセントではなく、証拠金の増減に対して自動でLotを増減できるようにしたいのですが、その際のソースコードはどのようなものになるでしょうか?

MAXポジション数の設定は、[1~5]まで選択できるようにします。

ナンピン・マーチンゲールは無しのEAです。(MAXポジション数は5まで設定できますが、それぞれのポジションがナンピンEAのように関連して決済されることはありません。例えば、それぞれのポジションはTP:20pips、SL:100pipsのように決済されます。)

下記は、パラメータで、MAXポジション数を5と設定した時の、複利運用の際の証拠金の額とLotの対応表です。

合計MAXロットが0.05Lot(内訳:0.01Lot×5)→<1ポジ分のロットが0.01Lot>の時の<推奨証拠金は5万円>

合計MAXロットが0.1Lot(内訳:0.02Lot×5)→<1ポジ分のロットが0.02Lot>の時の<推奨証拠金は10万円>→なので、証拠金が10万円に届いたら、次に取るポジションは0.02Lotになるようにプログラミングする。

合計MAXロットが0.15Lot(内訳:0.03Lot×5)→<1ポジ分のロットが0.03Lot>の時の<推奨証拠金は15万円>→なので、証拠金が15万円に届いたら、次に取るポジションは0.03Lotになるようにプログラミングする。

合計MAXロットが0.2Lot(内訳:0.04Lot×5)→<1ポジ分のロットが0.04Lot>の時の<推奨証拠金は20万円>→なので、証拠金が20万円に届いたら、次に取るポジションは0.04Lotになるようにプログラミングする。

合計MAXロットが0.25Lot(内訳:0.05Lot×5)→<1ポジ分のロットが0.05Lot>の時の<推奨証拠金は25万円>→なので、証拠金が25万円に届いたら、次に取るポジションは0.05Lotになるようにプログラミングする。

合計MAXロットが0.3Lot(内訳:0.06Lot×5)→<1ポジ分のロットが0.06Lot>の時の<推奨証拠金は30万円>→なので、証拠金が30万円に届いたら、次に取るポジションは0.06Lotになるようにプログラミングする。

合計MAXロットが0.35Lot(内訳:0.07Lot×5)→<1ポジ分のロットが0.07Lot>の時の<推奨証拠金は35万円>→なので、証拠金が35万円に届いたら、次に取るポジションは0.07Lotになるようにプログラミングする。

合計MAXロットが0.4Lot(内訳:0.08Lot×5)→<1ポジ分のロットが0.08Lot>の時の<推奨証拠金は40万円>→なので、証拠金が40万円に届いたら、次に取るポジションは0.08Lotになるようにプログラミングする。

合計MAXロットが0.45Lot(内訳:0.09Lot×5)→<1ポジ分のロットが0.09Lot>の時の<推奨証拠金は45万円>→なので、証拠金が45万円に届いたら、次に取るポジションは0.09Lotになるようにプログラミングする。

合計MAXロットが0.5Lot(内訳:0.1Lot×5)→<1ポジ分のロットが0.1Lot>の時の<推奨証拠金は50万円>→なので、証拠金が50万円に届いたら、次に取るポジションは0.1Lotになるようにプログラミングする。

合計MAXロットが0.55Lot(内訳:0.11Lot×5)→<1ポジ分のロットが0.11Lot>の時の<推奨証拠金は55万円>→なので、証拠金が55万円に届いたら、次に取るポジションは0.11Lotになるようにプログラミングする。

合計MAXロットが0.6Lot(内訳:0.12Lot×5)→<1ポジ分のロットが0.12Lot>の時の<推奨証拠金は60万円>→なので、証拠金が60万円に届いたら、次に取るポジションは0.12Lotになるようにプログラミングする。

合計MAXロットが0.65Lot(内訳:0.13Lot×5)→<1ポジ分のロットが0.13Lot>の時の<推奨証拠金は65万円>→なので、証拠金が65万円に届いたら、次に取るポジションは0.13Lotになるようにプログラミングする。

合計MAXロットが0.7Lot(内訳:0.14Lot×5)→<1ポジ分のロットが0.14Lot>の時の<推奨証拠金は70万円>→なので、証拠金が70万円に届いたら、次に取るポジションは0.14Lotになるようにプログラミングする。

合計MAXロットが0.75Lot(内訳:0.15Lot×5)→<1ポジ分のロットが0.15Lot>の時の<推奨証拠金は75万円>→なので、証拠金が75万円に届いたら、次に取るポジションは0.15Lotになるようにプログラミングする。

合計MAXロットが0.8Lot(内訳:0.16Lot×5)→<1ポジ分のロットが0.16Lot>の時の<推奨証拠金は80万円>→なので、証拠金が80万円に届いたら、次に取るポジションは0.16Lotになるようにプログラミングする。

合計MAXロットが0.85Lot(内訳:0.17Lot×5)→<1ポジ分のロットが0.17Lot>の時の<推奨証拠金は85万円>→なので、証拠金が85万円に届いたら、次に取るポジションは0.17Lotになるようにプログラミングする。

合計MAXロットが0.9Lot(内訳:0.18Lot×5)→<1ポジ分のロットが0.18Lot>の時の<推奨証拠金は90万円>→なので、証拠金が90万円に届いたら、次に取るポジションは0.18Lotになるようにプログラミングする。

合計MAXロットが0.95Lot(内訳:0.19Lot×5)→<1ポジ分のロットが0.19Lot>の時の<推奨証拠金は95万円>→なので、証拠金が95万円に届いたら、次に取るポジションは0.19Lotになるようにプログラミングする。

合計MAXロットが1Lot(内訳:0.2Lot×5)→<1ポジ分のロットが0.2Lot>の時の<推奨証拠金は100万円>→なので、証拠金が100万円に届いたら、次に取るポジションは0.2Lotになるようにプログラミングする。

便宜上、ここから下は1ポジ分のロットを0.1Lot刻みにします。(ただし、実際はここから↓も、(複利運用設定でも、単利固定ロット設定でも)0.01ロット単位で設定される/できるようにする。)

合計MAXロットが1.5Lot(内訳:0.3Lot×5)→<1ポジ分のロットが0.3Lot>の時の<推奨証拠金は150万円>→なので、証拠金が150万円に届いたら、次に取るポジションは0.3Lotになるようにプログラミングする。

合計MAXロットが2Lot(内訳:0.4Lot×5)→<1ポジ分のロットが0.4Lot>の時の<推奨証拠金は200万円>→なので、証拠金が200万円に届いたら、次に取るポジションは0.4Lotになるようにプログラミングする。

合計MAXロットが2.5Lot(内訳:0.5Lot×5)→<1ポジ分のロットが0.5Lot>の時の<推奨証拠金は250万円>→なので、証拠金が250万円に届いたら、次に取るポジションは0.5Lotになるようにプログラミングする。

合計MAXロットが3Lot(内訳:0.6Lot×5)→<1ポジ分のロットが0.6Lot>の時の<推奨証拠金は300万円>→なので、証拠金が300万円に届いたら、次に取るポジションは0.6Lotになるようにプログラミングする。

合計MAXロットが3.5Lot(内訳:0.7Lot×5)→<1ポジ分のロットが0.7Lot>の時の<推奨証拠金は350万円>→なので、証拠金が350万円に届いたら、次に取るポジションは0.7Lotになるようにプログラミングする。

合計MAXロットが4Lot(内訳:0.8Lot×5)→<1ポジ分のロットが0.8Lot>の時の<推奨証拠金は400万円>→なので、証拠金が400万円に届いたら、次に取るポジションは0.8Lotになるようにプログラミングする。

合計MAXロットが4.5Lot(内訳:0.9Lot×5)→<1ポジ分のロットが0.9Lot>の時の<推奨証拠金は450万円>→なので、証拠金が450万円に届いたら、次に取るポジションは0.9Lotになるようにプログラミングする。

合計MAXロットが5Lot(内訳:1Lot×5)→<1ポジ分のロットが1Lot>の時の<推奨証拠金は500万円>→なので、証拠金が500万円に届いたら、次に取るポジションは1Lotになるようにプログラミングする。

パラメータで、MAXポジション数を3と設定した場合。

合計MAXロットが0.03Lot(内訳:0.01Lot×3)→<1ポジ分のロットが0.01Lot>の時の<推奨証拠金は3万円>

合計MAXロットが0.06Lot(内訳:0.02Lot×3)→<1ポジ分のロットが0.02Lot>の時の<推奨証拠金は6万円>→なので、証拠金が6万円に届いたら、次に取るポジションは0.02Lotになるようにプログラミングする。

以下は、MAXポジション数を5と設定した場合と同じ考え方です。

よろしくお願いいたします。

コメント

GogoJungle
2025/01/07 12:13

推奨証拠金をE
最大ポジション数をN
1ポジ分のロットをLとすると、

> 合計MAXロットが0.05Lot(内訳:0.01Lot×5)→<1ポジ分のロットが0.01Lot>の時の<推奨証拠金は5万円>

の関係から

L = 0.01 * (E / 10000) / N

すなわち

L = E / (1000000 * N)

の関係が成立します。
有効証拠金はAccountEquity()という関数で取得できますので、Lをlots, NをNumMaxPositionという変数にすれば

lots = AccountEquity() / (1000000 * NumMaxPosition);

となり、このコードを利用してロットの更新ができます。

通常通りEAをご作成いただいた後、ソースコードを次のようにご修正ください。

変数の定義

最大ポジション数を表す変数NumMaxPositionを定義します。
マジックナンバーの定義の下に、初期値を5として記載しておきます。

【修正前】

input int Magic1 = 1;
input int Magic2 = 2;
input int Magic3 = 3;
input int Magic4 = 4;
input int Magic5 = 5;

【修正後】

input int Magic1 = 1;
input int Magic2 = 2;
input int Magic3 = 3;
input int Magic4 = 4;
input int Magic5 = 5;
input int NumMaxPosition = 5;

lotsを更新する処理の追加

全ての エントリーの直前に、前述のコードを追加します。
※下記では、例としてMagic1に関する修正例を記載しています。

【修正前】

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

【修正後】

      lots = AccountEquity() / (1000000 * NumMaxPosition); // この行を追加
      if(openPosition(signal, lots, take_profit, stop_loss, Magic1)) {
         bars1 = Bars;
      }

以上でございます。
ご参考になりましたら幸いです。

toshi
2025/01/09 04:22

ありがとうございました。

関連トピックス

検索結果がありません。

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

注目トピックス

検索結果がありません。