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:
for( int i = 1; i < 1000; i++ )
{
iMaValue = ...; // Значение МА на i свече
if( iMaValue < High[ i ] && iMaValue > low[ i ] )
{
num = i; // Запоминаем номер свечи, на котором произошло пересечениеbreak; // Выходим из цикла
}
}
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).
alph: ¿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?
La respuesta es sencilla: la actuación del probador NO ES REAL si está probando un EA. El Probador de Estrategias es utilizado por los operadores para comprobar el rendimiento del ATC, o para probar las estrategias manuales en línea.
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: según la expresión, el bucle se sobrepasará en 1000 barras o terminará en cuanto se encuentre el resultado deseado. ¿O se acabará antes de las 1000 barras si el resultado requerido, es decir, el cruce de la MA?
-Aleks-: 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 de los paréntesis es cierta, el ciclo se repetirá. Por lo tanto, incluso cuando i >= 1000, pero stop = 0, el ciclo continuará y i seguirá incrementándose, lo que provocará valores incorrectos de MA (en caso de que se salga del historial). Y el operador break se encarga de la terminación del bucle cuando se encuentra el resultado deseado;
Tapochun: || 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;
Entendido, ¡gracias por la aclaración! Pensé que una de las condiciones estaría mal y entonces el bucle se detendría...
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.
¿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