Testare 'CopyTicks'. - pagina 20

 

Quando non è zero Da dentro CopyTicks cerca (probabilmente una ricerca binaria) un posto per iniziare - indice nel database interno.

Si prega di aggiungere una funzione che restituisca l'indice nel database in base al tempo. Allora questo compito potrà essere risolto in modo ottimale

fxsaber:
Qual è l'algoritmo ottimale (più veloce) per ottenere i tick da_time a_time?
 

Per una buona ragione, l'argomento "Cos'è una zecca?" è stato cancellato. Darò alcune delle mie risposte dalla storia sopravvissuta

В парадигме MT тик - это то, что пришло от биржи. Единица стрима(-ов). Поэтому два подряд идущих тика могут полностью совпадать (MqlTick), но при этом не обозначать одно и то же событие. Помимо MqlTick-данных есть еще номер тика, который не показывается в MT. И есть MT-нюанс с тиками, когда сама история тиков переписывается задним числом из-за нескольких источников получения тиков.

due tick di fila (che causano un evento Tick/Calculate) possono essere identici nella struttura MqlTick (tutti i prezzi e volumi e tempo e bandiere sono uguali), ma in realtà sono diversi. Bid/Ask è sempre un multiplo di TickSize. Last (non in borsa) può non essere un multiplo di TickSize. TickSize può essere molte volte più grande di Point (guarda RTS, per esempio). Quindi non è del tutto corretto parlare di Punto in questo caso.

Può essere utile. SymbolInfoTick è una funzione non sincronizzata. Questo significa che può restituire diversi tick in diversi punti di OnTick. Inoltre, anche se chiamate SymbolInfoTick all'inizio di OnTick, il tick risultante non sarà l'iniziatore dell'evento Tick per il quale OnTick è attivato. I campi della sua struttura MqlTick non saranno uguali al tick proveniente dalla borsa, perché questi campi sono sintetizzati dal terminale stesso e sono uguali ai valori di Marketwatch.

 
Perché gli INFO-type nel forex tester non sono gli stessi degli ALL-type?
 
Eseguire l'Expert Advisor nello Strategy Tester
void OnTick()
{
  static bool FirstRun = true;
  
  if (FirstRun)
  {
    MqlTick Ticks[1];
    
    if (SymbolInfoTick(_Symbol, Ticks[0]))  
      Print(CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, Ticks[0].time_msc + 1)); // Сколько тиков со временем больше последнего
    FirstRun = false;
  }
}

Risultato

2016.10.15 13:23:57.689 2016.10.12 00:00:16   1

Dovrebbe restituire zero, ma restituisce uno. Ticks[] non cambia. Bug!

 
fxsaber:
Lanciare un Expert Advisor nello Strategy Tester
void OnTick()
{
  static bool FirstRun = true;
  
  if (FirstRun)
  {
    MqlTick Ticks[1];
    
    if (SymbolInfoTick(_Symbol, Ticks[0]))  
      Print(CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, Ticks[0].time_msc + 1)); // Сколько тиков со временем больше последнего
    FirstRun = false;
  }
}

Risultato

2016.10.15 13:23:57.689 2016.10.12 00:00:16   1

Dovrebbe restituire zero, ma restituisce uno. In questo caso, Ticks[] non cambia. Bug!

Potrebbe essere il fine settimana?

Dalla guida. CopyTicks La funzione ottiene il ticks_array dei tick accumulati dal terminale durante la sessione di lavoro corrente.

 
Alexey Volchanskiy:

Potrebbe essere il fine settimana?

Dal file di aiuto. CopyTicks La funzione ottiene i tick accumulati dal terminale durante la sessione di lavoro corrente nella matrice ticks_array.

C'è un bug nel tester.
 

Problema di prestazioni di CopyTicks.

Robo

Network 'xxx': authorized on RoboForexEU-MetaTrader 5 through Europe #1 (ping: 56.66 ms)

BCS

Network 'xxx': authorized on BCS-MetaTrader5 through Access Server #2 (ping: 45.53 ms)



Questi sono i dati dell'indicatore tick. In entrambi i casi ci sono 2-3 mila zecche caricate. Ma in robo è più di un ordine di grandezza più veloce.

Ho visto le stesse velocità nel forex durante il giorno - il mercato era più agile allora. Copitix sembra rallentare un marketwatch attivo.

L'unico grafico e l'unico indicatore in entrambi i casi. E kopitix aveva sicuramente già delle citazioni caricate nel database/cache.

 

1) le pile erano su entrambi?

2) le spunte commerciali/informative erano separate nei loro thread originali? I fili complessi richiedono il ricalcolo e l'emissione semplice

3) qual era la richiesta reale?

4) da quante query sono stati convalidati i risultati? Seguito ed esattamente come sono state seguite le regole del test: contabilizzazione dell'avviamento a freddo, scarto degli outlier, ripetibilità dei risultati per serie, codice di riproduzione.

In generale, i risultati numerici dovrebbero essere preceduti da un codice esatto in modo che chiunque possa ripeterli. Altrimenti non ha senso discuterne.

 
Renat Fatkhullin:

1) le pile erano su entrambi?

2) le spunte commerciali/informative erano separate nei loro thread originali? I fili complessi richiedono il ricalcolo e l'emissione semplice

3) qual era la richiesta reale?

4) da quante query sono stati convalidati i risultati? Seguito ed esattamente come sono state seguite le regole del test: contabilizzazione dell'avviamento a freddo, scarto degli outlier, ripetibilità dei risultati per serie, codice di riproduzione.

In generale, i risultati numerici dovrebbero essere preceduti da un codice esatto in modo che chiunque possa ripeterli. Altrimenti non ha senso discuterne.

Ti ho dato un link al codice esatto.

  1. Non c'erano bicchieri.
  2. Solo i tipi INFO.
  3. COPY_TICKS_INFO con da > 0.
  4. Vedere l'indicatore al link in funzione. La ripetibilità è completa. Escluso l'avviamento a freddo. Emissioni simili.
 

Controlleremo.

Ma sulla mancanza di un bicchiere in uno dei server, ci sono grandi dubbi. Non importa che il bicchiere non sia reso. Se un simbolo ce l'ha, i suoi dati sono sempre presenti e un algoritmo di emissione più complesso funziona quando si richiedono i tick.