Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1502

 
psihodelit eine Funktion von einem EA in einen anderen zu importieren?

Zum Beispiel gibt es einen EA, der Aufträge öffnet, und es gibt einen EA, der den Zustand des Kontos überwacht, wo die Parameter Drawdown, etc. angegeben sind,

Ich möchte, dass, wenn der Drawdown des zweiten Advisors erreicht ist, der erste Advisor keine Aufträge eröffnet....

Wie kann man das zum Beispiel machen?

Wenn der erste EA öffnet Positionen mit einem bestimmten medzhik, dann können Sie diese Positionen in ihm oder in einem anderen EA sortieren und berechnen ihre gesamten Gewinn-Verlust. Und der zweite Expert Advisor, den Sie haben, zählt diesen Gewinn-Verlust, so dass es nicht ein Drawdown sein kann, er öffnet keine Positionen, sondern überwacht den Zustand der Positionen mit der gewünschten Medzhik. Und in der Regel, Positionen, nachdem sie geöffnet sind, sind auf ihre eigenen, und unter ihnen müssen Sie in der Regel die richtigen zu finden)))))

 
psihodelit eine Funktion von einem EA in einen anderen zu importieren?

Zum Beispiel gibt es einen EA, der Aufträge öffnet, und es gibt einen EA, der den Zustand des Kontos überwacht, wo die Parameter Drawdown, etc. angegeben sind,

Ich möchte, dass, wenn der Drawdown des zweiten Advisors erreicht ist, der erste Advisor keine Aufträge eröffnet....

Wie kann man das zum Beispiel machen?

Es gibt mehrere Möglichkeiten.

Sie können den obigen Ratschlag verwenden. Das ist eine recht funktionierende Variante.

Sie können die globalen Variablen des Terminals verwenden .

Sie können einen Austausch zwischen Expert Advisors einrichten, indem Sie eine Datei schreiben/lesen.

Wie man sagt, sind alle Filzstifte unterschiedlich in Geschmack und Farbe).

 
psihodelit eine Funktion von einem EA in einen anderen zu importieren?

Zum Beispiel gibt es einen EA, der Aufträge öffnet, und es gibt einen EA, der den Zustand des Kontos überwacht, wo die Parameter Drawdown, etc. angegeben sind,

Ich möchte, dass, wenn der Drawdown des zweiten Advisors erreicht ist, der erste Advisor keine Aufträge eröffnet....

Wie kann man das zum Beispiel machen?

Zunächst einmal (IMHO natürlich) müssen Sie ein paar Feinheiten verstehen

  1. Ob der Code der beiden EAs zur Bearbeitung verfügbar ist.
  2. Hinterlassen die EAs Spuren ihrer Aktivität in globalen Variablen?
  3. Verfügen Sie zumindest über grundlegende Programmierkenntnisse?
Wenn die Antwort auf alle drei Fragen positiv ausfällt, wird es einfach sein, das zu implementieren, was Sie geplant haben. Wenn es Lücken gibt, wird es schwieriger, aber es ist auch möglich - wir werden uns gemeinsam etwas einfallen lassen.
 
Sergey Voytsekhovsky #:

Wenn die Antwort auf alle drei Feinheiten positiv ist, ...

dann würde sich diese Frage hier nicht stellen.

 
Yuriy Bykov #:

Vielen Dank für die oben vorgeschlagene Idee. Das ist dabei herausgekommen, falls Sie interessiert sind.

//---
   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 #:

Oder man könnte es so machen:

//+------------------------------------------------------------------+
//| Наибольший общий делитель чисел 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 #:

Oder man könnte es so machen:

Ich stimme zu, schön! Darf ich es in die Bibliothek stellen?

 
Yuriy Bykov #:

Oder man könnte es so machen:

Kannst du mir einen Tipp geben, ob ich die Frage richtig beantworten kann?

Du hast die maths f verwendet. "Rest von der Division", aber ich habe die eingebaute Funktion" MathMod", sie spricht von"reellem Rest von der Division von zwei Zahlen". Was bedeutet das Wort "real"????

 
Sergey Voytsekhovsky #:

Was bedeutet das Wort EVERYTHING?

In diesem Fall sind Bruchzahlen impliziert.

 
Aleksandr Slavskii #:

Es gibt mehrere Möglichkeiten.

Sie können die oben genannten Ratschläge befolgen. Das ist eine durchaus praktikable Option.

Sie können globale Terminalvariablen verwenden.

Sie können den Austausch zwischen Expert Advisors einrichten, indem Sie eine Datei schreiben/lesen.

Wie man sagt, sind alle Filzstifte unterschiedlich in Geschmack und Farbe)))))

Wie nur zu verstehen, in welche Richtung zu bewegen, wo zu starten und wie. Es gibt fast kein Wissen...

  1. Ist der Code der beiden Berater zur Bearbeitung verfügbar?
    Ja.
  2. Hinterlassen die Berater Spuren ihrer Tätigkeit in den globalen Variablen
    Ich kann es nicht mit Sicherheit sagen.
  3. Verfügen Sie zumindest über grundlegende Programmierkenntnisse
    Ein bisschen schon.
Grund der Beschwerde: