Testare 'CopyTicks'. - pagina 43

 
fxsaber:
Affrontato il bug quando CopyTicksRange restituisce correttamente tutti i tick richiesti, ma con LastError == ERR_HISTORY_TIMEOUT(4403).


Non è un bug, è una caratteristica. È lo stesso con i CopyTick, a volte. Non ho ancora capito come usare questa "cosa".

nella descrizione della funzione CopyTicksRange:

ERR_HISTORY_TIMEOUT – время ожидание синхронизации тиков вышло, функция отдала всё что было.

Naturalmente, vorrei che gli sviluppatori spiegassero cosa significa questo errore quando si riceve un tick con la funzione CopyTicks. Come gestire questo errore. ps: lo chiamo in un indicatore

 

Per favore consigliate quali dati devono essere forniti per risolvere questo problema il più presto possibile?

void OnStart()
{
  MqlTick Ticks[];

  Print(CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, (ulong)D'2020.04.09 10:40:29' * 1000, (ulong)D'2020.04.11' * 1000)); // 8192
  Print(_LastError); // 4407

  ResetLastError();

  MqlTick Ticks2[];

  Print(CopyTicksRange(_Symbol, Ticks2, COPY_TICKS_INFO, (ulong)D'2020.04.09 10:40:30' * 1000)); // 131066
  Print(_LastError); // 0
}


Tiki non sta copiando, dando un errore.

Costante

Valore

Descrizione

ERR_HISTORY_SMALL_BUFFER

4407

Matrice ricevente troppo piccola per contenere tutti i dati richiesti


È impossibile lavorare bene con queste sorprese!


Attraverso la GUI (CTRL+U) i tick vengono presi senza problemi.

Stringa di ricerca: Oshibka 007.
 
fxsaber:

Per favore consigliate quali dati devono essere forniti per risolvere questo problema il più presto possibile?

Tiki non sta copiando, dando un errore.

Costante

Valore

Descrizione

ERR_HISTORY_SMALL_BUFFER

4407

Matrice ricevente troppo piccola per contenere tutti i dati richiesti

Testato localmente in vari modi - finora nessuna riproduzione. Servono più dettagli:

1. Quale versione del terminale?

2. Con quale server stai lavorando?

3. Su quale personaggio si chiama lo script?

4. Se non viene chiamato con COPY_TICKS_INFO ma con COPY_TICKS_ALL viene impostato anche l'errore ERR_HISTORY_SMALL_BUFFER?

Grazie!

 
Anton:

Testato localmente in vari modi - finora nessuna riproduzione. Servono dettagli:

1. Quale versione del terminale?

2. Con quale server stai lavorando?

3. Su quale personaggio si chiama lo script?

4. Se non lo chiamate con COPY_TICKS_INFO ma con COPY_TICKS_ALL, l'errore ERR_HISTORY_SMALL_BUFFER sarà ugualmente sollevato?

Grazie!

  1. 2380.
  2. Qualsiasi server - vedi punto 3.
  3. Simbolo personalizzato.
  4. La bandiera non cambia il comportamento.

ZS Nel rimorchio è personalizzato. Creare simbolo da json, importare ticks, eseguire lo script sul grafico di questo simbolo. Per favore, scrivete se si è riprodotto o meno.

File:
EURUSD.zip  896 kb
 
fxsaber:

Per favore, scrivi se ha suonato o no.

Sì, ha riprodotto il 2380.

Grazie mille! Risolvere il problema.

 
fxsaber:

  1. 2380.
  2. Qualsiasi server - vedi punto 3.
  3. Simbolo personalizzato.
  4. La bandiera non cambia il comportamento.

ZY Il rimorchio è personalizzato. Creare simbolo da json, importare ticks, eseguire lo script sul grafico di questo simbolo. Per favore, scrivete se è stato riprodotto o no.


Grazie ancora.

Sì, nel 2380 il problema è stato introdotto accidentalmente e poi è stato rapidamente risolto. Ma è riuscito a entrare nella build 2380.

Sfortunatamente da allora le nuove build sono state tutte fissate su MetaQuotes-Demo, ma non ancora.

Puoi tornare a qualsiasi build precedente o aspettare la prossima build di MetaQuotes-Demo.
 
Anton:
Puoi tornare a qualsiasi build precedente o aspettare la prossima build di MetaQuotes-Demo.

Grazie, per ora la build precedente è per davvero. Il 2380 ha fatto molto...

 

MT5 ultima release build 2361. Creare un simbolo da json, importare ticks, eseguire l'EA su un grafico di questo simbolo.

EA

void OnTick()
{
  MqlTick Tick={0};
  if(SymbolInfoTick(_Symbol,Tick))
  {
    MqlTick OldTicks[];
    Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL));
    Print(GetLastError());
    Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL,(ulong)D'2020.04.06 00:00:00' * 1000));
    Print(GetLastError());
  }
  ExpertRemove();
}

Parametri

[Tester]
Expert=test.ex5
Symbol=AUDNZD.RannForex
Period=M1
Optimization=0
Model=4
FromDate=2020.04.08
ToDate=2020.04.09
ForwardMode=0
Deposit=10000000
Currency=USD
ProfitInPips=1
Leverage=100
ExecutionMode=0
OptimizationCriterion=6
Visual=0

1. Conto di compensazione.

1.1. Con le date date date l'output è simile al vero: 2000 0 2000 0.

1.2. Quando le date vengono cambiate in 07.04.2020-08.04.2020 l'output diventa strano: -1 4004 1 0.

In primo luogo, perché l'errore appare nel primo caso? In secondo luogo, perché il secondo caso richiede solo 1 tick? La data della richiesta di spunta non è cambiata.

2. Conto di copertura.

2.1. Con le date date date l'output diventa strano: 2000 0 1 0.

Perché il secondo caso richiede solo 1 tick? La data della richiesta di spunta non è cambiata.

2.2. Quando le date sono cambiate a 07.04.2020-08.04.2020 l'output si ferma strano, ma lo stesso: 2000 0 1 0.


Da qui le domande: perché CopyTicks con parametri fissi dipende non solo dalle date di prova, ma anche dal tipo di conto? O non capisco qualcosa e sto facendo qualcosa di sbagliato?

Questo rende molto difficile lavorare, si prega di correggere se possibile. Siete riusciti a riprodurlo? Avete bisogno di qualcos'altro da me per riprodurre? Grazie.

File:
AUDNZD.zip  2448 kb
 
traveller00:

Da qui le domande: perché CopyTicks con parametri fissi dipende non solo dalle date di prova, ma anche dal tipo di conto? O sto fraintendendo qualcosa e facendo qualcosa di sbagliato?

Dipendenza dal tipo di conto - si possono approssimativamente immaginare le ragioni. Non direi che è corretto. Simboli di scambio con l'ultima storia - gli sviluppatori devono pensare bene una volta lì, cosa fare con loro sulla siepe, ecc.

Io stesso non uso CopyTicks in Tester. Le prime 24 ore non sono importanti. Se hai davvero bisogno di segnali di trading chiari, allora non fare trading il primo giorno.

 
traveller00:

MT5 ultima release build 2361. Creare un simbolo da json, importare ticks, eseguire l'EA su un grafico di questo simbolo.

EA

Parametri

1. Conto di compensazione.

1.1. Con le date date date l'output è simile al vero: 2000 0 2000 0.

1.2. Quando le date vengono cambiate in 07.04.2020-08.04.2020 l'output diventa strano: -1 4004 1 0.

In primo luogo, perché l'errore appare nel primo caso? In secondo luogo, perché il secondo caso richiede solo 1 tick? La data della richiesta di spunta non è cambiata.

2. Conto di copertura.

2.1. Con le date date date l'output diventa strano: 2000 0 1 0.

Perché il secondo caso richiede solo 1 tick? La data della richiesta di spunta non è cambiata.

2.2. Quando le date passano a 07.04.2020-08.04.2020 l'output si ferma strano, ma lo stesso: 2000 0 1 0.


Da qui le domande: perché CopyTicks con parametri fissi dipende non solo dalle date di prova, ma anche dal tipo di conto? O non capisco qualcosa e sto facendo qualcosa di sbagliato?

Questo rende molto difficile lavorare, si prega di correggere se possibile. Siete riusciti a riprodurlo? Avete bisogno di qualcos'altro da me per riprodurre? Grazie.

La primissima corsa. Guardando i log del tester.

