Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1502

 
psihodelit importare una funzione da un EA ad un altro?

Ad esempio, c'è un EA che apre gli ordini, e c'è un EA che monitora lo stato del conto, dove sono specificati i parametri drawdown, ecc,

Ho bisogno che quando il drawdown del secondo advisor viene raggiunto, il primo advisor non apra ordini....

Come fare per esempio?

Se il primo EA apre posizioni con un certo medzhik, allora è possibile ordinare queste posizioni in esso o in un altro EA e calcolare la loro perdita di profitto totale. Il secondo Expert Advisor conta questo profitto-perdita, quindi non può essere un drawdown, non apre posizioni, monitora lo stato delle posizioni con il medzhik desiderato. E in generale, le posizioni, dopo che sono state aperte, sono a sé stanti, e tra di esse è solitamente necessario trovare quelle giuste)))))

 
psihodelit importare una funzione da un EA ad un altro?

Ad esempio, c'è un EA che apre gli ordini, e c'è un EA che monitora lo stato del conto, dove sono specificati i parametri drawdown, ecc,

Ho bisogno che quando il drawdown del secondo advisor è raggiunto, il primo advisor non apra ordini....

Come fare per esempio?

Ci sono diverse opzioni.

È possibile utilizzare il consiglio riportato sopra. È una variante abbastanza funzionante.

Si possono utilizzare le variabili globali del terminale.

Si può impostare uno scambio tra Expert Advisor scrivendo e leggendo un file.

Come si dice, tutti i pennarelli sono diversi per gusto e colore).

 
psihodelit importare una funzione da un EA ad un altro?

Ad esempio, c'è un EA che apre gli ordini, e c'è un EA che monitora lo stato del conto, dove vengono specificati i parametri drawdown, ecc,

Ho bisogno che quando il drawdown del secondo advisor viene raggiunto, il primo advisor non apra gli ordini....

Come fare per esempio?

Per cominciare (ovviamente IMHO) è necessario comprendere alcune sottigliezze

  1. Se il codice di entrambi gli EA è disponibile per la modifica.
  2. Gli EA lasciano tracce della loro attività nelle variabili globali?
  3. Avete almeno le competenze di base di codifica?
Se la risposta a tutte e tre le sottigliezze è positiva, sarà facile implementare ciò che avete pianificato, se ci sono lacune sarà più difficile, ma è anche possibile - penseremo a qualcosa insieme.
 
Sergey Voytsekhovsky #:

Se la risposta a tutte e tre le domande è positiva, ...

allora la questione non si porrebbe in questo caso.

 
Yuriy Bykov #:

Grazie mille per l'idea suggerita sopra. Ecco cosa ne è venuto fuori, se ti interessa.

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

Oppure si può procedere in questo modo:

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

Oppure si può procedere in questo modo:

Sono d'accordo, bellissimo! Posso metterlo in biblioteca?

 
Yuriy Bykov #:

Oppure si può procedere in questo modo:

Puoi darmi un suggerimento se riesco a capire la domanda?

Hai usato la funzione matematica f. "Residuo della divisione", ma io ho la funzione incorporata" MathMod", che parla di"resto reale della divisione di due numeri". Cosa significa la parola "reale" ????

 
Sergey Voytsekhovsky #:

Che cosa significa la parola "TUTTO"?

In questo caso, i numeri frazionari sono impliciti.

 
Aleksandr Slavskii #:

Esistono diverse opzioni.

Potete utilizzare i consigli di cui sopra. È un'opzione abbastanza praticabile.

È possibile utilizzare le variabili globali del terminale.

È possibile impostare lo scambio tra Expert Advisor scrivendo/leggendo un file.

Come si suol dire, tutti i pennarelli sono diversi per gusto e colore)))))

Come solo capire in che direzione muoversi, da dove partire e come. Non c'è quasi nessuna conoscenza...

  1. Il codice di entrambi i consulenti è disponibile per la modifica?
    Sì.
  2. I consulenti lasciano tracce della loro attività nelle Variabili Globali
    Non posso dirlo con certezza.
  3. Avete almeno delle competenze di base di codifica
    Un po'.