Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 441
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿Pueden decirme qué estoy haciendo mal?
Necesito calcular cuántas barras han pasado desde que el precio cruzó por última vez la MA - excluyendo la barra cero.
if(Bars>1400)
{
int Stop;
double MATcycle;
for(int i=0;i!=1000 || Stop!=1; i++)
{
MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i+1);
if(MATcycle<High[i+1] && MATcycle>Low[i+1])
{
Stop=1;
Print("MATcycle=",MATcycle," i=",i);
}
else return (0);
}
¿Pueden decirme qué estoy haciendo mal?
Necesita - contar cuántas barras han pasado desde que el precio cruzó por última vez la MA - sin incluir la barra cero.
if(Bars>1400)
{
int Stop;
double MATcycle;
for(int i=0;i<1000 || Stop==1; i++)
{
MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i+1);
if(MATcycle<High[i+1] && MATcycle>Low[i+1])
{
Stop=1;
Print("MATcycle=",MATcycle," i=",i);
}
else return (0);
}
Por lo que tengo entendido, una vez identificado el cruce y puesto el stop=1, hay una salida inmediata del ciclo. Bien, entonces hay que ir más allá y recordar el número de la vela donde se produjo el cruce. Es decir
Es más fácil escribirlo uno mismo:
Esto es que has identificado el número de la vela. Si el número = 2 y no se tiene en cuenta el actual, entonces desde el cruce se formó una vela (o interpretarlo como quieras).
Por lo que tengo entendido, una vez identificado el cruce y puesto el stop=1, hay una salida inmediata del ciclo. Bien, entonces tienes que ir más allá y recordar el número de la vela donde se produjo el cruce. Es decir
Es más fácil escribirlo uno mismo:
Esto es que has identificado el número de la vela. Si el número = 2 y se ignora el actual, entonces se ha formado una vela desde el cruce (bueno, o interpretarlo como se quiera).
Gracias, así es como me ha funcionado
int Stop=0;
if(Bars>1400)
{
double MATcycle;
for(int i=1;(i!=1000 || Stop==0); i++)
{
MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i);
if(MATcycle<=High[i] && MATcycle>=Low[i])
{
Print("MATcycle=",MATcycle," i=",i);
Stop=i;
break;
}
}
}
¿Puede decirme si se trata de una cifra de prueba realista? ¿Y es un buen o mal resultado para un año con una deposición de 3.000 dólares?
Gracias, así es como me ha funcionado
int Stop=0;
if(Bars>1400)
{
double MATcycle;
for(int i=1;(i!=1000 || Stop==0); i++)
{
MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i);
if(MATcycle<=High[i] && MATcycle>=Low[i])
{
Print("MATcycle=",MATcycle," i=",i);
Stop=i;
break;
}
}
}
No deberías escribirlo así, porque si no hubo cruce durante las últimas 1000 barras, primero, el bucle continuará, y segundo, puede dar un bucle/error, porque si la historia termina y no hay cruce, no habrá salida del bucle, porque Stop = 0. Es mejor escribirlo de la manera que mencioné anteriormente.
No deberías escribirlo así, porque si no hubo cruce durante las últimas 1000 barras, en primer lugar, el ciclo continuará, y en segundo lugar, puede hacer un bucle/error, porque si la historia termina y no hay cruce, no habrá salida del ciclo, porque Stop = 0. Es mejor escribirlo de la manera que mencioné anteriormente.
El signo "o" no funciona - la condición dice que o bien llega a 1000 barras o bien termina en cuanto se encuentra el resultado deseado. ¿O se acabará antes de 1000 barras, si el resultado deseado, es decir, el cruce de la MA?
|| significa que si al menos una de las condiciones entre paréntesis es verdadera, el bucle se repetirá, por lo tanto, incluso cuando i >= 1000, pero stop = 0, el bucle continuará, i continuará incrementándose, lo que provocará el valor incorrecto de MA (en caso de que haya un valor atípico en el historial). Y el operador de ruptura es responsable de la terminación del bucle al encontrar el resultado deseado;
Hola 2015.09.19_02:13AM MSC. En la función ArrayResize() de todos modos el compilador escribe
frente al tamaño del array -- se espera una coma, tanto si se escribe int como si no. Si no escribes int, dice: "-.
Lo he cambiado sin tipo. Y eliminé la referencia & y los corchetes - ¡funcionó!
Advertencias: cuando se escribió normalmente, -- el compilador escribió: oculta el identificador
declaración a nivel global. Y cuando eliminé la declaración del identificador a nivel global, - escribí
escribe: "Error, identificador no declarado. Y he cambiado los arrays High[] y Low[] por HighP[] y LowP[]. No
ayudado. El compilador escribe lo mismo. 02:27 MSC. Adjunto un archivo de capturas de pantalla.
Hola 2015.09.19_02:13AM MSC. En la función ArrayResize() de todos modos el compilador escribe
frente al tamaño del array -- se espera una coma, tanto si se escribe int como si no. Si no escribes int, dice: "-.
"sin tipo". Y eliminé la referencia & y los corchetes - ¡ayudó!
Advertencias: cuando se escribió normalmente, -- el compilador escribió: oculta el identificador
declaración a nivel global. Y cuando eliminé la declaración del identificador a nivel global, - escribí
escribe: "Error, identificador no declarado. Y he cambiado los arrays High[] y Low[] por HighP[] y LowP[]. No
ayudado. El compilador escribe lo mismo. 02:27 MSC. Adjunto el archivo de capturas de pantalla.
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
Preguntas de los principiantes
Karputov Vladimir, 2015.09.17 18:46