2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: symbol to be synchronized
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: symbol synchronized, 3720 bytes of symbol info received
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: load 23 Kb of history data to synchronize in 0:00:00.009
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: history synchronized from 2020.04.06 to 2020.04.08
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: ticks synchronization started
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: load 567 Kb of tick data to synchronize in 0:00:00.031
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: history ticks synchronized from 2020.04.08 to 2020.04.08
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1: history cache allocated for 3897 bars and contains 2868 bars from 2020.04.06 00:05 to 2020.04.07 23:59
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1: history begins from 2020.04.06 00:05
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1 (MetaQuotes-Demo): generating based on real ticks
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1: testing of Experts\test.ex5 from 2020.04.08 00:00 to 2020.04.09 00:00 started
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.08 00:00:00
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   -1
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   4004
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   1
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   0
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   ExpertRemove() function called
2020.04.21 10:53:10.573 Core 01 removed itself within OnTick

Il tester ha sincronizzato le zecche per un solo giorno, l'8 aprile. Cioè, non ci sono zecche prima dell'8 aprile.

All'inizio abbiamo avuto l'errore 4004 (non c'è abbastanza memoria per i tick richiesti). Questo è un messaggio non valido, lo esamineremo. Sembra che sia perché la richiesta con i parametri predefiniti è al limite delle zecche esistenti

La prossima domanda ti ha dato giustamente 1 tick. Perché dal 2020.04.06 00:00:00 fino al tester attuale, quando è arrivato il primo tick, c'è solo un tick esistente.

Aggiustiamo un po' l'EA

void OnTick()
  {
   MqlTick Tick= {0};
   if(SymbolInfoTick(_Symbol,Tick))
     {
      MqlTick OldTicks[];
      Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL));
      if(GetLastError()!=0)
         return;
      Print(GetLastError());
      Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL,(ulong)D'2020.04.06 00:00:00' * 1000));
      Print(GetLastError());
     }
   ExpertRemove();
  }

e vediamo che a partire dalla seconda zecca, le zecche hanno cominciato ad essere raccolte. In entrambi i casi si tratta di 2 zecche.

2020.04.21 11:14:13.256 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.08 00:00:00
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:11   -1
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   2
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   0
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   2
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   0
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   ExpertRemove() function called

Cioè, l'ipotesi dell'errore di richiesta sul confine del tick si è dimostrata corretta.

Cambiamo la data d'inizio al 7 aprile.

2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex: history ticks synchronized from 2020.04.07 to 2020.04.08
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1: history cache allocated for 3486 bars and contains 1429 bars from 2020.04.06 00:05 to 2020.04.06 23:59
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1: history begins from 2020.04.06 00:05
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1 (MetaQuotes-Demo): generating based on real ticks
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1: testing of Experts\test.ex5 from 2020.04.07 00:00 to 2020.04.09 00:00 started
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.07 00:00:00
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   -1
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   4004
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   1
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   0
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   ExpertRemove() function called
2020.04.21 11:18:17.775 Core 01 removed itself within OnTick

Tutto uguale, tranne per il fatto che le zecche sono sincronizzate già da 2 giorni - il database del tester contiene le zecche del 7 e 8 aprile.

Abbiamo rimandato la data d'inizio all'8 aprile. E vediamo il risultato atteso

2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: load 47 bytes of history data to synchronize in 0:00:00.000
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: history synchronized from 2020.04.06 to 2020.04.08
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: ticks synchronization started
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: load 54 bytes of tick data to synchronize in 0:00:00.000
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: history ticks synchronized from 2020.04.07 to 2020.04.08
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1: history cache allocated for 3897 bars and contains 2868 bars from 2020.04.06 00:05 to 2020.04.07 23:59
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1: history begins from 2020.04.06 00:05
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1 (MetaQuotes-Demo): generating based on real ticks
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1: testing of Experts\test.ex5 from 2020.04.08 00:00 to 2020.04.09 00:00 started
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.07 00:00:00
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   2000
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   0
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   2000
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   0
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   ExpertRemove() function called
2020.04.21 11:20:51.257 Core 01 removed itself within OnTick

Perché ci sono più zecche nel tester che nella prima esecuzione. E non ha niente a che vedere con la copertura e le reti.