[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 661

 
artmedia70:

Todavía no funciona... y exactamente AC

captura en el registro, tal vez el recálculo es incorrecto y la condición nunca funcionará, como AC1 = 0 y AC2 = 0 y nunca habrá 0 > 0

print(AC1,AC2) ;
si (BB>0 && OsMA>0 && AC1>AC2) return(1);

 
IgorM:

capturas en el registro, tal vez el recálculo es erróneo y la condición nunca se cumplirá, como AC1 = 0 y AC2 = 0 y nunca 0 > 0

print(AC1,AC2) ;
si (BB>0 && OsMA>0 && AC1>AC2) return(1);

abajo:

si no, return(0);

 

Gracias, Igor. Creo que ahí está enterrado el perro... :)

Tengo en Comment() la misma salida AC1 y AC2 = 0,01, aunque en la ventana de datos tienen AC1=0,001008, AC2=0,001020.
¿Cómo puedo aumentar la capacidad de dígitos? Bueno, aparte de una trivial multiplicación por 1000, ¿o así?

 
IgorM:

Sí, así que voy a tratar mientras - que es hasta el primer pico y luego ........ - No puedo entenderlo.


Hecho. He aquí el resultado de su trabajo.

El código no es demasiado complicado, por lo que no deberías tener problemas para reorganizarlo según tus necesidades.

El guión se adjunta al post.

Archivos adjuntos:
0.mq4  4 kb
 

¿Es correcta esta entrada?

double AC1=NormalizeDouble(iAC(sy,tf,1),8);
 
artmedia70:

Hasta ahora no está funcionando... y es el AC.

La única salida es averiguar exactamente qué valores hay en las variables - esto nos mostrará por qué la condición programada no funciona.

Si el redondeo es automático hasta 0,01, lo más probable es que la prueba pase en un instrumento como el UsdJpy. Luego hay una opción para trabajar a través de variables de cadena (si realmente necesitas un decimal tan lejano)

 
drknn:
La única salida es averiguar exactamente qué valores hay en las variables - esto nos mostrará por qué la condición programada no funciona.
Gracias Vladimir, he encontrado la razón. La pregunta de arriba de dos puestos...
 
drknn:


Hecho. Aquí está el resultado de su trabajo.


Gracias, está bien - funciona, sólo que no pude averiguar cómo introducir la bandera de la tendencia - Pensé que era como ordenar una matriz
 
artmedia70:

¿Es correcta esta entrada?


Correcto, porque el primer parámetro devuelve un número y el segundo es un valor entero dentro de los límites aceptables. La cuestión es qué es exactamente lo que va a entrar en la variable. Intente imprimir tal cual y pruebe esta construcción:

double AC1=NormalizeDouble(iAC(sy,tf,1),8);
string str=AC1;
Print("str = ",str);
 
IgorM:

Gracias, está bien - funciona, sólo que no pude averiguar cómo introducir la bandera de la tendencia - Pensé que tenía que ordenar la matriz


El problema de trabajar con arrays es que cuando la función de enumeración de arrays encuentra un valor que se le da, devuelve el número de la celda que contiene este valor. Y el hecho de que este valor pueda encontrarse en otras celdas de la matriz es precisamente lo que causa complicaciones. Así que tenemos que seguir iterando, seguir recorriendo los valores hasta que hayamos recorrido todo el array. Y en cuanto encontremos el valor correcto, ponemos el índice de la celda en una matriz creada previamente, o cosemos las filas.

La complejidad de tu problema radica en que tienes que buscar los picos y las caídas. Para encontrarlo, hay que saltar más allá del extremo y sólo entonces el código se dará cuenta de que realmente se lo ha saltado. Por eso hay que retroceder un paso para recordar el punto extremo y la célula en la que se encuentra.