28 !!! coppie di valute, 1 esperto. Un altro graal, ma questo credo che nessuno l'abbia mai mostrato. + ACCOUNT DEMO - pagina 11

 

A proposito dei Tre Marmittoni:

http://www.libex.ru/detail/book74148.html

 
Esatto, la copertina è la stessa.
 
MetaQuotes:
Sfilata di immagini senza fonti e prove...


2 Rosh

Nel tuo EA a pagina 5 hai controllato i mismatch di Bid e Close di tutti i t/fs. Voi interpretate l'assenza di tali discrepanze come una conferma che guardare nel futuro non è possibile nel tester. All'epoca trovavo ancora strana questa connessione. Dal mio punto di vista non è il comportamento di Close che dovrebbe essere testato, ma il comportamento di High e Low del t/f superiore. E dopo l'ingiusto rimprovero di MQ di cui sopra, ho deciso di dedicargli un po' di tempo. Ma era troppo tardi.

Di seguito è riportato il codice dell'Expert Advisor che genera da solo il massimo e il minimo corrente dell'ora o del giorno sul grafico di un minuto. Poi ad ogni tick lo confronta con l'Alto e il Basso dell'ora o del giorno, ottenuti dall'H1 o D1 e se c'è una discrepanza la invia al log e al file.

 
//+------------------------------------------------------------------+
//|                                           Simple Prospection.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright c 2007, Yurixx"
#property link      ""
double curHi,curLo,HiH1,LoH1;
int    mm,hh,dd,curM1,curH1,curD1,kk,nn,handle;
string str,mHi,mLo,hHi,hLo;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
  handle = FileOpen("FU.csv",FILE_CSV|FILE_WRITE," ");
  if(handle<1) { Print("File FU.csv not found, Error:", GetLastError());
                 return(false);   }
  if (Period()>PERIOD_M1)
  {  Print("Период тестирования не соответствует задаче");
     return(-1);
  }
  Print("Период тестирования ",Period()," минут");
  FileWrite(handle,"Date","Time","curHi","HiH1","curLo","LoH1");
  nn=D'2007.07.12 23:58:59';
  FileWrite(handle,TimeToStr(nn,TIME_DATE|TIME_SECONDS),
                   TimeSeconds(nn),TimeMinute(nn),TimeHour(nn),TimeDay(nn));
  nn=D'2007.07.13 00:58:59';
  FileWrite(handle,TimeToStr(nn,TIME_DATE|TIME_SECONDS),
                   TimeSeconds(nn),TimeMinute(nn),TimeHour(nn),TimeDay(nn));
  nn=D'2007.07.13 00:02:00';
  FileWrite(handle,TimeToStr(nn,TIME_DATE|TIME_SECONDS),
                   TimeSeconds(nn),TimeMinute(nn),TimeHour(nn),TimeDay(nn));
  curHi=0.0;
  curLo=1000.0;
  curD1=-1;
  curH1=-1;
  curM1=-1;
  nn=0;//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {  
//----
  mm = TimeMinute(TimeCurrent());
  hh = TimeHour(TimeCurrent());
  dd = TimeDay(TimeCurrent());
  if (mm!=curM1)
  {  if (hh!=curH1)
     {  if (dd!=curD1)
        {  curHi=NormalizeDouble(Bid,Digits);
           curLo=NormalizeDouble(Bid,Digits);
           curD1=dd;
        }
        //curHi=NormalizeDouble(Bid,Digits);
        //curLo=NormalizeDouble(Bid,Digits);
        curH1=hh;
     }
     curM1=mm;
  }
  if (NormalizeDouble(Bid,Digits)>curHi) curHi=NormalizeDouble(Bid,Digits);
  if (NormalizeDouble(Bid,Digits)<curLo) curLo=NormalizeDouble(Bid,Digits);
  //HiH1 = iHigh(NULL,PERIOD_H1,0);
  //LoH1 =  iLow(NULL,PERIOD_H1,0);
  HiH1 = iHigh(NULL,PERIOD_D1,0);
  LoH1 =  iLow(NULL,PERIOD_D1,0);
  HiH1 = NormalizeDouble(HiH1,Digits);
  LoH1 = NormalizeDouble(LoH1,Digits);
  str = TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
  mHi = ", curHi=" + DoubleToStr(curHi,Digits);
  mLo = ", curLo=" + DoubleToStr(curLo,Digits);
  hHi = ", HiH1="  + DoubleToStr(HiH1, Digits);
  hLo = ", LoH1="  + DoubleToStr(LoH1, Digits);
  if (HiH1!=curHi||LoH1!=curLo)
  {  Print(str,mHi,hHi,mLo,hLo);
     FileWrite(handle,TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS),curHi,HiH1,curLo,LoH1);
  }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{  Print("Работа закончена");
   FileClose(handle);
//---- done
   return(0);
}

E questo è un pezzo del log, che è stato ottenuto eseguendo questo EA su EURUSD, M1 dal 2007.07.10 al 2007.07.14. Come si può vedere dal testo dell'EA, il confronto era con i dati giornalieri. Tuttavia, quando si confrontano i dati orari la situazione non è migliore. Volevo avere una conferma della possibilità di guardare nel futuro o assicurarmi che non ci sia questa possibilità. Tuttavia, si è rivelato essere qualcosa di completamente diverso.

Come puoi vedere dall'immagine, il tempo stampato nel log dal tester e il tempo visualizzato dall'Expert Advisor occasionalmente differiscono l'uno dall'altro. Oltre a questo, ci sono alcuni contrattempi incomprensibili. Il tempo 2007.07.13 00:58, 2007.07.12 00:58, 2007.07.13 00:02, 2007.07.13 00:04, 2007.07.13 00:06 e 2007.07.13 00:07. E ogni volta l'Expert Advisor esce 2007.07.12 23:58:59.

Forse, la relativa discrepanza dei dati alti e bassi in quei momenti è stata causata proprio da questi errori di temporizzazione.

Inoltre, consiglio di prestare attenzione al test print to file, che si trova nella funzione init(). Questa stampa mostra che i secondi non funzionano nel tester. Di conseguenza, TimeToStr() in modalità secondi e la funzione TimeSeconds() non funzionano. Forse è stato pensato in questo modo, ma allora perché sia il tester che l'Expert Advisor stampano i dati con i secondi?

Non sto nemmeno sollevando la questione della discrepanza tra i dati High e Low, perché non è assolutamente chiaro da dove vengano questi dati in questo tempo oscuro.

Un'altra cosa. Testando dal 2007.07.09 al 2007.07.14 e non dal 2007.07.10 al 2007.07.14 ho provato a ottenere delle strane assurdità - i dati dei pagatori alti e bassi non vengono ricevuti affatto, cioè le variabili HiH1 e LoH1 hanno sempre valori zero.

Forse ho fatto un errore da qualche parte?

 
Ciao Yurixx.
Ho eseguito il tuo Expert Advisor senza cambiare nulla nel codice. Ecco tutti i dati del file che produce:
Data Ora curHi HiH1 curLo LoH1<br/ translate="no"> 2007.07.12 23:58:00 0 58 23 12
2007.07.13 00:58:00 0 58 0 13
2007.07.13 00:02:00 0 2 0 13
Ecco il log:
2007.08.13 09:54:51 2007.07.13 22:59 Simple Prospection EURUSD,M1: Lavoro finito
2007.08.13 09:54:48 2007.07.10 00:00 Simple Prospection EURUSD,M1: Periodo di test 1 min
2007.08.13 09:54:48 Simple Prospection avviato per il test
2007.08.13 09:54:45 Simple Prospection: caricato con successo
Non un solo errore nei test dal 2007.07.10 al 2007. 07.14. Vero, poi mi sono ricordato che ho una build speciale di prova della settimana scorsa. Anche la solita build 208 del 01 agosto (ora aggiornata di un termine da LibeUpdate) non ha errori:
2007.08.13 10:13:04 2007.07.13 22:59 Simple Prospection EURUSD,M1: Lavoro finito
2007.08.13 10:13:04 2007.07.10 00:00 Simple Prospection EURUSD,M1: Periodo di test di 1 minuto
2007.08.13 10:13:04 Simple Prospection iniziata per il test
La questione è che prima del test ho scaricato i dati mancanti da History Center (non ho avviato questo terminale per un paio di mesi) e poi ho ricalcolato tutti i timeframes - ho premuto "Download" in History Center per la seconda volta, in questo caso suggerisce di ricalcolare tutti i t/f automaticamente e il period converter non è necessario (nel caso la gente non sia a conoscenza di questa caratteristica).


