Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1502

 
psihodelit importar uma função de um EA para outro?

Por exemplo, há um EA que abre ordens e há um EA que monitora o estado da conta, onde os parâmetros drawdown etc. são especificados,

Preciso que, quando o drawdown do segundo consultor for atingido, o primeiro consultor não abra ordens....

Como fazer isso, por exemplo?

Se o primeiro EA abrir posições com um determinado medzhik, você poderá classificar essas posições nele ou em outro EA e calcular o lucro-perda total. E o segundo Expert Advisor que você tem conta esse lucro-perda, portanto, não pode ser um drawdown, ele não abre posições, ele monitora o estado das posições com o medzhik desejado. E, em geral, as posições, depois de abertas, ficam por conta própria e, entre elas, você geralmente precisa encontrar as corretas)))))

 
psihodelit importar uma função de um EA para outro?

Por exemplo, há um EA que abre ordens e há um EA que monitora o estado da conta, onde os parâmetros drawdown etc. são especificados,

Preciso que, quando o drawdown do segundo consultor for atingido, o primeiro consultor não abra ordens....

Como fazer isso, por exemplo?

Há várias opções.

Você pode usar o conselho acima. Essa é uma variante bastante funcional.

Você pode usar as variáveis globais do terminal.

Você pode configurar uma troca entre os Expert Advisors escrevendo/lendo um arquivo.

Como se diz, todas as canetas de feltro são diferentes em termos de gosto e cor).

 
psihodelit importar uma função de um EA para outro?

Por exemplo, há um EA que abre ordens e há um EA que monitora o estado da conta, onde os parâmetros drawdown etc. são especificados,

Preciso que, quando o drawdown do segundo consultor for atingido, o primeiro consultor não abra ordens....

Como fazer isso, por exemplo?

Para começar (IMHO, é claro), você precisa entender algumas sutilezas

  1. Se o código de ambos os EAs está disponível para edição.
  2. Os EAs deixam rastros de suas atividades nas variáveis globais?
  3. Você tem pelo menos habilidades básicas de codificação?
Se a resposta a todas as três sutilezas for positiva, será fácil implementar o que você planejou; se houver lacunas, será mais difícil, mas também é possível - pensaremos em algo juntos.
 
Sergey Voytsekhovsky #:

Se a resposta a todas as três sutilezas for positiva, ...

então essa questão não surgiria aqui.

 
Yuriy Bykov #:

Muito obrigado pela ideia sugerida acima. Aqui está o resultado, se você estiver interessado.

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

Ou você poderia fazer o seguinte:

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

Ou você poderia fazer o seguinte:

Concordo, lindo! Posso colocá-lo na biblioteca?

 
Yuriy Bykov #:

Ou você poderia fazer o seguinte:

Você pode me dar uma dica se eu conseguir responder à pergunta?

Você usou a função matemática f. "Residue from division" (Resíduo da divisão), mas eu tenho a função embutida" MathMod", que fala sobre"real remainder from division of two numbers" (resto realda divisão de dois números). O que significa a palavra "real"? ????

 
Sergey Voytsekhovsky #:

O que significa a palavra EVERYTHING???

Nesse caso, números fracionários estão implícitos.

 
Aleksandr Slavskii #:

Há várias opções.

Você pode usar o conselho acima. Essa é uma opção bastante viável.

Você pode usar as variáveis globais do terminal.

Você pode configurar a troca entre os Expert Advisors escrevendo/leitura de um arquivo.

Como se costuma dizer, todas as canetas de feltro são diferentes em termos de gosto e cor)))))

Como apenas entender em que direção se mover, por onde começar e como. Não há quase nenhum conhecimento...

  1. O código de ambos os consultores está disponível para edição?
    Sim.
  2. Os consultores deixam rastros de sua atividade em Global Variables
    Não sei dizer com certeza.
  3. Você tem pelo menos habilidades básicas de codificação
    Um pouco.
Razão: