Questions des débutants MQL5 MT5 MetaTrader 5 - page 1502

 
psihodelit importer une fonction d' un EA à un autre ?

Par exemple, il y a un EA qui ouvre des ordres, et il y a un EA qui surveille l'état du compte, où les paramètres drawdown, etc. sont spécifiés,

J'ai besoin que lorsque le drawdown du second conseiller est atteint, le premier conseiller n'ouvre pas d'ordres....

Comment faire par exemple ?

Si le premier EA ouvre des positions avec un certain medzhik, alors vous pouvez trier ces positions dans cet EA ou dans un autre EA et calculer leur perte de profit totale. Et le deuxième Expert Advisor que vous avez compte ce profit-perte, donc il ne peut pas être un drawdown, il n'ouvre pas de positions, il surveille l'état des positions avec le medzhik désiré. En général, les positions, après avoir été ouvertes, sont autonomes, et parmi elles, vous devez généralement trouver les bonnes)))))

 
psihodelit importer une fonction d' un EA à un autre ?

Par exemple, il y a un EA qui ouvre des ordres, et il y a un EA qui surveille l'état du compte, où les paramètres drawdown, etc. sont spécifiés,

J'ai besoin que lorsque le drawdown du second conseiller est atteint, le premier conseiller n'ouvre pas d'ordres....

Comment faire par exemple ?

Plusieurs possibilités s'offrent à vous.

Vous pouvez utiliser le conseil ci-dessus. Il s'agit d'une variante assez efficace.

Vous pouvez utiliser les variables globales du terminal.

Vous pouvez mettre en place un échange entre Expert Advisors en écrivant/lisant un fichier.

Comme on dit, tous les feutres sont différents pour le goût et la couleur).

 
psihodelit importer une fonction d' un EA à un autre ?

Par exemple, il y a un EA qui ouvre des ordres, et il y a un EA qui surveille l'état du compte, où les paramètres drawdown, etc. sont spécifiés,

J'ai besoin que lorsque le drawdown du second conseiller est atteint, le premier conseiller n'ouvre pas d'ordres....

Comment faire par exemple ?

Pour commencer (IMHO bien sûr) il faut comprendre quelques subtilités

  1. Le code des deux AE peut-il être modifié ?
  2. Les AE laissent-ils des traces de leur activité dans les variables globales ?
  3. Avez-vous au moins des compétences de base en matière de codage ?
Si la réponse à ces trois subtilités est positive, il sera facile de mettre en œuvre ce que vous avez prévu, s'il y a des lacunes, ce sera plus difficile, mais c'est également possible - nous réfléchirons ensemble à quelque chose.
 
Sergey Voytsekhovsky #:

Si la réponse à ces trois subtilités est positive, ...

alors cette question ne se poserait pas ici.

 
Yuriy Bykov #:

Merci beaucoup pour l'idée suggérée ci-dessus. Voici ce qui en est ressorti, si cela vous intéresse.

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

Vous pouvez également procéder de la manière suivante :

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

Vous pouvez également procéder de la manière suivante :

Je suis d'accord, c'est magnifique ! Puis-je le mettre dans la bibliothèque ?

 
Yuriy Bykov #:

Vous pouvez également procéder de la manière suivante :

Pouvez-vous me donner un indice pour que je puisse répondre à la question ?

Vous avez utilisé la fonction mathématique f. "Résidu de la division", mais j'ai la fonction intégrée" MathMod", qui parle de"reste réel de la division de deux nombres". Que signifie le mot "réel" ? ? ???

 
Sergey Voytsekhovsky #:

Que signifie le mot TOUT ?

Dans ce cas, il s'agit de nombres fractionnaires.

 
Aleksandr Slavskii #:

Plusieurs options sont possibles.

Vous pouvez suivre les conseils ci-dessus. C'est une option tout à fait réalisable.

Vous pouvez utiliser les variables globales du terminal.

Vous pouvez mettre en place un échange entre les Expert Advisors en écrivant/lisant un fichier.

Comme on dit, tous les feutres sont différents pour le goût et la couleur)))))

Comment seulement comprendre dans quelle direction aller, par où commencer et comment. Il n'y a quasiment aucune connaissance...

  1. Le code des deux conseillers est-il modifiable ?
    Oui.
  2. Les conseillers laissent-ils des traces de leur activité dans les variables globales ?
    Je ne peux pas le dire avec certitude.
  3. Avez-vous au moins des connaissances de base en codage
    Un peu du tout.
Raison: