Errores, fallos, preguntas - página 3149

 
Vladimir Karputov #:

Paso 1: Crear una plantilla utilizando el 'MQL5 Wizard':


Paso 2: deletrear correctamente "límite" y UTILIZAR la matriz de cierre - ¡¡¡NO la llamada iClose!!!


Resultado:

y no hay errores.

¿Quién ha dicho que éste es el único cálculo correcto de límite e indicador?

Estamos hablando de otro cálculo de límite y del propio indicador -de izquierda a derecha- desde el principio de la historia hasta la época actual. Es más sencillo y evidente.

En dicho límite calculado (int limit = rates_total - prev_calculated; if(limit>1) limit=rates_total-1;) todos los datos sobre

  1. si se trata de una garrapata actual,
  2. si se trata de la apertura de un nuevo bar,
  3. si se trata de un cambio de datos del historial.

Si el tick actual (límite==0), entonces for(int i=límite; i>=0; i--) { // . } calculará el indicador en cada nuevo tick, y sólo se recalculará la barra cero.

Si abrimos una nueva barra (límite==1), entonces for(int i=límite; i>=0; i--) { // ... } realizará el cálculo de la primera barra y de la barra cero, la anterior y la recién abierta.

Si esta historia cambia (límite>1), entonces for(int i=límite; i>=0; i--) { // ... } realizará un recálculo completo del indicador para todo el historial disponible (el historial ha sido modificado en alguna parte)

 
TheXpert #:
¿Qué diferencia hay? ¿Puede ser menor que cero?

Sí, lo he hecho (añadido al post anterior)

 
Artyom era el único que entendía el problema.
Pero aparentemente este problema es para siempre.
Y ahora sólo hay "si".
 
Roman #:
Sólo Artyom entendió el problema.
Pero aparentemente este problema es para siempre.
Y ahora sólo hay "si".

No, no lo entendí. Aclarar lo que he entendido...

 
Vladimir Karputov #:
   int limit=prev_calculated-1;
   if(prev_calculated==0)
      limit=0;
   for(int i=limit; i<rates_total; i++)
     {
      CloseBuffer[i]=close[i];
     }

el operador ternario parece más lacónico (IMHO)

int limit = prev_calculated==0 ? 0: prev_calculated-1;

Además, como he dicho, qué pasa si algo sale mal y prev_calculado resulta ser mayor que rates_total.
Me encontré con esta situación, cuando las barras máximas en la ventana son != ilimitadas, pero por ejemplo, 50000. En ese caso, el tamaño de la matriz de barras aumentaría en 1 con cada nueva barra, pero en algún momento volvería a ser de 50000. No sigo la lógica. Lo cogí hace un par de años. Hay que comprobarlo ahora. Prepararé un desbloqueo en mi VPS.

 
Artyom Trishkin #:

No, no lo entendí. Aclarar lo que he entendido...

Lo que por ahora no funciona como antes

limit==0
para ticks i>=0
para barras i>0

Has escrito todo correctamente arriba,
sólo para la nueva barra mal impresafor(int i=limit; i>=0; i--)
el operador = no es necesario aquí, pero es probablemente en el pasado,
a menos que devuelvan el comportamiento anterior
.

 
Roman #:

Lo que por ahora no funciona como antes

limit==0
para ticks i>=0
para barras i>0

Has escrito todo correctamente arriba,
sólo para una nueva barra mal impresafor(int i=limit; i>=0; i--)
aquí el operador = no es necesario, pero es probablemente en el pasado,
a menos que devuelvan el comportamiento anterior
.

De nuevo no entiendo nada. ¿Qué tiene de malo? Todo parece ser como antes.

 
Artyom Trishkin #:

No lo entiendo de nuevo. ¿Qué tiene de malo? Todo parece ser como antes.

Con este diseño.

int limit = rates_total-prev_calculated;

for(int i=limit; i>=0; i--)


El búfer del indicador está fuera de los límites.

Por favor, muéstrame un ejemplo paraticks con ciclo i>=0
tal vez he olvidado algo y lo estoy haciendo mal
.

 
Roman #:

Con este diseño
, el búfer del indicador se sale de los límites.

siempre ha salido.
 
Roman #:

Con este diseño.


El búfer del indicador está fuera de los límites.

Por favor, muéstrame un ejemplo paraticks con ciclo i>=0
tal vez he olvidado lo que estoy haciendo mal
.

Ya escribí que con esta construcción estás accediendo al índice del buffer con rates_total (cuando prev_calculated == 0 ).
Y esto es un desbordamiento porque rates_total es el tamaño del buffer cuyo último elemento rates_total-1