prev_calculado - página 3

 
Alexey Viktorov:

La asombrosa capacidad de responder a la pregunta equivocada...

Ahora explícame qué pasa si:

1. 100 barras recalculadas, introducidas en los buffers de 0 a 99 inclusive (consideremos la dirección como serie temporal) el valor 1.03

2. De repente, el historial se cargó y prev_calculado pasó a ser 0.

¿A partir de qué barra del indicador el valor será 1,03?

  1. Para calcular la indexación como en las series de tiempo, debemos establecer la bandera AS_SERIES en OnInit() del buffer del indicador - por eso prefiero usar el concepto "la barra más a la derecha" - de esta manera nadie será informado erróneamente.
  2. Aquí está la respuesta:
       if(prev_calculated==0)
         {
          //--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории
          for(int i=0;i<rates_total;i++)
             ExtBuffer[i]=1.01;
          return(rates_total);
         }
    a "prev_calculado==0" absolutamente todos los elementos del buffer del indicador serán reiniciados con valores "1.01" e inmediatamente se saldrá por "return(rates_total);". Es decir, no quedará ningún rastro de los valores anteriores de "1,03" en la memoria intermedia del indicador.
 
Alexey Viktorov:

Mejor explicar cómo deshacerse de la basura laPRIMERA vez que se pone en marcha el indicador.

Es sencillo: olvídate de prev_calculated, crea tu propio duplicado sin el "agujero en el lateral". Si desea mantener el seguimiento de las barras calculadas previamente - comofxsaber en el ejemplo.
fxsaber:
No es una muleta en absoluto. Así es como lo hago yo.
Si un simple indicador de primera ejecución / ya no primera ejecución es suficiente, sustituir prev_calculado por el bool estático b_First_Run. O puedes poner la inicialización del buffer en OnInint
 
Karputov Vladimir:
  1. Para considerar la indexación como en las series de tiempo, debemos establecer la bandera AS_SERIES en OnInit() del buffer del indicador - por eso prefiero usar "la barra más a la derecha" - así nadie será informado erróneamente.
  2. Aquí está la respuesta:
       if(prev_calculated==0)
         {
          //--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории
          for(int i=0;i<rates_total;i++)
             ExtBuffer[i]=1.01;
          return(rates_total);
         }
    a "prev_calculado==0" absolutamente todos los elementos del buffer del indicador serán reiniciados con valores "1.01" e inmediatamente se saldrá por "return(rates_total);". Es decir, no quedará ningún rastro de los valores anteriores de "1,03" en el buffer del indicador.

Por lo tanto, este es el problema que hay que resolver. No necesito basura (en realidad no, pero interfiere con la visualización), pero necesito guardar los cálculos anteriores del indicador. Cuando se inicia el indicador la PRIMERA vez el buffer se convierte en basura, y cuando se carga el historial todo lo que se insertó en el buffer debe ser guardado ... y preferiblemente sin guardarlo en un archivo o en GV.


añadido:

El objetivo es estimar la reducción de la deuda en tiempo real cada minuto. El Asesor Experto trabaja durante una semana sin parar, y en lugar de la visualización semanal veremos sólo el último valor, que es visible incluso sin el indicador.

 
Alexander Puzanov:
Si un simple indicador de primera ejecución / no primera ejecución es suficiente, sustituya prev_calculado por el bool estático b_First_Run. Y puedes poner la inicialización del buffer en OnInint
No, los propósitos allí no son tan primitivos.
 
fxsaber:
No, los objetivos allí no son tan primitivos.
Esta no es su sugerencia,Alexey Viktorov como yo lo entiendo sólo tiene que poner a cero los búferes en el primer inicio y no tocar nada en ellos durante cualquier paginación
 
Alexey Viktorov:

Así que este es el problema que hay que resolver. No necesito la basura (no la necesito, pero interfiere con la visualización), pero necesito guardar los cálculos anteriores del indicador. Cuando se inicia el indicador por primera vez el buffer se convierte en basura, y cuando se carga el historial todo lo que se insertó en el buffer debe ser guardado ... y preferiblemente sin guardarlo en un archivo o en GV.


añadido:

Se trata de una estimación en tiempo real de la detracción cada minuto. El Asesor Experto trabaja durante una semana sin parar, y en lugar de una visualización semanal veremos sólo el último valor, que es visible incluso sin indicador...

¡О! Ahora tiene más sentido. Le responderé por la tarde.
 
Alexander Puzanov:
Esta no es tu sugerencia,Alexey Viktorov, según tengo entendido, sólo necesitas esto - poner a cero los buffers en el primer inicio y no tocar nada en ellos durante todo tipo de paginación
Por supuesto, empecé con la inicialización de los buffers en OnInit(), pero algo fallaba, no recuerdo qué y los inicialicé en OnCalculate con prev_calculated == 0
 

Se ha vuelto a comprobar lo que ocurre si las matrices de búfer se inicializan en OnInit().

Incluso cuando el indicador se retira del gráfico y se configura de nuevo, NO TODOS, pero algunos búferes siguen teniendo los valores antiguos. Ni siquiera son exactamente lo que eran antes, pero uno de esos valores se extiende a lo largo de varias barras.

 
Karputov Vladimir:
¡Oh! Eso tiene más sentido ahora. Me pondré en contacto con usted esta noche.
Disculpe el retraso en la respuesta. La única forma de guardar los valores calculados para este periodo de tiempo es guardarlos en un archivo. Esto requiere una sincronización: los datos deben distribuirse en sus barras al leer del archivo. Lo más lógico es sincronizarlo con la hora de apertura de la barra, pero puede haber algunos matices: por ejemplo, la hora de apertura de la barra (guardada en un archivo) era 2016.09.05. 25:02, pero ahora hay una barra en el gráfico con hora igual a 2016.09.05. 25:01.
 
Karputov Vladimir:
Disculpe el retraso en la respuesta. La única forma de guardar los valores calculados para un determinado periodo de tiempo es guardarlos en un archivo. Hay que ocuparse de la sincronización, para que al leer del archivo los datos se coloquen en sus barras. La solución más lógica es la sincronización según la hora de apertura de la barra, pero puede haber algunas sutilezas: por ejemplo, la hora de apertura de la barra (guardada en un archivo) era 2016.09.05. 25:02, pero ahora tenemos una barra en el gráfico con la hora igual a 2016.09.05. 25:01.

¿O tal vez sería mejor llamar la atención de los desarrolladores sobre el problema de la inicialización de los búferes de los indicadores? ¿Por qué no existe este problema en MT4? ¿Tal vez, de nuevo, no lo entienda del todo? El problema es que incluso después de la inicialización obligatoria de los búferes tras sacar un indicador de un gráfico en CADA uno de ellos, no todos los búferes contienen basura, y no podemos descargarla de ahí...

Personalmente no me importan las muletas, pero sólo si estas muletas no son demasiado complicadas y con efecto positivo. Pero escribir en un archivo y luego leerlo es una muletilla de mala muerte.