Sistemi Esperti: Multik

 

Multik:

Consulente multicurrency.

Multik

Author: Andrey Kornishkin

 

Vogliamo normalizzare tutte le coppie in base allo strumento corrente?

dsma2 = NormalizeDouble(SMA[2] - SMA[3], _Digits);      // MA nel sito 2-3
dsma1 = NormalizeDouble(SMA[1] - SMA[2], _Digits);      // MA nel sito 1-2
 
Valmars:

Vogliamo normalizzare tutte le coppie in base allo strumento corrente?


Sì, c'è un errore. Inoltre, la funzione di definizione di una nuova barra può essere implementata senza utilizzare la funzione di copia del tempo.
 
Valmars:

Dobbiamo normalizzare tutte le coppie in base allo strumento corrente?


E come implementarlo correttamente in modo che non ci siano avvertimenti?

Nella versione originale è così:

     int Digits_ = SymbolInfoInteger(Symbol_, SYMBOL_DIGITS) + 4;
     dsma2 = NormalizeDouble(SMA[2] - SMA[3], Digits_);      // MA nel sito 2-3
     dsma1 = NormalizeDouble(SMA[1] - SMA[2], Digits_);      // MA nel sito 1-2
[Eliminato]  
AM2:

Qual è il modo corretto di implementarlo senza avvertimenti?

Nella versione originale è così:

Cosa c'entra il +4? Ecco come dovrebbe essere logicamente

int Digits_ = SymbolInfoInteger(Symbol_, SYMBOL_DIGITS);
dsma2 = NormalizeDouble(SMA[2] - SMA[3], Digits_); // MA nel sito 2-3
dsma1 = NormalizeDouble(SMA[1] - SMA[2], Digits_); // MA nel sito 1-2
 
Interesting:

Cosa c'entra questo con il +4? Dovrebbe essere logico.

Questo è anche il modo in cui viene visualizzato l'avviso:

possibile perdita di dati a causa della conversione di tipo Multik.mq5 218 18

 
AM2:

Anche l'avvertimento è così:

possibile perdita di dati a causa della conversione del tipo Multik.mq5 218 18

Per evitare gli avvisi, è necessario effettuare la conversione in questo modo

int Digits_ = (int)SymbolInfoInteger(Symbol_, SYMBOL_DIGITS);
 

Ottimo lavoro, ma il multistrumento non perde di significato quando si negoziano coppie correlate con gli stessi setup? Mi aspetterei che i loro drawdown si verifichino più o meno nello stesso momento e questo potrebbe essere un problema. Purtroppo, però, tutte le coppie di valute sono così correlate che questo potrebbe essere inevitabile. In realtà tratto anche le coppie EUR/USD GBP/USD insieme, ma con una utilizzo un trend follower e con l'altra un EA di tipo reversal, tops and bottoms.

 
sergey1294:

Se non si vogliono ricevere avvisi, è necessario effettuare la conversione in questo modo.

Grazie, funziona!
 

request.volume = Money_M();

Questo EA è un ottimo esempio di codice organizzato e ha ottimi commenti. Tuttavia, ho una domanda che riguarda la funzione di dimensione del lotto chiamata Money_M(). Qual è e dove si trova l'albero decisionale dietro a questa funzione?

Ho provato a cercare nel sito di supporto ma non ho trovato alcun riferimento e non sembra essere collegato a una classe associata.

[Eliminato]  
bdwezensky:

request.volume = Money_M();

Questo EA è un ottimo esempio di codice organizzato e ha ottimi commenti. Tuttavia, ho una domanda che riguarda la funzione di dimensione del lotto chiamata Money_M(). Qual è e dove si trova l'albero decisionale dietro questo?

Ho provato a cercare nel sito di supporto ma non ho trovato alcun riferimento e non sembra essere collegato a una classe associata.

double Money_M()
  {
   double Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000*10;
   Lots=MathMin(5,MathMax(0.1,Lots));
   if(Lots<0.1)
      Lots=NormalizeDouble(Lots,2);
   else
     {
      if(Lots<1) Lots=NormalizeDouble(Lots,1);
      else       Lots=NormalizeDouble(Lots,0);
     }
   return(Lots);
  }

Questa funzione viene utilizzata per calcolare la dimensione dei lotti di trading.

double Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000*10;

In questa stringa viene calcolata la dimensione dei lotti di negoziazione. Il calcolo viene effettuato sui fondi liberi(ACCOUNT_FREEMARGIN). Rischio = 10% dei fondi liberi disponibili.

Lots=MathMin(5,MathMax(0.1,Lots));
In questa riga viene eseguita la normalizzazione dei lotti commerciali. 0,1 <= Lotto <= 5,0