Questions des débutants MQL5 MT5 MetaTrader 5 - page 441
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
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