Storia di zecca - pagina 16

 
Karputov Vladimir:

Ecco cosa è stato chiesto:

La transizione dopo 24 ore è corretta.
Metodo di prova: con il terminale acceso, ho cancellato i file della cronologia dei tick. Poi ha eseguito lo script due volte (poiché non c'era storia, la prima esecuzione dello script ha inizializzato il caricamento della storia).

Sì, grazie, ho fatto lo stesso - ha aiutato. Tuttavia, un comportamento molto strano.
 

Ma lo strano comportamento non finisce qui. Ho deciso di confrontare due momenti di query della stessa storia.

Il primo momento è stato ieri quando ho scritto dell'errore di arrivo da venerdì a lunedì:

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Storia di zecca

Tapochun, 2015.10.19 08:48

Un po' più tardi - l'immagine è così. Modalità TUTTI i 3000 ticchettii:

2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2774 2015.10.16 23:59:05: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54356
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2775 2015.10.16 23:59:05: spread = 72, ask = 1.54428, bid = 1.54356, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2776 2015.10.16 23:59:06: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54356
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2777 2015.10.16 23:59:06: spread = 75, ask = 1.54431, bid = 1.54356, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2778 2015.10.16 23:59:07: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54357
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2779 2015.10.16 23:59:07: spread = 74, ask = 1.54431, bid = 1.54357, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2780 2015.10.16 23:59:10: spread = 0, ask = 0.00000, bid = 0.00000, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2781 2015.10.19 09:44:41: spread = 18, ask = 1.54498, bid = 1.54480, last = 1.54480
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2782 2015.10.19 09:44:41: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2783 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 1.54480
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2784 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2785 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 1.54480
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2786 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2787 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 1.54480

Buco nella storia. In modalità INFO - simile.

Notate le zecche che arrivano dalle 9.44.41 in poi. Ora la storia per lo stesso simbolo, allo stesso tempo, nella stessa modalità (TUTTO) richiesta solo oggi:

QK      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289463 2015.10.19 09:44:41: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
LN      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289464 2015.10.19 09:44:41: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
DO      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289465 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
ES      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289466 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 0.00000
HR      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289467 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
EG      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289468 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
DI      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289469 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
DH      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289470 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 0.00000
IM      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289471 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480

Il metodo di consegna è diverso. E sicuramente mancano i millisecondi.

E come analizzare le zecche in questa situazione!

 
Renat Fatkhullin:

Questo è corretto.

Ho sottolineato esattamente - non c'è struttura o logica nel riempire le zecche. Ogni campo di prezzo è indipendente dagli altri. Ciò che viene dal fornitore è ciò che viene tradotto.

Renat, si scopre che le stesse zecche possono venire da un fornitore, a seconda del momento della richiesta, in modi diversi?

Il formato della cronologia dipende dal server a cui si è connessi?

 
Tapochun:

Questo è promesso nella prossima build e sono sicuro che avrà i suoi chip.

Sarebbe bello se senza "chip", e normalmente ... e si è stancato di questi grafici che dicono 99% di qualità di simulazione ... e quello vero non si avvicina nemmeno :) Per me, in linea di principio, non ci dovrebbe essere una cosa del genere, altrimenti non è un tester ma un giocattolo. E non si può fare molta pappa con le strategie di chiusura dei bar...

 
Maxim Dmitrievsky:

Sarebbe bello se non ci fossero "trucchi" e fosse ok... ma sono stanco di queste tabelle che dicono 99% di qualità di modellazione... e non è nemmeno vicino alla realtà :) Per me, in linea di principio, non ci dovrebbe essere una cosa del genere, altrimenti non è un tester ma un giocattolo. E non si può fare molta pappa con le strategie di chiusura dei bar...

Senza chip, raramente succede tutto in una volta. Questa storia delle zecche è stata attesa per molto tempo, e vogliamo finirla il più presto possibile. Voglio che sia pronto sia nel tester che nell'account reale. Purtroppo non c'è molto feedback. Spero che il lavoro per portarlo a regime proceda.

 
Karputov Vladimir:

Si prega di specificare il flag di ricezione dei tick COPY_TICKS_INFO (solo Bid e Ask) - Bid e Ask possono essere ancora con il valore "0" o in modalità COPY_TICKS_INFO - Bid e Ask non conterranno zeri e il flusso dei tick sarà simile a quellonel terminale, nella finestra "Market Watch", scheda "Ticks"?


Sarà risolto nella build 1200:

MQL5: formato esteso della struttura MqlTick. Ora, contiene il tempo di arrivo del tick in millisecondi, così come le bandiere che permettono di determinare quale parametro del tick è cambiato.
struct MqlTick
  {
   datetime     time;          // Время последнего обновления цен
   double       bid;           // Текущая цена Bid
   double       ask;           // Текущая цена Ask
   double       last;          // Текущая цена последней сделки (Last)
   ulong        volume;        // Объем для текущей цены Last
   long         time_msc;      // Время последнего обновления цен в миллисекундах
   uint         flags;         // Флаги тиков
  };
Ogni tick ha sempre tutti i parametri compilati, indipendentemente dal fatto che i dati siano cambiati dal tick precedente. Questo ti permette di avere sempre uno stato aggiornato dei prezzi in qualsiasi momento senza dover cercare nella cronologia dei tick i valori precedenti. Per esempio, con un tick potrebbe essere cambiato solo il prezzo di offerta, ma la struttura conterrà altri parametri oltre al nuovo prezzo: prezzo di domanda precedente, volume, ecc. Per scoprire quali dati sono cambiati esattamente con il tick corrente, analizzate le sue bandiere:

  • TICK_FLAG_BID - il tick ha cambiato il prezzo dell'offerta
  • TICK_FLAG_ASK - il tick ha cambiato il prezzo ask
  • TICK_FLAG_LAST - il tick ha cambiato il prezzo dell'ultimo affare
  • TICK_FLAG_VOLUME - Il tick ha cambiato volume
  • TICK_FLAG_BUY - Il tick si è verificato come risultato di un acquisto
  • TICK_FLAG_SELL - il tick si è verificato come risultato di una vendita

La struttura MqlTick è usata in due metodi:

  • CopyTicks - il metodo non supporta il vecchio formato della struttura. I file EX5 compilati in precedenza che usano il vecchio formato di tick restituiranno l'errore 4006 (ERR_MQL_INVALID_ARRAY) quando si chiama la funzione CopyTicks.
  • SymbolInfoTick - il metodo supporta sia il vecchio che il nuovo formato della struttura.
 

Quindi:

MetaTrader 5 x64 build 1192 started (MetaQuotes Software Corp.)
...
authorized on MetaQuotes-Demo through Access Point Asia (ping: 556.27 ms)

e la struttura MqlTick aggiornata :

Struttura MqlTick aggiornata

 
Karputov Vladimir:

Quindi:

E la struttura MqlTick aggiornata :


E come tracciare correttamente l'arrivo di una nuova zecca nel terminale? Per esempio, nel tester.

"La funzione OnTick() non è un gestore di ogni tick, ma notifica un Expert Advisor sui cambiamenti nel mercato. I cambiamenti possono essere batch: diversi tick possono arrivare al terminale simultaneamente, ma la funzione OnTick() sarà chiamata solo una volta per notificare all'Expert Advisor l'ultima condizione di mercato".

 
Maxim Dmitrievsky:

Qual è il modo corretto di tracciare l'arrivo di una nuova zecca nel terminale? Per esempio, nel tester.

"La funzione OnTick() non è un gestore di ogni tick, ma notifica all'Expert Advisor i cambiamenti nel mercato. I cambiamenti possono essere in serie: il terminale può ricevere diversi tick allo stesso tempo, ma la funzione OnTick() sarà chiamata solo una volta per informare l'Expert Advisor sull'ultima condizione del mercato".

Se volete tracciare ogni tick, dovete farlo nell'indicatore. Un indicatore, a differenza di un EA, gestisce ogni tick.

Aggiunto: ora è possibile analizzare tutti i tick anche in EA - solo è necessario inserire dei controlli (per esempio per analizzare la richiesta CopyTicks con profondità di 5 tick).

 

Costruire 1192. Windows 10 x32.

Cancellata in via preliminare la cartella della cronologia dei tick del server MetaQuotes-Demo completamente. Utilizzando l'indicatore

//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property indicator_chart_window
#property indicator_plots 0
//--- input parameter
input int   InpShowTicks=500;    // клубина истории тиков
//--- parameters
MqlTick     arr_mql_tick[];      // массив структур хранящий тики
bool        bingo=false;         // false - скачано тиков меньше запрошенного
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   Comment("");
   ResetLastError();
//--- новый размер массива структур тиков
   if(ArrayResize(arr_mql_tick,InpShowTicks)==-1)
     {
      Print("Error OnInit #1",GetLastError());
      return(INIT_FAILED);
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 int count;
   string text="";
   if(bingo)
      return(rates_total);
   int copied=CopyTicks(_Symbol,arr_mql_tick,COPY_TICKS_INFO,0,InpShowTicks);
   if(copied==InpShowTicks)
      bingo=true;
   text="Запрошено "+IntegerToString(InpShowTicks)+" тиков, скачано "+IntegerToString(copied);
   Comment(text);
   count++;
   return(rates_total);
  }
//+------------------------------------------------------------------+

Ho controllato il download delle zecche. Per alcuni strumenti vengono scaricati 500 tick al primo o al secondo tick e non scaricano più di 200 Kb (semplicemente trascino gli strumenti da Market Watch su un grafico).

Ma in alcuni strumenti accadono miracoli: la storia dei tick non vuole darmi i 500 tick necessari, ma il terminale scarica circa 20 Mb di storia (storia per 10 e 9 mesi).

File:
test.mq5  3 kb
Motivazione: