Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1754

 
La situación es la siguiente: la variable X almacena el índice de la barra en el historial, sabemos que cuando aparece una nueva barra, hay un desplazamiento, y por tanto X ya apunta a una barra diferente. ¿Cómo solucionarlo? La idea: con cada nueva barra aumentamos el contador (count++) y lo añadimos a X. Por lo tanto, X siempre apuntará a la misma barra independientemente del desplazamiento. Pero hay un problema - cuando el EA se inicializa la primera barra actual no debe ser tomada en cuenta. Creo que puede ser fácilmente resuelto si la cuenta es inicialmente igual a -1. Es decir, en la barra actual después de la cuenta de incremento será "0", y en la siguiente barra nueva (cuando el primer desplazamiento por 1 barra ha ocurrido después de la inicialización) será "1". ¿Qué te parece? ¿Tal vez estoy pensando en el lugar equivocado?
 
Nerd Trader #:
La situación es la siguiente: la variable X almacena el índice de la barra en el historial, sabemos que cuando aparece una nueva barra, hay un desplazamiento, y por tanto X ya apunta a una barra diferente. ¿Cómo solucionarlo? La idea: con cada nueva barra aumentamos el contador (count++) y lo añadimos a X. Por lo tanto, X siempre apuntará a la misma barra independientemente del desplazamiento. Pero hay un problema - cuando el EA se inicializa la primera barra actual no debe ser tomado en cuenta. Creo que puede ser fácilmente resuelto si la cuenta es inicialmente igual a -1. Es decir, en la barra actual después de la cuenta de incremento será "0", y en la siguiente barra nueva (cuando el primer desplazamiento por 1 barra ha ocurrido después de la inicialización) será "1". ¿Qué te parece? ¿Quizás estoy pensando en el lugar equivocado?

Si es un indicador, es suficiente

bool  ArraySetAsSeries(
   const void&  array[],    // массив по ссылке
   bool         flag        // true означает обратный порядок индексации
   );

a todos los arrays y buffers del indicador utilizado.

Entonces la barra de cero se convertirá en rates_total-1

ArraySetAsSeries - Операции с массивами - Справочник MQL4
ArraySetAsSeries - Операции с массивами - Справочник MQL4
  • docs.mql4.com
ArraySetAsSeries - Операции с массивами - Справочник MQL4
 
Nerd Trader #:
La situación es la siguiente: la variable X almacena el índice de la barra en el historial, sabemos que cuando aparece una nueva barra, hay un desplazamiento, y por tanto X ya apunta a una barra diferente. ¿Cómo solucionarlo? La idea: con cada nueva barra aumentamos el contador (count++) y lo añadimos a X. Por lo tanto, X siempre apuntará a la misma barra independientemente del desplazamiento. Pero hay un problema - cuando el EA se inicializa la primera barra actual no debe ser tomada en cuenta. Creo que puede ser fácilmente resuelto si la cuenta es inicialmente igual a -1. Es decir, en la barra actual después de la cuenta de incremento será "0", y en la siguiente barra nueva (cuando el primer desplazamiento por 1 barra ha ocurrido después de la inicialización) será "1". ¿Qué te parece? ¿Quizás estoy pensando en el lugar equivocado?
      datetime x=время нужного бара;
      int index=iBarShift(_Symbol,0,x);
 
MakarFX #:
¿Por qué tomarse tantas molestias?
 
Alexey Viktorov #:
¿Por qué tomarse tantas molestias?
Es más fácil para mí)
 
MakarFX #:
Es más fácil para mí)

Pero el procesador es más pesado...

 
Alexey Viktorov #:

Pero el procesador es más pesado...

No sé qué funciones llevan qué carga. ¿Hay algún lugar donde se pueda leer sobre esto?
 
Nerd Trader #:
La situación es la siguiente: la variable X almacena el índice de la barra en el historial, y sabemos que cuando aparece una nueva barra, ésta se desplaza y por tanto X ya apunta a otra barra. ¿Cómo solucionarlo? La idea: con cada nueva barra aumentamos el contador (count++) y lo añadimos a X. Por lo tanto, X siempre apuntará a la misma barra independientemente del desplazamiento. Pero hay un problema - cuando el EA se inicializa la primera barra actual no debe ser tomado en cuenta. Creo que puede ser fácilmente resuelto si la cuenta es inicialmente igual a -1. Es decir, en la barra actual después de la cuenta de incremento será "0", y en la siguiente barra nueva (cuando el primer desplazamiento por 1 barra ha ocurrido después de la inicialización) será "1". ¿Qué te parece? ¿Tal vez estoy pensando en el lugar equivocado?

No hay. No hay nada en X cuando se carga el EA/indicador si está dentro de la terminal, a menos que sea una variable intu o externa o global fuera de la terminal, por lo que hay que escribir algo allí primero. Y luego simplemente leemos los cambios del número total de barras (cuenta de la aparición de una nueva barra).

datetime BarTime;

FlagNewBar=false;
if(BarTime!=iTime(NULL,0,0))
{
 BarTime=iTime(NULL,0,0);
 FlagNewBar=true;
}
if(FlagNewBar==true)
{
// И когда тру, делаем что нужно делать когда появился новый бар, 
//на следующем тике флаг нового бара будет ложь, так как БарТайм время все время существования нулевого бара будет равным
}
 

Saludos. ¿Puedes darme una pista? ¿Cómo en mt5 en la inicialización o en la garrapata para definir las pruebas?

Hasta ahora sólo he encontrado OnTester(), que se llama justo antes de OnDeinit().

 
@Alexey Viktorov @MakarFX interesante, soluciones bastante buenas. Gracias.

@Valeriy Yastremskiy El índice se coloca en X todavía en OnInit(). Mi código es el siguiente:
last_time = iTime(NULL, 0, 0);

  if(last_time > bar.time_open){
    bar.time_open = last_time;
    coint++;//стартовое значение -1
  }
La condición con FlagNewBar me parece redundante.