Ma prima c'erano degli output di errore nel log:

2007.08.13 10:08:19 1999.05.26 02:01 Simple Prospection GBPUSD,M1: Lavoro completato
2007.08.13 10:08:18 1999.01.04 09:31 Simple Prospection GBPUSD,M1: 1999.01. 04 09:31:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:30 Simple Prospection GBPUSD, M1: 1999.01. 04 09:30:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:29 Simple Prospection GBPUSD, M1: 1999.01. 04 09:29:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:28 Simple Prospection GBPUSD, M1: 1999.01. 04 09:28:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:27 Simple Prospection GBPUSD, M1: 1999.01. 04 09:27:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:26 Simple Prospection GBPUSD, M1: 1999.01. 04 09:26:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:25 Simple Prospection GBPUSD, M1: 1999.01. 04 09:25:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:24 Simple Prospection GBPUSD, M1: 1999.01. 04 09:24:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:23 Simple Prospection GBPUSD, M1: 1999.01. 04 09:23:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:22 Simple Prospection GBPUSD, M1: 1999.01. 04 09:22:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:21 Simple Prospection GBPUSD, M1: 1999.01. 04 09:21:00, curHi=1.6702, HiH1=1.6702, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:20 Simple Prospection GBPUSD, M1: 1999.01. 04 09:20:00, curHi=1.6702, HiH1=1.6702, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:19 Simple Prospection GBPUSD, M1: 1999.01. 04 09:19:00, curHi=1.6702, HiH1=1.6702, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:18 Simple Prospection GBPUSD, M1: 1999.01. 04 09:18:00, curHi=1.6702, HiH1=1.6702, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:17 Simple Prospection GBPUSD, M1: 1999.01. 04 09:17:00, curHi=1.6701, HiH1=1.6701, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:16 Simple Prospection GBPUSD, M1: 1999.01. 04 09:16:00, curHi=1.6701, HiH1=1.6701, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:15 Simple Prospection GBPUSD, M1: 1999.01. 04 09:15:00, curHi=1.6687, HiH1=1.6687, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:14 Simple Prospection GBPUSD, M1: 1999.01. 04 09:14:00, curHi=1.6687, HiH1=1.6687, curLo=1.6682, LoH1=1. 6686
2007.08.13 10:08:18 1999.01.04 09:13 Simple Prospection GBPUSD, M1: 1999.01. 04 09:13:00, curHi=1.6682, HiH1=1.6697, curLo=1.6682, LoH1=1. 6597
2007.08.13 10:08:15 1999.01.04 09:13 Prospettiva semplice GBPUSD,M1: Periodo di test 1 minuto
2007.08.13 10:08:15 Prospettiva semplice iniziata per il test

Ho scaricato quei dati per EURUSD, ma ho iniziato a testare per GBPUSD, che non è stato pompato e ricalcolato. Questa era la ragione delle incongruenze.
Prova a fare lo stesso - carica i dati e sincronizza automaticamente o usa lo script del convertitore di periodo.

Daremo un'occhiata alla questione dei secondi, grazie.
 

Ciao Rosh!

Grazie per la vostra risposta. Per quanto ti capisco, pensi che la mancata corrispondenza dei dati High e Low di diversi imbuti sia dovuta alla qualità del flusso delle quotazioni. Così, le candele si formano in modo diverso su diversi imbuti e quindi possono essere diverse di 1-2-3 pip. È abbastanza possibile.

