BTCの取引ロジック

EAつくーる
れんくん
2025/05/12 21:27
8

お世話になります。
BTCのEAの作成に当たってご質問があります。

取引条件のポジション1.2は月曜から金曜
取りき条件のポジション3.4は土曜から日曜

上記のようにポジションごとに取引できる曜日を指定することは可能でしょうか?
またそれぞれのポジション毎にナンピン倍率、幅、利確をパラメーター設定で変更できるようにしたいです。

コメント

GogoJungle
2025/05/14 09:45

大変おそれいりますが、コードの大幅な修正が必要となるため、ご作成いただくのが難しいロジックとなっております。
もし、コードの修正が可能な場合は、考え方のヒントとして以下をお伝えさせていただきます。

曜日制限は、エントリー処理の直前にsignal = 0を入れることで実現する

曜日を扱える関数DayOfWeek()を使用します。日曜日が0、土曜日が6です。
月~金のみエントリーを許す場合は、「曜日=日 または 曜日=土 の場合はエントリー禁止」ですから、

if (DayOfWeek() == 0 || DayOfWeek() == 6) signal = 0;

という行を追加します。例えばポジション1(Magic1で管理しています)の場合は

【修正前】

   if(signal != 0 && getOpenLots(Magic1) == 0) {
      // (ここに何らかの処理が入っている場合もあります)
      if(openPosition(signal, lots, take_profit, stop_loss, Magic1)) {
         bars1 = Bars;
      }
   }

【修正後】

   if (DayOfWeek() == 0 || DayOfWeek() == 6) signal = 0; // この行を追加しました
   if(signal != 0 && getOpenLots(Magic1) == 0) {
      // (ここに何らかの処理が入っている場合もあります)
      if(openPosition(signal, lots, take_profit, stop_loss, Magic1)) {
         bars1 = Bars;
      }
   }

といった具合です。Magic2については同様で、Magic3, Magic4については

if (DayOfWeek() != 0 && DayOfWeek() != 6) signal = 0;

を追加します。これは、「日曜日でなく、かつ、土曜日でもないならばエントリーシグナルを0にする」という意味です。

ナンピンロジックの条件をポジション毎に変える(これがとても難しい)

通常通り「ナンピン」オプションの設定をしていただいた後、その条件を決定するパラメータを4つ分に増やします。

【修正前】

input bool isNanpin = true;
input int NanpinCount = 10;
input double NanpinInterval = 50;
input double NanpinMult = 2;
input double NanpinTP = 1000;
input double NanpinSL = 1000;
input double NanpinAdd = 0;
input int NanpinCustom = 0;
input string NanpinLots = "";
input double NanpinMax = 0;

【修正後】

input bool isNanpin1 = true;
input int NanpinCount1 = 10;
input double NanpinInterval1 = 50;
input double NanpinMult1 = 2;
input double NanpinTP1 = 1000;
input double NanpinSL1 = 1000;
input double NanpinAdd1 = 0;
input int NanpinCustom1 = 0;
input string NanpinLots1 = "";
input double NanpinMax1 = 0;

input bool isNanpin2 = true;
input int NanpinCount2 = 10;
input double NanpinInterval2 = 50;
input double NanpinMult2 = 2;
input double NanpinTP2 = 1000;
input double NanpinSL2 = 1000;
input double NanpinAdd2 = 0;
input int NanpinCustom2 = 0;
input string NanpinLots2 = "";
input double NanpinMax2 = 0;

input bool isNanpin3 = true;
input int NanpinCount3 = 10;
input double NanpinInterval3 = 50;
input double NanpinMult3 = 2;
input double NanpinTP3 = 1000;
input double NanpinSL3 = 1000;
input double NanpinAdd3 = 0;
input int NanpinCustom3 = 0;
input string NanpinLots3 = "";
input double NanpinMax3 = 0;

input bool isNanpin4 = true;
input int NanpinCount4 = 10;
input double NanpinInterval4 = 50;
input double NanpinMult4 = 2;
input double NanpinTP4 = 1000;
input double NanpinSL4 = 1000;
input double NanpinAdd4 = 0;
input int NanpinCustom4 = 0;
input string NanpinLots4 = "";
input double NanpinMax4 = 0;

そして、magic_array[]という配列も変更する必要があります。
変更箇所がいくつかあります。

【修正前】

int magic_array[4];

【修正後】

int magic_array1[1];
int magic_array2[1];
int magic_array3[1];
int magic_array4[1];

【修正前】

   magic_array[0] = Magic1;
   magic_array[1] = Magic2;
   magic_array[2] = Magic3;
   magic_array[3] = Magic4;

【修正後】

   magic_array1[0] = Magic1;
   magic_array2[0] = Magic2;
   magic_array3[0] = Magic3;
   magic_array4[0] = Magic4;

そして、実際にナンピンを実行する部分も書き換えます。
まず、次の行を削除します。

   if(isNanpin == true) NanpinLogic(NanpinCount, NanpinCustom, NanpinLots, NanpinInterval, NanpinMult, NanpinTP, NanpinSL, NanpinAdd, NanpinMax, magic_array);

そして、次の行を追加します。

   if(isNanpin == true && (DayOfWeek() == 0 || DayOfWeek() == 6)) NanpinLogic(NanpinCount1, NanpinCustom1, NanpinLots1, NanpinInterval1, NanpinMult1, NanpinTP1, NanpinSL1, NanpinAdd1, NanpinMax1, magic_array1);

全ての変数名の最後に、ポジションに対応した数字が付与されている点に注意です。ポジション2~4についても同様についかします。
ただし、ポジション3,4については、if文の部分の曜日制限のコードを変更してください。

以上でございます。
ご参考になりましたら幸いですが、検証ができていないため、あくまでヒントとしてお考えいただければと存じます。上手くいくことを願っております。

関連トピックス

検索結果がありません。

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

注目トピックス

検索結果がありません。