初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1502

 
psihodelit 関数をインポート することは可能ですか?

例えば、注文をオープンするEAがあり、口座の状態を監視するEAがあり、そこではパラメータのドローダウンなどが指定されています、

2つ目のアドバイザーのドローダウンに達すると、1つ目のアドバイザーは注文を出さないようにしたいのですが......。

例えばどうすればいいのでしょうか?

1つ目のEAがあるメドシクでポジションをオープンした場合、そのEAまたは別のEAでこれらのポジションをソートし、それらの合計損益を計算することができます。そして、2つ目のEAはこの損益をカウントするので、ドローダウンになることはなく、ポジションをオープンすることもありません。そして、一般的に、ポジションは、それらが開かれた後、独自のものであり、それらの間で、あなたは通常、適切なものを見つける必要があります)))))

 
psihodelit 関数をインポート することは可能ですか?

例えば、注文をオープンするEAがあり、口座の状態を監視するEAがあり、そこではパラメータのドローダウンなどが指定されています、

2つ目のアドバイザーのドローダウンに達すると、1つ目のアドバイザーは注文を出さないようにしたいのですが......。

例えばどうすればいいのでしょうか?

いくつかの選択肢があります。

上記のアドバイスが使えます。これはかなり使える方法です。

ターミナルのグローバル変数を 使う。

ファイルを書き込んだり読み込んだりして、Expert Advisor同士のやり取りを設定することができます。

よく言われるように、フェルトペンはどれも味も色も違います(笑)。

 
psihodelit 関数をインポート することは可能ですか?

例えば、注文をオープンするEAがあり、口座の状態を監視するEAがあり、そこではパラメータのドローダウンなどが指定されています、

2つ目のアドバイザーのドローダウンに達すると、1つ目のアドバイザーは注文を出さないようにしたいのですが......。

例えばどうすればいいのでしょうか?

まず(もちろんIMHOですが)、いくつかの微妙な点を理解する必要があります。

  1. 両方のEAのコードが編集可能かどうか。
  2. EAはグローバル変数に活動の痕跡を残すか。
  3. 少なくとも基本的なコーディングスキルがあるか
3つの微妙な点の答えがすべて肯定的であれば、あなたが計画したものを実装するのは簡単でしょう。もしギャップがあれば、より難しくなるでしょうが、それも可能です - 一緒に何かを考えましょう。
 
Sergey Voytsekhovsky #:

この3つの微妙な問題に対する答えがすべて肯定的であれば、......。

であれば、この質問はここでは生じない。

 
Yuriy Bykov #:

上で提案してくれたアイデア、どうもありがとう。もしご興味がおありでしたら、こんなものが出来上がりました。

//---
   NOD = 1;
   ArraySort(Arr_ZigLag);
   size_zigLag = ArraySize(Arr_ZigLag);
   for(int i = size_zigLag - 1; i > 0; i--)
     {
      if(NOD != 1)
         if(Arr_ZigLag[i] != Arr_ZigLag[i-1])
            NOD = CalculateNOD(Arr_ZigLag[i-1], NOD);
      if(NOD == 1)
         if(Arr_ZigLag[i] != Arr_ZigLag[i-1])
            NOD = CalculateNOD(Arr_ZigLag[i], Arr_ZigLag[i-1]);
           }
   return(NOD);
  }
//+------------------------------------------------------------------+
//| Функция НОД(НаибольшийОбщийДелитель)                             |
//+------------------------------------------------------------------+
int CalculateNOD(int a=1, int b=1)
  {
   int Nod = (int)MathMod(a, b);
   while(Nod > 0)
     {
      a = b;
      b = Nod;
      Nod = (int)MathMod(a, b);
     }
   if(Nod == 0)
      Nod = b;
   return(Nod);
  }
 
Sergey Voytsekhovsky #:

あるいは、こうすることもできる:

//+------------------------------------------------------------------+
//| Наибольший общий делитель чисел a и b                            |
//+------------------------------------------------------------------+
int gcd(int a, int b) {
   int c;

   while(b > 0) {
      c = a % b;
      a = b;
      b = c;
   }

   return a;
}

//+------------------------------------------------------------------+
//| Наибольший общий делитель массива чисел a                        |
//+------------------------------------------------------------------+
int ArrayGcd(int &a[]) {
   int n = ArraySize(a);
   if(n == 1) {
      return 0;
   }
   int c = gcd(a[0], a[1]);

   for(int i = 2; i < n; i++) {
      c = gcd(a[i], c);
      if(c == 1) {
         break;
      }
   }
   return c;
}


int OnCalculate(...) {
   ...
   ArraySort(Arr_ZigLag);
   NOD = ArrayGcd(Arr_ZigLag);
   return(NOD);
  }
 
Yuriy Bykov #:

あるいは、こうすることもできる:

そうですね、美しい!図書室に置いてもいいですか?

 
Yuriy Bykov #:

あるいは、こうすることもできる:

質問を理解できるかどうか、ヒントをいただけますか?

あなたは数学のfを使いました。"割り算の余り "とありますが、私は" MathMod "という関数を内蔵しており、それは"2つの数の割り算による実数の余り"について述べています。real "とはどういう意味ですか?

 
Sergey Voytsekhovsky #:

EVERYTHINGとはどういう意味なのか?

この場合、端数が暗示されている。

 
Aleksandr Slavskii #:

いくつかの選択肢がある。

上記のアドバイスを使うことができる。かなり実行可能なオプションだ。

グローバルターミナル変数を 使うことができます。

ファイルを書き込んだり読み込んだりする ことで、Expert Advisor間のやり取りを設定できます。

フェルトペンは味も色も千差万別と言いますが)))))

どの方向に、どこから、どのように動けばいいのか。知識がほとんどない...。


  1. はい。
  2. アドバイザーはグローバル変数に活動の痕跡を残すか
    確かなことは言えない。
  3. 少なくとも基本的なコーディングスキルはありますか
    少しはあります。
理由: