J'ai besoin de calculer le nombre de barres qui se sont écoulées depuis que le prix a traversé la MA pour la dernière fois - sans compter la barre zéro.
D'après ce que je comprends, une fois que vous avez identifié le croisement et fixé le stop=1, il y a une sortie immédiate du cycle. Ok, alors vous devez aller plus loin et vous souvenir du numéro de la bougie où le croisement a eu lieu. I.e.
C'est plus facile de l'écrire soi-même :
for( int i = 1; i < 1000; i++ )
{
iMaValue = ...; // Значение МА на i свече
if( iMaValue < High[ i ] && iMaValue > low[ i ] )
{
num = i; // Запоминаем номер свечи, на котором произошло пересечениеbreak; // Выходим из цикла
}
}
C'est vous qui avez identifié le numéro de la bougie. Si le nombre = 2 et que l'on ne tient pas compte de l'actuel, alors à partir du moment du croisement, une bougie a été formée (ou interprétez-le comme vous voulez).
D'après ce que je comprends, une fois que vous avez identifié le croisement et fixé le stop=1, il y a une sortie immédiate du cycle. OK, alors vous devez aller plus loin et vous souvenir du numéro de la bougie où le croisement a eu lieu. I.e.
C'est plus facile de l'écrire soi-même :
C'est vous qui avez identifié le numéro de la bougie. Si le nombre = 2 et que l'on ne tient pas compte de l'actuel, alors une bougie s'est formée depuis le croisement (bon, ou interprétez-le comme vous voulez).
alph: Pouvez-vous me dire s'il s'agit d'une figurine de test réaliste ? Et est-ce un bon ou un mauvais résultat pour une année avec une dépo de 3000 $ ?
La réponse est simple : les performances du testeur ne sont PAS RÉELLES si vous testez un EA. Strategy Tester est utilisé par les traders pour vérifier les performances de l'ATC, ou pour tester des stratégies manuelles en ligne.
Vous ne devriez pas l'écrire de cette façon, car s'il n'y a pas eu de croisement au cours des 1000 dernières mesures, premièrement, la boucle continuera, et deuxièmement, il peut y avoir une boucle/erreur, car si l'histoire se termine et qu'il n'y a pas de croisement, il n'y aura pas de sortie de la boucle, car Stop = 0. Il est préférable de l'écrire de la façon dont je l'ai mentionné ci-dessus.
Vous ne devriez pas l'écrire de cette façon, car s'il n'y a pas eu de croisement pendant les 1000 dernières mesures, premièrement, le cycle continuera, et deuxièmement, il peut tourner en boucle/erreur, car si l'histoire se termine et qu'aucun croisement ne se produit, il n'y aura pas de sortie du cycle, car Stop = 0. Il est préférable de l'écrire de la façon dont je l'ai mentionné ci-dessus.
Le signe "ou" ne fonctionne pas - selon l'expression, soit la boucle sera dépassée de 1000 barres, soit elle se terminera dès que le résultat requis aura été trouvé. Ou bien elle sera terminée avant 1000 barres si le résultat requis, c'est-à-dire le croisement de la MA, est atteint ?
-Aleks-: Le signe "ou" ne fonctionne pas - la condition dit que soit elle atteint 1000 barres, soit elle se termine dès que le résultat souhaité est trouvé. Ou bien ce sera fini avant 1000 barres, si le résultat souhaité, c'est-à-dire le franchissement de la MA, est atteint ?
|| Par conséquent, même si i >= 1000, mais stop = 0, le cycle continuera et i continuera à s'incrémenter, ce qui entraînera des valeurs de MA incorrectes (au cas où il sortirait de l'historique). Et l'opérateur break est responsable de la fin de la boucle lorsque le résultat souhaité est trouvé ;
Tapochun: || Par conséquent, même si i >= 1000, mais stop = 0, la boucle continuera, i continuera à s'incrémenter, ce qui entraînera une valeur MA erronée (au cas où il y aurait une valeur aberrante dans l'historique). Et l'opérateur break est responsable de la fin de la boucle lorsqu'il trouve le résultat souhaité ;
Compris, merci pour la précision ! Je pensais que l'une des conditions serait fausse et que la boucle s'arrêterait...
Bonjour 2015.09.19_02:13AM MSC. Dans la fonction ArrayResize() de toute façon le compilateur écrit
en face de la taille du tableau -- virgule attendue, que vous écriviez int ou non. Si tu n'écris pas int, ça dit : "-.
Je l'ai changé sans type. Et j'ai supprimé la référence & et les crochets - ça a marché ! Avertissements : quand il a été écrit normalement, -- le compilateur a écrit : cache l'identifiant
déclaration de niveau global. Et lorsque j'ai supprimé la déclaration d'identifiant au niveau global, - a écrit
il écrit : "Error, undeclared identifier. Et j'ai changé les tableaux High[] et Low[] en HighP[] et LowP[]. Non
aidé. Le compilateur écrit la même chose. 02:27 MSC. Je joins un fichier de capture d'écran.
Bonjour 2015.09.19_02:13AM MSC. Dans la fonction ArrayResize() de toute façon le compilateur écrit
en face de la taille du tableau -- virgule attendue, que vous écriviez int ou non. Si vous n'écrivez pas int, il dit : "-.
"sans type. Et j'ai enlevé la référence & et les crochets - ça a aidé ! Avertissements : quand il a été écrit normalement, -- le compilateur a écrit : cache l'identifiant
déclaration de niveau global. Mais lorsque j'ai supprimé la déclaration d'identifiant au niveau global, - a écrit
il écrit : "Error, undeclared identifier. Et j'ai changé les tableaux High[] et Low[] en HighP[] et LowP[]. Non
aidé. Le compilateur écrit la même chose. 02:27 MSC. Je joins le fichier de capture d'écran.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Pouvez-vous me dire ce que je fais de mal ?
J'ai besoin de calculer le nombre de barres qui se sont écoulées depuis que le prix a traversé la MA pour la dernière fois - sans compter la barre zéro.
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);
}
Pouvez-vous me dire ce que je fais de mal ?
Vous devez - compter le nombre de barres qui se sont écoulées depuis que le prix a franchi la MA pour la dernière fois - sans compter la barre zéro.
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);
}
D'après ce que je comprends, une fois que vous avez identifié le croisement et fixé le stop=1, il y a une sortie immédiate du cycle. Ok, alors vous devez aller plus loin et vous souvenir du numéro de la bougie où le croisement a eu lieu. I.e.
C'est plus facile de l'écrire soi-même :
C'est vous qui avez identifié le numéro de la bougie. Si le nombre = 2 et que l'on ne tient pas compte de l'actuel, alors à partir du moment du croisement, une bougie a été formée (ou interprétez-le comme vous voulez).
D'après ce que je comprends, une fois que vous avez identifié le croisement et fixé le stop=1, il y a une sortie immédiate du cycle. OK, alors vous devez aller plus loin et vous souvenir du numéro de la bougie où le croisement a eu lieu. I.e.
C'est plus facile de l'écrire soi-même :
C'est vous qui avez identifié le numéro de la bougie. Si le nombre = 2 et que l'on ne tient pas compte de l'actuel, alors une bougie s'est formée depuis le croisement (bon, ou interprétez-le comme vous voulez).
Merci, c'est comme ça que ça a marché pour moi.
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;
}
}
}
Pouvez-vous me dire s'il s'agit d'une figurine de test réaliste ? Et est-ce un bon ou un mauvais résultat pour une année avec une dépo de 3000 $ ?
Merci, c'est comme ça que ça s'est passé pour moi.
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;
}
}
}
Vous ne devriez pas l'écrire de cette façon, car s'il n'y a pas eu de croisement au cours des 1000 dernières mesures, premièrement, la boucle continuera, et deuxièmement, il peut y avoir une boucle/erreur, car si l'histoire se termine et qu'il n'y a pas de croisement, il n'y aura pas de sortie de la boucle, car Stop = 0. Il est préférable de l'écrire de la façon dont je l'ai mentionné ci-dessus.
Vous ne devriez pas l'écrire de cette façon, car s'il n'y a pas eu de croisement pendant les 1000 dernières mesures, premièrement, le cycle continuera, et deuxièmement, il peut tourner en boucle/erreur, car si l'histoire se termine et qu'aucun croisement ne se produit, il n'y aura pas de sortie du cycle, car Stop = 0. Il est préférable de l'écrire de la façon dont je l'ai mentionné ci-dessus.
Le signe "ou" ne fonctionne pas - la condition dit que soit elle atteint 1000 barres, soit elle se termine dès que le résultat souhaité est trouvé. Ou bien ce sera fini avant 1000 barres, si le résultat souhaité, c'est-à-dire le franchissement de la MA, est atteint ?
|| Par conséquent, même si i >= 1000, mais stop = 0, la boucle continuera, i continuera à s'incrémenter, ce qui entraînera une valeur MA erronée (au cas où il y aurait une valeur aberrante dans l'historique). Et l'opérateur break est responsable de la fin de la boucle lorsqu'il trouve le résultat souhaité ;
Bonjour 2015.09.19_02:13AM MSC. Dans la fonction ArrayResize() de toute façon le compilateur écrit
en face de la taille du tableau -- virgule attendue, que vous écriviez int ou non. Si tu n'écris pas int, ça dit : "-.
Je l'ai changé sans type. Et j'ai supprimé la référence & et les crochets - ça a marché !
Avertissements : quand il a été écrit normalement, -- le compilateur a écrit : cache l'identifiant
déclaration de niveau global. Et lorsque j'ai supprimé la déclaration d'identifiant au niveau global, - a écrit
il écrit : "Error, undeclared identifier. Et j'ai changé les tableaux High[] et Low[] en HighP[] et LowP[]. Non
aidé. Le compilateur écrit la même chose. 02:27 MSC. Je joins un fichier de capture d'écran.
Bonjour 2015.09.19_02:13AM MSC. Dans la fonction ArrayResize() de toute façon le compilateur écrit
en face de la taille du tableau -- virgule attendue, que vous écriviez int ou non. Si vous n'écrivez pas int, il dit : "-.
"sans type. Et j'ai enlevé la référence & et les crochets - ça a aidé !
Avertissements : quand il a été écrit normalement, -- le compilateur a écrit : cache l'identifiant
déclaration de niveau global. Mais lorsque j'ai supprimé la déclaration d'identifiant au niveau global, - a écrit
il écrit : "Error, undeclared identifier. Et j'ai changé les tableaux High[] et Low[] en HighP[] et LowP[]. Non
aidé. Le compilateur écrit la même chose. 02:27 MSC. Je joins le fichier de capture d'écran.
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie
Questions des débutants
Karputov Vladimir, 2015.09.17 18:46