Backtesting dell'EA multi-valuta - pagina 2

 
Nel mio caso la soluzione era il metodo IsNewBar() e il metodo di esecuzione "Every Tick", a meno che il mio EA lavori solo su prezzi aperti.
Documentation on MQL5: Standard Constants, Enumerations and Structures / Indicator Constants / Price Constants
  • www.mql5.com
Standard Constants, Enumerations and Structures / Indicator Constants / Price Constants - Documentation on MQL5
 
trendick:

Ali, l'esempio che ho citato sopra è l'EA a cui ti riferisci, che è la fonte della funzione IsNewBar() che hai menzionato, e già la usa.

Come spieghi questo?

Parlavo del mio EA che fa trading su due simboli.Un simbolo riceve i dati con ontick()

l'altro usa Isnewbar()

Quando cambio il loro modo di ottenere i dati il risultato è lo stesso. Potresti provare questo e confrontare i risultati. Ho anche provato a ottenere entrambe le quotazioni usando isnewbar come l'EA discusso sopra e ho avuto gli stessi problemi però ottenendo le quotazioni del simbolo originale con ontick() il problema si è risolto.

Naturalmente c'è un problema con il tester, ho solo mostrato come sono riuscito a ottenere i risultati desiderati.

 
kgo:
Nel mio caso la soluzione era il metodo IsNewBar() e passare al metodo di esecuzione "Every Tick" a meno che il mio EA lavori solo sui prezzi aperti.

Puoi per favore approfondire, magari con uno snippet di codice per dimostrarlo? Puoi gestire 3 valute?
 
trendick:
Puoi per favore approfondire, magari con uno snippet di codice per dimostrarlo? Puoi gestire 3 valute?

Ok, ho capito cosa vuoi dire. Una delle coppie viene usata per innescare l'apertura di una nuova barra e per le altre si leggono istantaneamente i tick.

 

Kgo, ma ancora questo non risolve il problema nel mio caso. Potresti per favore mostrare uno snippet di quello che fai?

Grazie, trendick

 
Grazie TheEconmist! (Pensavo che voi ragazzi vi atteneste all'ipotesi del cammino casuale...:-)): sto controllando questo subito.
 
Ho fatto qualche nuovo test e il mio post precedente non è corretto. Il metodo IsNewBar() non è di aiuto. TheEconomist mostra un buon esempio di come OnTick() deve essere implementato per un EA multi-valuta.
 
Ci credi che non so nemmeno dove sia questo metodo IsNewBar()? Quale classe?
 
TheEconomist:
Ci credi che non so nemmeno dove sia questo metodo IsNewBar()? Quale classe?

Ci riferiamo al Metodo dell'articolo 105. Eccolo (solo l'inizio e la fine sono rilevanti):

Eccolo qui:

/+X================================================================X+
//| IsNewBar() function                                              |
//+X================================================================X+
bool IsNewBar(int Number,string symbol,ENUM_TIMEFRAMES timeframe)
  {
//----+
   static datetime Told[];
   datetime Tnew[1];
//----+ Declare variable to store sizes of variables arrays
   static int Size_=0;

//----+ Change size of variables arrays
   if(Number+1>Size_)
     {
      uint size=Number+1;
      //----
      if(ArrayResize(Told,size)==-1)
        {
         string word="";
         StringConcatenate(word,"IsNewBar( ",Number,
                           " ): Error!!! Unable to change sizes of variables arrays!!!");
         Print(word);
         //----          
         int error=GetLastError();
         ResetLastError();
         if(error>4000)
           {
            StringConcatenate(word,"IsNewBar( ",Number," ): Error code ",error);
            Print(word);
           }
         //----                                                                                                                                                                                                  
         Size_=-2;
         return(false);
        }
     }

   CopyTime(symbol,timeframe,0,1,Tnew);
   if(Tnew[0]!=Told[Number])
     {
      Told[Number]=Tnew[0];
      return(true);
     }
//----+
   return(false);
  }
Motivazione: