Come posso ottenere i parametri Open,Low,High,Close in MQL5? - pagina 4

 
Alexey Viktorov:

In questo caso, inequivocabilmente CopyRate dalla prima barra 10s. E non per essere chiamato ogni tick, ma abbastanza all'apparizione di una nuova barra.

Come faccio a sapere se è apparsa una nuova barra senza CopyRate? Prima devi prendere il nuovo evento del bar. Senza CopyRate è possibile? Sono un po' confuso).

Questo è quello che significa, non ho mai trattato questo argomento su MT5. Per favore, capite)).

 
Alexey Viktorov:

Oh, Vladimir. Anche se l'ho spifferato, ma purtroppo non ho prenotato. Se abbiamo bisogno solo del prezzo di apertura o dell'ora, per esempio, non c'è bisogno di usare CopyRates(), in questo caso CopyOpen o iOpen sono sufficienti... rispettivamente CopyTime o iTime. Si sceglie in base alle proprie preferenze religiose.

E aggiungo il mio avvertimento: in termini di costi di prestazione, non c'è una differenza apprezzabile. Di conseguenza, rimangono solo i pregiudizi religiosi.

Il fxsaber stava controllando il costo di CopyRates() - è più costoso che ottenere la proprietà richiesta separatamente. Non si applica alla situazione in cui abbiamo bisogno di ottenere tutti i prezzi in una volta sola.

 
Реter Konow:
E come faccio a sapere che è apparsa una nuova barra senza CopyRate? Prima devi prendere il nuovo evento del bar. È possibile farlo senza CopyRate? Sono un po' confuso).

Senza prestare attenzione a nulla, controllate la comparsa di una nuova barra e chiamate CopyRates

Ci sono molte funzioni e modi diversi di rilevare una nuova barra sul sito.

 
Реter Konow:

Come faccio a sapere se è apparsa una nuova barra senza CopyRate? Prima devi prendere il nuovo evento del bar. Senza CopyRate è possibile? Sono un po' confuso).

Questo è ciò che significa, mai trattato questo argomento su MT5. Per favore, cerca di capire.))

Il modo più semplice è confrontare il tempo di apertura della barra corrente. Se non è uguale a quello memorizzato in precedenza - avere una nuova barra - fare ciò che deve essere fatto sulla nuova barra e memorizzare questo tempo per il prossimo controllo.

 
Alexey Viktorov:

Senza prestare attenzione a nulla, tracciamo la comparsa di una nuova barra e chiamiamo CopyRates

Ci sono molte funzioni e modi diversi di definire una nuova barra sul sito.

L'apparizione di una nuova barra in MT5 non è legata all'inizio del minuto. Non è affatto a tempo. C'è una fregatura. Quanto accuratamente possiamo capire la comparsa di una nuova barra basandoci solo sui tick? Avete ancora bisogno di fare riferimento alla serie temporale. Non sarebbe possibile altrimenti. Anche se... Non sono sicuro al 100%.
 
Artyom Trishkin:

fxsaber ha fatto un controllo dei costi di CopyRates() - è più costoso che ottenere la proprietà richiesta separatamente. Questo non si applica alla situazione in cui è necessario ottenere tutti i prezzi in una volta.

Con tutto il rispetto fxsaber, preferisco non prestare attenzione a tale differenza. Ecco perché ho detto che" non c'è una differenzaevidente", e non mi interessa la differenza in 1e6 iterazioni. Non è che stiamo scrivendo uno sparatutto in cui si possono sparare 1e6 proiettili alla volta.
 
Artyom Trishkin:

Il modo più semplice è confrontare il tempo di apertura della barra corrente. Se non è uguale a quello memorizzato in precedenza - avere una nuova barra - fare ciò che deve essere fatto sulla nuova barra e memorizzare questo tempo per il prossimo controllo.

Quindi, significa chiamare CopyRates ad ogni tick? Altrimenti, come facciamo a sapere che il tempo di apertura della barra corrente è cambiato?
 
Реter Konow:
Quindi, chiamate il CopyRates ad ogni tick? Altrimenti, come fareste a sapere che l'orario di apertura del bar attuale è cambiato?

potete o classificare CNewbar, o cercare nel forum NewBar

SZZ: tutto l'articolo!https://www.mql5.com/ru/articles/159



Alexey Viktorov:

Igor, devi andare in prima elementare. Lì insegnano le lettere e dopo averle imparate capirete la differenza tra CopyRates e CopyBuffer.

Ecco un suggerimento migliore per risolvere questo problema SENZA CopyRate


OK, il solito...oops, oops...e non una sola linea di codice ))))

Ho citato il mio esempio per mostrare che non è sempre conveniente (e raramente necessario) ottenere un array di OHLC consecutivi. Nei compiti pratici di solito abbiamo bisogno di ottenere una selezione di valori OHLC da barre diverse (gli indicatori non sono inclusi)

Bene, mi raccomando!

Обработчик события "новый бар"
Обработчик события "новый бар"
  • www.mql5.com
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
 
Реter Konow:
Quindi, su ogni tick chiama CopyRates? Altrimenti, come facciamo a sapere che il tempo di apertura della barra corrente è cambiato?

Sì, ad ogni spunta controlliamo l'ora:

//+------------------------------------------------------------------+
//| Возвращает время указанного бара                                 |
//+------------------------------------------------------------------+
datetime Time(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int index)
  {
   datetime array[];
   return(CopyTime(symbol_name,timeframe,index,1,array)==1 ? array[0] : 0);
  }
//+------------------------------------------------------------------+

E in poche parole, è così:

static datetime last_time=0;
datetime time_current=Time(Symbol(),PERIOD_CURRENT,0);
if(time_current==0)
  return;
if(time_current!=last_time)
  {
   // Новый бар или первый запуск (для контроля первого запуска можно сделать флаг - чтобы не обрабатывать его как новый бар)
   // делаем что нужно на новом баре
   last_time=time_current;
  }

L'ho appena scritto sulla mia mano - per mostrare l'idea, non la precisione della scrittura

 
Реter Konow:
Quindi, ad ogni tick dovremmo chiamare CopyRates? Altrimenti, come sapere che il tempo di apertura della barra corrente è cambiato?

if(prevTime!=iTime(...))

{

// il tempo corrente di apertura della barra è cambiato

}

prevTime=iTime(...);