Cosa aggiorna RefreshRates() - pagina 7

 
Mikhail Nazarenko:

Grazie, questo è il punto. Il terminale dà davvero un errore 4066 dopo l'accesso a una serie temporale non aggiornata tramite iTime? Ho incontrato iClose che dava informazioni non aggiornate invece di zero.

Questo è il punto, questo è il punto chiave che sta causando il tuo intoppo.

Errore 4066 - quando non c'è storia per questo TF, non è pronto, è necessario contattare il server.

E quando hai già, ma è aggiornato solo quando si accede, cioè, non dà un errore, solo darvi ciò che è ora, e contemporaneamente con la richiesta inizia ad aggiornare la serie temporale.

Se si accede di rado e in modo irregolare, a volte si ottiene roba vecchia. Se richiedete regolarmente ogni TF necessario, fino ad ogni spunta - allora tutto è a posto.

Se il grafico di questo TF è aperto, viene regolarmente aggiornato sul grafico. A proposito, è probabilmente possibile aprire i grafici di tutti i TF necessari dagli EA, se l'accesso non è regolare, ma non è affidabile, perché possono chiudere/cambiare i TF manualmente.

 
Evgeniy Chumakov:


Perché aggiungere 0 a [i + 0]?

invece di zero ho sostituito 1 e 2, 1 o 2. Ho lasciato 0, cioè 1 bar. Non ho pulito il codice, non è importante per la logica.

 
Aleksey Mavrin:

Questo è il punto, è il punto chiave che ti blocca.

L'errore 4066 è quando non c'è storia per questo TF, non è pronto, è necessario contattare il server.

E quando hai già, ma è aggiornato solo quando si accede, cioè, non dà un errore, solo darvi ciò che è ora, e contemporaneamente con la richiesta inizia ad aggiornare la serie temporale.

Se si accede di rado e in modo irregolare, a volte si ottiene roba vecchia. Se richiedete regolarmente ogni TF necessario, fino ad ogni spunta - allora tutto è a posto.

Se il grafico di questo TF è aperto, viene regolarmente aggiornato sul grafico. A proposito, è probabilmente possibile aprire i grafici di tutti i TF necessari dagli EA, se l'accesso non è regolare, ma non è affidabile, perché possono chiudere/cambiare i TF manualmente.

Quando ci dovrebbe essere un errore restituisce i vecchi dati, ottimo. Questo è uno dei motivi per cui i broker amano MT4 e non passano a MT5)).

Cioè chiedere il timeframe corretto ogni tick o sleep, fino all'errore 4066. Ho capito bene?

 
Mikhail Nazarenko:

Quando ci dovrebbe essere un errore restituisce i vecchi dati, ottimo. Questa è una delle ragioni per cui i broker amano la MT4 e non passano alla MT5)).

Cioè chiedere il timeframe corretto ogni tick o sleep, fino all'errore 4066. Ho capito bene?

Quasi. Ecco una funzione pronta:

bool IsTFDataReady(ENUM_TIMEFRAMES eTF)
{
   ResetLastError();
   iTime(NULL, eTF, 1);
   return GetLastError() == ERR_NO_ERROR;
}
Inseriscilo in OnTick() e, se restituisce true, si può accedere al timeframe eTF, i dati sono validi.
 
Mikhail Nazarenko:

Quando ci dovrebbe essere un errore restituisce i vecchi dati, ottimo. Questa è una delle ragioni per cui i broker amano la MT4 e non passano alla MT5)).

Cioè chiedere il timeframe corretto ogni tick o sleep, fino all'errore 4066. Ho capito bene?

Naturalmente, è meglio usare sleep solo in OnInit, ed è necessario solo negli indicatori. In altri casi, OnTick, come menzionato da Igor, è sufficiente.

A seconda del compito, si può manovrare verso l'opzione migliore. Di solito, quando si controlla se c'è una nuova barra, iTime è già accessibile ad ogni tick per tutti i timeframe utilizzati, il che è sufficiente per tenerli aggiornati.

s.w. E se usate la funzione di Igor non su ogni tick, ma su alcune rare condizioni, ci sarà anche un ritardo.
Основы тестирования в MetaTrader 5
Основы тестирования в MetaTrader 5
  • www.mql5.com
В чем различия между тремя режимами тестирования в MetaTrader 5 и на что обратить внимание? Как происходит тестирование эксперта, торгующего одновременно на нескольких инструментах? Когда и как вычисляются значения индикаторов при тестировании и как обрабатываются события? Как синхронизировать бары с разных инструментов при тестировании в режиме "Только цены открытия"? Статья призвана дать ответы на эти и многие другие вопросы.
 
Aleksey Mavrin:

sleep è meglio usarlo solo in OnInit, ovviamente, ed è necessario solo negli indicatori. In altri casi, è sufficiente usare OnTick, come ha detto Igor sopra.

A seconda del compito, si può manovrare verso l'opzione migliore. Di solito, quando controlliamo se c'è una nuova barra, accediamo ad iTime ad ogni tick per tutti i timeframe utilizzati, il che è sufficiente per tenerli aggiornati.

s.e. E se la funzione di Igor è usata non su ogni tick, ma su alcune rare condizioni, sarà anche fuori sincrono.

Il sonno non funziona negli indicatori

 
Ihor Herasko:

Quasi. Ecco una funzione già pronta:

Inseritelo in OnTick() e se restituisce true, potete accedere al timeframe eTF, i dati sono validi.

È brillantemente semplice. Grazie. Perché gli sviluppatori non lo descrivono nel manuale sulle funzioni iClose ecc?Oppure correggono la logica degli aggiornamenti delle quotazioni di MT4 per non creare teorie cospirative.

 
Mikhail Nazarenko:

Quando ci dovrebbe essere un errore restituisce i vecchi dati, ottimo. Questo è uno dei motivi per cui i broker amano la MT4 e non passano alla MT5)).

Cioè chiedere il timeframe corretto ogni tick o sleep, fino all'errore 4066. Ho capito bene?

In MT5 è molto più difficile.

In F4 è sufficiente richiedere iTime a tutti i TF utilizzati ogni 2 minuti, e tutti i dati saranno attuali.

 
Mikhail Nazarenko:

Tutto è brillantemente semplice. Grazie. Perché gli sviluppatori non lo descrivono nel manuale sulle funzioni iClose e così via?Oppure correggono la logica degli aggiornamenti delle quotazioni di MT4 per non creare teorie cospirative.

Perché quasi tutti gli EA controllano le condizioni giuste ad ogni tick e tutto si aggiorna da solo.

 
Vitaly Muzichenko:

Il sonno non funziona negli indicatori

Funziona se ne hai davvero bisogno :)

void SleepA(int msec)
 {
   uint now=GetTickCount();
   while (GetTickCount()<(now+msec))
      {
      for(int i=0;i<10000;i++)
         {
          double f=1;
          f*=f;
          f+=f;
         }
       }
   return;
 }  
Andrey Khatimlianskii:

In MT5 è molto più complicato.

In 4 è sufficiente richiedere iTime a tutti i TF utilizzati ogni 2 minuti, e tutti i dati saranno attuali.

Esattamente

Motivazione: