¿Cómo se obtienen los parámetros Open, Low, High, Close en MQL5? - página 4

 
Alexey Viktorov:

En ese caso, sin duda CopyRates desde el primer compás 10s. Y no hay que llamarlo cada vez que aparezca una barra nueva, sino lo suficiente.

¿Cómo puedo saber si ha aparecido una nueva barra sin CopyRates? Es decir, tienes que coger el nuevo evento del bar primero. ¿Sin CopyRates es posible? Estoy un poco confundido).

Eso es lo que significa, nunca he tratado este tema en MT5. Por favor, comprenda)).

 
Alexey Viktorov:

Oh, Vladimir. Aunque lo solté, pero por desgracia, no hice una reserva. Si sólo necesitamos el precio o la hora de apertura, por ejemplo, no es necesario utilizar CopyRates(), en este caso CopyOpen o iOpen es suficiente... respectivamente CopyTime o iTime. Se elige según sus preferencias religiosas.

Y añado mi advertencia: en términos de costes de rendimiento, no hay una diferencia apreciable. En consecuencia, sólo quedan los prejuicios religiosos.

El fxsaber estaba comprobando el coste de CopyRates() - es más caro que obtener la propiedad requerida por separado. No se aplica a la situación en la que necesitamos obtener todos los precios a la vez.

 
Реter Konow:
¿Y cómo sé que ha aparecido una nueva barra sin CopyRates? Es decir, tienes que coger el nuevo evento del bar primero. ¿Es posible hacerlo sin CopyRates? Estoy un poco confundido).

Sin prestar atención a nada, vigila la aparición de una nueva barra y llama a CopyRates

Hay muchas funciones y formas diferentes de detectar una nueva barra en el sitio.

 
Реter Konow:

¿Cómo puedo saber si ha aparecido una nueva barra sin CopyRates? Es decir, tienes que coger el nuevo evento del bar primero. ¿Sin CopyRates es posible? Estoy un poco confundido).

Eso es lo que significa, nunca se ha tratado este tema en MT5. Por favor, comprenda).

La forma más sencilla es comparar la hora de apertura de la barra actual. Si no es igual a la memorizada anteriormente - tiene un nuevo compás - haga lo que tenga que hacer en el nuevo compás y memorice este tiempo para el siguiente control.

 
Alexey Viktorov:

Sin prestar atención a nada, rastreamos la aparición de una nueva barra y llamamos a CopyRates

Hay muchas funciones y formas diferentes de definir una nueva barra en el sitio.

La aparición de una nueva barra en MT5 no está vinculada al inicio del minuto. No está cronometrado en absoluto. Hay una trampa. ¿Con qué precisión podemos entender la aparición de una nueva barra basándonos sólo en los ticks? Todavía hay que referirse a la serie temporal. De lo contrario, no sería posible. Aunque... No estoy 100% seguro.
 
Artyom Trishkin:

fxsaber hizo una comprobación del coste de CopyRates() - es más caro que obtener la propiedad requerida por separado. Esto no se aplica a la situación en la que usted necesita obtener todos los precios a la vez.

Con el debido respeto fxsaber, prefiero no prestar atención a esa diferencia. Por eso he dicho que" no hay diferenciasnotables", y no me interesa la diferencia en 1e6 iteraciones. No es que estemos escribiendo un shooter en el que puedas disparar 1e6 balas a la vez.
 
Artyom Trishkin:

La forma más sencilla es comparar la hora de apertura de la barra actual. Si no es igual a la memorizada anteriormente - tiene un nuevo compás - haga lo que tenga que hacer en el nuevo compás y memorice este tiempo para el siguiente control.

Entonces, ¿significa llamar a CopyRates en cada tic? Si no, ¿cómo sabemos que la hora de apertura del bar actual ha cambiado?
 
Реter Konow:
Entonces, ¿llamas a los CopyRates en cada tic? Si no, ¿cómo sabrías que la hora de apertura del bar actual ha cambiado?

puede clasificar CNewbar, o buscar en el foro NewBar

SZZ: ¡artículo completo!https://www.mql5.com/ru/articles/159



Alexey Viktorov:

Igor, necesitas ir al primer grado. Allí enseñan las letras y después de aprenderlo entenderás la diferencia entre CopyRates y CopyBuffer.

Aquí hay una sugerencia mejor para resolver este problema SIN CopyRates


OK, lo de siempre... oops, oops... y ni una sola línea de código ))))

He citado mi ejemplo para mostrar que no siempre es conveniente (y rara vez es necesario) obtener una matriz de OHLC consecutivos. En las tareas prácticas solemos necesitar obtener una selección de valores de OHLC de diferentes barras (no se tienen en cuenta los indicadores)

¡Bien, cuídate!

Обработчик события "новый бар"
Обработчик события "новый бар"
  • www.mql5.com
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
 
Реter Konow:
Entonces, ¿en cada tic llamada CopyRates? Si no, ¿cómo sabemos que la hora de apertura del bar actual ha cambiado?

Sí, en cada tictac comprobamos la hora:

//+------------------------------------------------------------------+
//| Возвращает время указанного бара                                 |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+

Y en pocas palabras, es así:

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;
  }

Sólo lo escribí en mi mano - para mostrar la idea, no la precisión de la escritura

 
Реter Konow:
Entonces, ¿en cada tic deberíamos llamar a CopyRates? Si no, ¿cómo saber que la hora de apertura del bar actual ha cambiado?

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

{

// cambio de la hora de apertura de la barra actual

}

prevTime=iTime(...);