Ho fatto dei test usando i dati del server demo MQ. E non li scrivo in tempo reale, ma scarico tutti i dati una volta alla settimana, nei fine settimana. In realtà pensavo che i candelieri sono disegnati su tutti i TF, almeno sul server, dal software del server, in modo sincrono per tutti i TF, sulla base dello stesso flusso di quotazioni e quindi tali differenze sono impossibili. Se questo non è il caso, è un peccato, dovremo tenerne conto in qualche modo... Combinare i dati, la sincronizzazione, ecc. per far sembrare tutto bello è il modo sbagliato di procedere secondo me. Sia il tuo server che i server dei broker consegnano i dati come li consegnano. E devi fare trading proprio su questi dati e non su quello che diventa dopo qualche tempo. Per il processo di test è particolarmente importante. Tutti conoscono il problema dei grails - uno spazio nel tester e una perdita nel robot di trading reale. Da dove viene? MQ insiste sul fatto che guardare al futuro è impossibile e che la modellazione a tick è del tutto appropriata al processo. Si deve supporre che questo sia il caso. Quindi, in effetti, il problema sono i dati? MQ non può risolvere questo problema, i dati non dipendono da esso. Allora dovete far sì che il tester funzioni correttamente su qualsiasi dato, non solo sui dati che sono ordinati a pettine.

Ma il mio post non riguardava le discrepanze nei dati di diversi t/f, ma la confusione nel tempo. E il fatto che tu abbia postato non elimina il problema. Al contrario, in relazione al suo post voglio chiedere quanto segue.

Nel mio registro i dati temporali sia del tester che dell'EA contengono secondi. Nel tuo, i dati nel tester non contengono affatto secondi, e i dati nel tuo EA contengono solo zero secondi. Questo mi porta a chiedere: in che modo hai eseguito il test. Voglio essere chiaro - questo EA è inteso solo per i test in modalità "tutti i tick". E l'errore che ho incontrato può essere riprodotto solo da questa modalità. Pertanto, se avete fatto il test in un'altra modalità, per favore ripetete il test, ci vorrà solo un secondo.

In linea di principio, non fa assolutamente differenza su quale coppia e in quale intervallo di date testare. E su TF diversi da M1, l'Expert Advisor non funziona. Tuttavia, per poter confrontare i nostri risultati, ti chiedo di fare un test su EURUSD, nel range tra 2007.07.10 e 2007.07.14, e, in un test separato, nel range tra 2007.07.09 e 2007.07.14.

Vi ringrazio in anticipo.

 
Yurixx:

Ciao Rosh!

Nel mio registro, sia i dati temporali del tester che quelli dell'EA contengono secondi. Nel tuo, i dati del tester non contengono alcun secondo e i dati dell'EA contengono solo zero secondi. Il che fa sorgere la domanda: quale modalità hai usato per i test? Voglio essere chiaro - questo EA è inteso solo per i test in modalità "tutti i tick". E l'errore che ho incontrato può essere riprodotto solo da questa modalità. Pertanto, se avete fatto il test in un'altra modalità, per favore ripetete il test, ci vorranno solo pochi secondi.

In linea di principio, non ha alcuna importanza su quale coppia e in quale intervallo di date testare. E su TF diversi da M1, l'Expert Advisor non funziona. Tuttavia, per poter confrontare i nostri risultati, ti chiedo di fare un test su EURUSD, nel range tra 2007.07.10 e 2007.07.14, e, in un test separato, nel range tra 2007.07.09 e 2007.07.14.

Grazie in anticipo.


Infatti, l'ho cercato ora e ho visto che non ho avuto secondi. Penso che abbia a che fare con il fatto che non avevo caricato automaticamente i dati per GBPUSD per 1 ora e 1 giorno durante il primo test (non avevo affatto i grafici aperti nel terminale), ma ho provato a controllare ora per la seconda volta e non c'era nessun errore - ho caricato i dati necessari durante il primo test.

Cioè, la prima volta non c'erano dati per i periodi H1 e D1 per GBPUSD e quindi c'erano errori nella modellazione.
 
Ho fatto un test "su EURUSD nel range 2007.07.10 a 2007.07.14, e, in un test separato, nel range 2007.07.09 a 2007.07.14" come hai chiesto, nessuna differenza.
 
Rosh:

Ci occuperemo della questione dei secondi, grazie.


L'errore con i secondi è stato corretto (nel compilatore). La build corretta sarà presto disponibile.
 
Rosh:
Il bug con i secondi è stato risolto (nel compilatore). La build corretta sarà presto disponibile.
Possiamo sperare che nella build corretta il tester grail77 non funzioni più?
 
granit77:
Rosh:
Il bug con i secondi è stato risolto (nel compilatore). La build corretta sarà presto disponibile.
Possiamo sperare che nella build corretta del tester grail77 non funzioni più?

Lo controllerò domani.
Motivazione: