Cambiar el TF es un problema - página 3

 
Vasyl Nosal:

Tengo una idea. Escribiré más tarde.

la idea está muerta.

Pediré a los desarrolladores que hagan algo como el sistema HistoryUpdated() para comprobar si todo el historial fue actualizado o no.

Una variante óptima. Mantener actualizado el historial de todos los plazos. Recientemente ha aparecido un indicador similar en CodeBase
 
Slawa:

Los desarrolladores no te ayudarán porque no lo harán.

Ya lo dije: si la diferencia entre rates_total y prev_calculated es mayor que 1, entonces es historyUpdated

es mayor que 0, no que 1.

И? ¿Resuelve eso el problema?

¿O no es un problema para ti recalcular toda la historia en cada nueva barra?

 
Vasyl Nosal:

es mayor que 0, no que 1.

И? ¿Resuelve eso el problema?

¿O no es un problema para ti recalcular toda la historia en cada nueva barra?

Se le ha dicho correctamente. Mayor que 1. Cuando aparece una nueva barra, la diferencia es de 1.

Y eso resuelve completamente el problema.

Un indicador normal tarda muy poco tiempo en recalcularse por completo. Menos de un segundo.

 
Victor Nikolaev:

Se le ha dicho correctamente. Mayor que 1. Cuando aparece una nueva barra, la diferencia es de 1.

Y eso resuelve completamente el problema.

Un indicador normal tarda muy poco tiempo en recalcularse por completo. Menos de un segundo.

Sólo funciona si los búferes están a cero.

//history update
  int all=rates_total;
  int counted=prev_calculated;
  if(all-counted>1)
  { 
  ArrayInitialize(up_arr,EMPTY_VALUE);
  ArrayInitialize(down_arr,EMPTY_VALUE);
  counted=0;
  }
   
   //main
 for(int i=all-counted;i>=0;i--)
{
 
Vasyl Nosal:

Sólo funciona si se ponen a cero los búferes.

//history update
  int all=rates_total;
  int counted=prev_calculated;
  if(all-counted>1)
  { 
  ArrayInitialize(up_arr,EMPTY_VALUE);
  ArrayInitialize(down_arr,EMPTY_VALUE);
  counted=0;
  }
   
   //main
 for(int i=all-counted;i>=0;i--)
{

Lo siento, pero déjame preguntar:

  • ¿por qué hay que asignar rates_total y prev_calculated a variables separadas creadas en cada tic?
  • En la sentencia condicional if() y en el bucle for(), ¿por qué hay que recalcular la diferencia de estas variables?
  • ¿por qué no introducir una variable para la diferencia entre rates_total y prev_calculated, por ejemplo limit?
La aplicación puede ser diferente en función de la tarea. Los matices pueden ser diferentes. ¿Por qué no ves cómo lo ponen en práctica otros, según las diferentes condiciones? Incluyendo, y con la ayuda de la imprimación para entender, decidir, formar variantes aceptables para ti, dependiendo de las tareas?
 
Vasyl Nosal:

P.D. Añadiré más a esto:

Tu idea sobre la puesta a cero (counted=0) en el bloque del operador condicional if(){} me parece clara.

Por si acaso le quedara más claro a qué me refiero brevemente arriba, he aquí un extracto de la Documentación, de la sección ... Conceptos básicos del lenguaje / Funciones / Funciones de manejo de eventos:

... Si desde la última llamada de OnCalculate() los datos de los precios han cambiado (se ha bombeado un historial más profundo o se han rellenado los huecos del historial), entonces el valor del parámetro de entrada prev_calculado será puesto a cero por el propio terminal.

 
Vasyl Nosal:

Sólo funciona si se ponen a cero los búferes.

No es necesario reiniciar nada.

int OnCalculate(...)
{
   // индекс последнего посчитанного на прошлом вызове бара
   // с которого начинаем расчёт
   int nStartBar = rates_total - MathMax(prev_calculated, 1);

   for(int i = nStartBar; i >= 0; i--)
   {
       // рассчитываем индикатор на всех непосчитанных барах
   }
}

Si se pone a cero prev_caclulated, el indicador se recalculará completamente. Y esto es correcto: no se sabe qué ha cambiado exactamente en la historia. Tal vez, algún agujero fue cargado, tal vez los pernos fueron limpiados en alguna parte. Es obligatorio recalcular por completo. En todos los demás casos, sólo se recalculará una última barra (cuando aparezcauna nueva barra, las dos últimas).

 
Dina Paches:

Lo siento, pero déjame preguntar:

  • ¿Por qué hay que asignar los valores de rates_total y prev_calculated a variables separadas en cada tick?
  • En la sentencia condicional if() y en el bucle for(), ¿recalcula la diferencia de estas variables?
  • ¿por qué no introducir una variable para la diferencia entre rates_total y prev_calculated, por ejemplo, limit?
La aplicación puede ser diferente en función de la tarea. Los matices pueden ser diferentes. ¿Por qué no ves cómo lo ponen en práctica otros, según las diferentes condiciones? Incluyendo, y con la ayuda de la imprimación para entender, decidir, formar variantes aceptables para usted, dependiendo de las tareas?

Gracias. Buen punto.

No lo es. Es para poder recalcular todo el historial si hay un hueco.

 
Dina Paches:

P.D. Añadiré más a esto:

Tu idea sobre la puesta a cero (counted=0) en el bloque del operador condicional if(){} me parece clara.

Por si acaso le quedara más claro a qué me refiero brevemente arriba, he aquí un extracto de la Documentación, de la sección ... Conceptos básicos del lenguaje / Funciones / Funciones de manejo de eventos:

... Si desde la última llamada de OnCalculate() los datos de los precios han cambiado (se ha bombeado un historial más profundo o se han rellenado los huecos del historial), entonces el valor del parámetro de entrada prev_calculado será puesto a cero por el propio terminal.

No lo hará. Es 0 y luego no 0 y luego 0 de nuevo (al cargar el historial un par de veces).
 
Sergei Vladimirov:

No es necesario reiniciar nada.

Si se pone a cero prev_caclulated, el indicador se recalculará completamente. Y esto es correcto: no se sabe qué ha cambiado exactamente en la historia. Tal vez, algún agujero fue cargado, tal vez los pernos fueron limpiados en alguna parte. Es obligatorio recalcular por completo. En todos los demás casos, sólo se recalculará una última barra (cuando aparezcauna nueva barra, las dos últimas).

No. Sin la puesta a cero será lo que muestran las capturas de pantalla.