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

 
mila.com:

el asesor se hizo para comprobar la posibilidad en sí, se abre correctamente, pero en el indicador no ve los valores de los dos buffers cercanos del indicador "Arrow v.3" en absoluto

Así que tienes un indicador fuera del array en el bucle. Mira qué límite y qué valores il hay en los bucles anidados. ¿A dónde se refiere el índice il cuando limit == rates_total-2 ?

 
mila.com:

¿Cómo lo ves?

Vea su código

 
Artyom Trishkin:

Vea cuál es el límite y cuáles son los valores de il en los ciclos anidados.

imprime el número de compás de la primera y la segunda flecha, alternativamente

  for(int i=limit; i>=0; i--) 
     {
     for(int il=i+1;il<=i+300;il++)
        {
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,il),Digits)!=EMPTY_VALUE
            )
           {
            num_buy=il;
            Print(il);
           // break;
           }
        }
//
      if(num_buy==60)
        {
         BufferUP[i+1]=low[i+1]-distance*MyPoint;
         
        }
    }
 
Artyom Trishkin:

Compruebe su código

Llevo tres días mirándolo, no sé qué pasa).

Ayúdame
 
mila.com:

imprime el número de compás de la primera y la segunda flecha, alternativamente

¿Qué clase de ciclo extraño es éste?

¿Por qué vas desde el principio de la historia hasta el final y sigues retrocediendo trescientos compases en un bucle anidado en cada iteración del primer bucle?

Probablemente se haya salvado con iCustom(), que no da valores fuera de los datos del historial.

Bueno, echa un vistazo por ti mismo. Suponga que tiene un historial de sólo 1000 barras: rates_total en este caso tiene 1000. Límite, 1000-2=998. Por lo tanto, la primera barra del historial se excluye del bucle. No te preocupes.

Primero se pone un índice en la barra con el número 998 (rates_total-2 = 1000-2 = 998),

¿y luego qué haces? Entonces se incrusta el bucle a partir del valor i, igual a 998+1=999 - esta es la primera barra de la historia - no hay nada más a la izquierda - está vacía. Y haces el bucle de 999 a 999+300. No hay datos allí - esto va fuera de la matriz.

Por lo tanto, el límite en esta situación debe ser tal, que el bucle incrustado en el principio llegará a la barra 999. Esto es rates_total-2-300. Entonces, como empiezas el bucle anidado a partir de i+1, es cuando no pasarás de la matriz: i=1000-2-300 = 698. En el bucle anidado, li=i+1 = 698+1=699, y hasta li=i+300 = 698+300=998. Una vez más, la primera barra se excluye del cálculo. Pero no hay un rebasamiento de la matriz.

Aparentemente, usted no sabe muy bien lo que está haciendo.

Esto se indica con un bucle muy extraño en general.

No necesitas bucles anidados ahí. Si lo que se busca es un número determinado de valores del buffer del indicador personalizado, entonces haga el ciclo desde cero hasta un valor determinado. Pero no más que rates_total.

 
Artyom Trishkin:

¿Qué clase de ciclo extraño es éste?

¿Por qué vas desde el principio de la historia hasta el final y sigues retrocediendo trescientos compases en un bucle anidado en cada iteración del primer bucle?

Probablemente se haya guardado por iCustom(), que no da valores fuera de los datos del historial.

Bueno, echa un vistazo por ti mismo. Suponga que tiene un historial de sólo 1000 barras: rates_total en este caso tiene 1000. Límite, 1000-2=998. Bueno, la primera barra de la historia está excluida del bucle. Déjalo estar.

Primero se pone un índice en la barra con el número 998 (rates_total-2 = 1000-2 = 998),

¿y luego qué haces? Entonces se incrusta el bucle a partir del valor i, igual a 998+1=999 - esta es la primera barra de la historia - no hay nada más a la izquierda - está vacía. Y haces el bucle de 999 a 999+300. No hay datos allí - esto va fuera de la matriz.

Por lo tanto, el límite en esta situación debe ser tal, que el bucle incrustado en el principio llegará a la barra 999. Esto es rates_total-2-300. Entonces, como empiezas el bucle anidado a partir de i+1, es cuando no pasarás de la matriz: i=1000-2-300 = 698. En el bucle anidado, li=i+1 = 698+1=699, y hasta li=i+300 = 698+300=998. Una vez más, la primera barra se excluye del cálculo. Pero no hay un rebasamiento de la matriz.

Aparentemente, usted no sabe muy bien lo que está haciendo.

Esto se indica con un bucle muy extraño en general.


Gracias, eso está muy claro.

 
Artyom Trishkin:

Esto se indica con un bucle muy extraño en general.

No necesitas bucles anidados ahí. Si busca un número determinado de valores de búferes de indicadores personalizados, entonces haga un bucle desde cero hasta un valor determinado. Pero no más que rates_total.

¿Por qué desde cero?

Necesito poner un punto si en la tercera o "N" barra hay una flecha del indicador llamado. En toda la historia

¿Cuál es el ciclo correcto?

 
mila.com:

¿Por qué desde cero?

Necesito puntear si hay una flecha en la tercera o "N" barra del indicador a llamar. En toda la historia.

¿Cuál es el ciclo correcto?

¿Dónde debe hacerse? ¿En un indicador? ¿En un EA?

 
Artyom Trishkin:

¿Dónde debe hacerse? ¿En un indicador? ¿En un EA?

En un indicador

 
mila.com:

En el indicador

Así que lee iCustom() justo por el primer índice del bucle.

Otra cuestión es que necesita datos de la barra actual a la izquierda. Por eso digo que hay que leer desde el cero hasta el encontrado, pero no más que rates_total-1.

Y sólo lectura cuando el límite>1

De lo contrario, no hay datos nuevos y el índice de la barra que necesita no cambiará.