MetaTrader 5 Strategy Tester: bug, errori, suggerimenti per il miglioramento - pagina 47

 
traveller00:

Costruire 2280. Borsa, mercato dei futures. Tutta la storia viene caricata, ma i test vengono fatti offline. iBarShift funziona stranamente negli indicatori. E lo stesso codice funziona bene nello script. È un bug o mi manca qualcosa?

Esiste un tale codice. Essenzialmente scorre attraverso tutti i simboli dall'esame del mercato e strattona l'iBarShift. Lo stesso codice funziona bene nello script. L'indicatore produce -1 per tutti i simboli, tranne quello corrente (sul grafico di cui è in esecuzione) con l'errore che non c'è storia. Allo stesso tempo, alla seconda esecuzione, carica la storia e la visualizza normalmente.

La disponibilità dei dati nell'indicatore non è garantita, quindi dovreste controllare il successo del suo recupero. Se non riesce, allora riprova inOnCalculate. Fare riferimento ai dati in OnInit non è una buona idea.


#property indicator_separate_window

void OnInit()
{
}

int OnCalculate(const int rates_total,const int prev_calculated,const datetime& time[],const double& open[],const double& high[],
  const double& low[],const double& close[],const long& tick_volume[],const long& volume[],const int& spread[])
{
  static bool printed = false;
  
  if( !printed ){
    printed = TryToPrint();
  }
  return 0;
}

bool TryToPrint(){


  datetime Time[];
  ArraySetAsSeries(Time, true);
  Print("try");
  if( CopyTime(_Symbol,_Period,0,1,Time) != 1 )return false;

  int Shift=iBarShift(_Symbol,_Period,Time[0]);
  
  bool fail = false;
  if( Shift < 0 )fail = true; 
  string toprint = "Symbol="+_Symbol+", Shift="+(string)Shift;
  
  

  for(int i=0;i!=SymbolsTotal(true);++i)
  {
    const string SymbName=SymbolName(i,true);
    Shift=iBarShift(SymbName,_Period,Time[0]);
    
    if( Shift < 0 )fail = true;
    toprint = toprint + "\r\n" + "Symbol="+SymbName+", Shift="+(string)Shift;

  }
  if( !fail ) Print( toprint );
  
  return !fail;
}
 

Il nome del server non è sempre visualizzato nei record della cache.


 
Nel formato tst, i tempi delle compravendite/ordini sono solo in secondi (datetime). Non ci sono millisecondi.
 
È corretto che il file tst non viene generato per un tale EA?
input int i = 0;

void OnInit() {}


Quale condizione deve essere soddisfatta per creare una cache a passaggio singolo?

 
fxsaber:
È corretto che il file tst non viene generato per un tale EA?


Quale condizione deve essere soddisfatta per creare una cache a passaggio singolo?

Sì, esatto.

Se non ci sono compravendite, il file tst non viene salvato

 
Slava:

Sì, proprio così.

Se non ci sono compravendite, il file tst non viene salvato

Grazie.

 
Ripeterò la mia domanda (apparentemente si è persa):

Sviluppatori, una domanda per voi. È possibile personalizzare i parametridell'algoritmo genetico? Per esempio per impostare i criteri di stop e di mutazione?

Incontro spesso situazioni in cui uno stop avviene prima di raggiungere gli estremi.

Anche una domanda. Avete intenzione di implementare altri metodi, per esempio l'annealing simulato?

 
Ciao a tutti, sono passato da mt4 a mt5 e non capisco come salvare i file dei set nel tester qui. Potete per favore consigliare. Potrebbe solo trovare come salvare ini e opt
 

Eseguo il robot nel tester. Faccio trading su un certo simbolo. Entro da OnTimer e prendo la quotazione del prezzo da SymbolInfoTick.

Se uso simboli diversi (quando faccio trading sullo stesso simbolo), allora per qualche motivo, i risultati sono molto diversi. Forse qualcuno ha affrontato questo problema? Attualmente sto studiando questo comportamento in modo più dettagliato.

PS. Ogni tick è basato su uno reale e l'esecuzione perfetta senza ritardi
 

L'ho capito. Se vi interessa, per risparmiare risorse della CPU, controllo TimeCurrent in OnTimer e se non è cambiato dall'ultimo aggiornamento, non c'è niente da fare. Se non ci sono citazioni, lo stato è lo stesso. Se tracciate le sessioni di trading, è un'operazione che consuma molto.

Tutto funziona bene per i simboli multipli. Ma quando ce ne sono solo due - tutto dipende dalle quotazioni, che arrivano e iniziano a spostare il tempo delle posizioni di apertura e altre cose. Di conseguenza, i risultati neltester di strategia sono diversi.

PS. In generale, controllerò gli stati dei simboli individualmente tramiteSymbolInfoTick