Testare 'CopyTicks'. - pagina 25

 
O forse lo ha torturato? :)
 
prostotrader:
O forse lo ha torturato? :)

Lo è. Lo prende molto male. Devo riconoscerglielo - si addormenta, ma raramente.

Ho scritto un bell'indicatore di tick. Sono troppo pigro per fare il debug dei guasti rari.

 
fxsaber:

Lo è. Lo prende molto male. Devo riconoscerglielo - si addormenta, ma raramente.

Ho scritto un bell'indicatore di tick. Sono pigro nel debuggare i rari fallimenti.

Riuscire a inserire tutti i tick in modo uniforme nella candela in tempo reale ogni volta?

Aggiunto:

In modalità COPY_TICKS_TRADE con controllo del volume.

 
Alexey Kozitsyn:

Riuscire a inserire tutti i tick in modo uniforme nella candela in tempo reale ogni volta?

Aggiunto:

In modalità COPY_TICKS_TRADE con controllo del volume.

Ne ho uno leggermente diverso. Come "non ha analoghi" e bla bla bla.

Non credo per le prestazioni, dato che è stato promesso che migliorerà significativamente nella prossima build.

 
fxsaber:

Io ne ho uno leggermente diverso. Come "impareggiabile" e bla, bla, bla.

Non credo per le prestazioni, dato che è stato promesso che migliorerà significativamente nella prossima build.

Non si tratta di prestazioni... Ci sono situazioni come questa, per esempio adesso:

L'indicatore raccoglie i tick e calcola il volume in base ad essi. Poi confronta questo volume con volume[].

E ci sono errori in diverse situazioni:

A volte il volume della prima candela del giorno è calcolato in modo errato (non coincide con il controllo);

A volte il volume per tick è calcolato correttamente ma il volume restituisce un valore errato. 3;

3. a volte il volume per tick è calcolato in modo errato, mentre il volume restituisce un valore errato;

La cosa più interessante è che se gli errori 1, 2 o 3 si verificano nella storia, dopo aver ricompilato l'indicatore l'errore non scompare. E in caso di connessione ad un altro server scompare.

In breve, i miracoli non sono ancora finiti.

Se questo post sarà letto da sviluppatori e vogliono capire - si prega di indirizzare a "Service Desk", fornirò tutte le fonti.

 
Renat Fatkhullin:

Questo è il modo in cui dovreste testare CopyTicks:

MqlTick ExtArr[2048];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   ulong from   =(TimeTradeServer()-1200)*1000;
   ulong ticks  =GetMicrosecondCount();
   int   records=CopyTicks(_Symbol,ExtArr,COPY_TICKS_INFO,from,2048);

   ticks=GetMicrosecondCount()-ticks;
   Print("Time: ",ticks," msc for ",records," records");
  }

Ecco l'output in microsecondi: 95 microsecondi per campione di 2048 tick INFO per gli ultimi 20 minuti

2016.10.18 14:15:38.673 TEST (USDCHF,M1)        Time: 95 msc for 1206 records
Questo è radicalmente diverso dalle decine di millisecondi che hai affermato. Questo perché non hai misurato i CopyTicks.

Frenare dopo la chiusura del mercato

MqlTick ExtArr[2048];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   ulong from   =(TimeCurrent()-1200)*1000;
   ulong ticks  =GetMicrosecondCount();
   int   records=CopyTicks(_Symbol,ExtArr,COPY_TICKS_INFO,from,2048);

   ticks=GetMicrosecondCount()-ticks;
   Print("Time: ",ticks," msc for ",records," records");
  }

Risultato

2016.10.29 00:31:10.952 Test (GBPUSD,M1)        Time: 85 msc for 1333 records
2016.10.29 00:31:05.435 Test (EURCHF,M1)        Time: 15283 msc for 874 records
2016.10.29 00:31:03.960 Test (EURCHF,M1)        Time: 11629 msc for 874 records
2016.10.29 00:31:02.128 Test (EURCHF,M1)        Time: 10127 msc for 874 records
2016.10.29 00:31:00.332 Test (EURCHF,M1)        Time: 7318 msc for 874 records

2016.10.29 00:30:52.049 Test (EURUSD,M1)        Time: 51 msc for 862 records

Può sembrare che questo sia solo sull'EURCHF. Ma non appena cominciamo a pompare le quotazioni per EURUSD. Non appena lo script inizia a funzionare per decine di ms su EURSD. Questo rallentamento è iniziato dopo la chiusura del mercato. Tutto era molto più veloce prima della chiusura del mercato.

 

Cari sviluppatori! Il problema con CopyTicks(), e in particolare la sincronizzazione dei volumi su una candela (impilando tutti i volumi di tick di una candela in una candela e confrontandolo con volume[] di quella candela). Continua.

Ora abbiamo di nuovo 2 errori:

1. Errore stabile di controllo del volume su una candela di apertura (10.00). Faccio il test su RTS, SBRF, Si (tutti a -12.16). Errore su ognuno di questi simboli!

2. Se per qualche motivo c'è un errore di controllo del volume sulla candela dopo le 10.00 in tempo reale, lo stesso errore si verifica sulla storia. Tuttavia! Se cambiate il server, l'errore sulla cronologia scompare.

 

Esempio al post precedente (sull'errore 2):

2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:05 пройден! Контрольная сумма = 3480 (1353+2127)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:06 пройден! Контрольная сумма = 4103 (2236+1867)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: ОШИБКА на свече 2016.10.31 10:07! Сумма объемов на покупку = 1074, сумма объемов на продажу = 3917, контрольная сумма (покупки+продажи) = 5009
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:08 пройден! Контрольная сумма = 3121 (1479+1642)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:09 пройден! Контрольная сумма = 3760 (1046+2714)

Questo prima del cambio di server. Ed ecco il log dopo il cambio di server:

2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:05 пройден! Контрольная сумма = 3480 (1353+2127)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:06 пройден! Контрольная сумма = 4103 (2236+1867)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:07 пройден! Контрольная сумма = 5009 (1082+3927)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:08 пройден! Контрольная сумма = 3121 (1479+1642)
2016.10.31 12:18:12.110 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:09 пройден! Контрольная сумма = 3760 (1046+2714)

Eccolo, il "BORDER" localizzato! Io stesso non disegno qui il controllo, i valori tra parentesi non si regolano, non ne ho bisogno. Ma c'è un errore, e può essere risolto cambiando il server!

Questo è il log dal controllo della storia (quando si avvia l'indicatore/cliccando il pulsante "refresh").

 

E ora osservazioni sull'errore n. 1.

Qualche tempo dopo l'apertura del mercato (sono passati circa 40 minuti). Con il ricalcolo completo dell'indicatore - non c'è nessun errore di controllo della candela a 10.00! Anche senza cambiare il server. Come se qualcuno avesse scaricato la storia sul server.

 

Un'altra osservazione sull'errore #2:

Если по какой-то причине возникает ошибка контроля объемов на свече после 10.00 в реальном времени, то эта же ошибка возникает и на истории. Однако! Если изменить сервер - ошибка на истории пропадает. 

Sembra che i tic che sono stati precedentemente ricevuti localmente siano memorizzati nella cache della macchina e siano sovrascritti solo dopo un cambiamento del server. Andrebbe bene, ma nel caso in cui fossero ricevuti per intero! Ma, a quanto pare, gli errori nella storia si accumulano. E l'unico modo per sbarazzarsi di loro è cambiare il server commerciale (almeno io so solo questo modo).
Motivazione: