A l'intérieur que la pour où vous prenez les barres une par une vous devez utiliser la variable i partout au lieu de Current. Current n'est pas initialisé, il est donc égal à 0.
La façon la plus simple de voir cela est de mettre à l'intérieur du for au début ceci :
Current = i ;
Les flèches apparaîtront. N'oubliez pas non plus d'utiliser une valeur plus grande pour Sto_Lookback. Peut-être 100, 1000 ou quelque chose comme ça.
P.S Utilisez pour faire le for comme ceci c'est mieux de mon point de vue.
for (int i = Sto_Lookback ; i >0 ; i--){
...
}
Parce que c'est la façon normale pour les "barres" de venir 0 est le dernier. Cela vous éviterait d'autres problèmes plus tard. (par exemple - repeindre). C'est juste une idée.
Lors de mon backtesting, je reçois de temps en temps le message "OrderModify error1". D'après ce que je peux comprendre, cela signifie qu'il n'y a pas de changement, c'est-à-dire que les arguments de OrderModify() sont les mêmes que les paramètres correspondants de l'ordre modifié.
Cela pourrait être dû à un problème de double comparaison.
La question est de savoir comment je peux résoudre ce problème.
Voici la zone qui, selon moi, est à l'origine du problème :
hiachiever: C'est un raccourci dans le langage C pour incrémenter ou décrémenter une variable basée sur un nombre.
Par exemple, en Visual Basic, vous devriez écrire.
i = i + 1 pour incrémenter la variable i.
En revanche, en C, vous pouvez simplement écrire i++.
J'espère que cela vous aidera.
Hiachiever
Merci,
Donc si je mets if (int i=6 ; i>0 ; i++)
cela va "boucler" ou continuer à vérifier la valeur jusqu'à 6 maximum ? je ne suis pas sûr que ce soit correct. Et si j'utilise i-- ? Veuillez clarifier.
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.
pour CEHansen
Bonjour,
A l'intérieur que la pour où vous prenez les barres une par une vous devez utiliser la variable i partout au lieu de Current. Current n'est pas initialisé, il est donc égal à 0.
La façon la plus simple de voir cela est de mettre à l'intérieur du for au début ceci :
Current = i ;
Les flèches apparaîtront. N'oubliez pas non plus d'utiliser une valeur plus grande pour Sto_Lookback. Peut-être 100, 1000 ou quelque chose comme ça.
P.S Utilisez pour faire le for comme ceci c'est mieux de mon point de vue.
for (int i = Sto_Lookback ; i >0 ; i--){
...
}
Parce que c'est la façon normale pour les "barres" de venir 0 est le dernier. Cela vous éviterait d'autres problèmes plus tard. (par exemple - repeindre). C'est juste une idée.
Merci,
Victor
Oscillateur de volume Klinger
Je me suis renseigné sur cet indicateur, qui semble intéressant.
Cependant, il repose en partie sur le volume, qui n'est pas vraiment disponible sur le Forex.
Big Be
Erreur 1 de modification d' ordre
Lors de mon backtesting, je reçois de temps en temps le message "OrderModify error1". D'après ce que je peux comprendre, cela signifie qu'il n'y a pas de changement, c'est-à-dire que les arguments de OrderModify() sont les mêmes que les paramètres correspondants de l'ordre modifié.
Cela pourrait être dû à un problème de double comparaison.
La question est de savoir comment je peux résoudre ce problème.
Voici la zone qui, selon moi, est à l'origine du problème :
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen) ;
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy") ;
if (!EachTickMode) BarCount = Bars ;
IsTrade = False ;
continuer ;
}
//MoveOnce
if(MoveStopOnce && MoveStopWhenPrice > 0) {
if(Bid - OrderOpenPrice() >= Point * MoveStopWhenPrice) {
if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo) {
OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red) ;
if (!EachTickMode) BarCount = Bars ;
continuer ;
}
}
}
/Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen) ;
if (!EachTickMode) BarCount = Bars ;
continuer ;
}
}
}
} else {
//Fermeture
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) | (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange) ;
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell") ;
if (!EachTickMode) BarCount = Bars ;
IsTrade = False ;
continuer ;
}
//MoveOnce
if(MoveStopOnce && MoveStopWhenPrice > 0) {
if(OrderOpenPrice() - Ask >= Point * MoveStopWhenPrice) {
if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) {
OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red) ;
if (!EachTickMode) BarCount = Bars ;
continuer ;
}
}
}
/Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange) ;
if (!EachTickMode) BarCount = Bars ;
continuer ;
}
}
}
}
}
}
Question sur le code
Que signifie i++ ou i-- en codage ?
Ex : for (int i=5 ; i>0 ; i--)
Que signifie i++ ou i-- en codage ? par exemple : for (int i=5 ; i>0 ; i--)
Il s'agit d'un raccourci dans les langages basés sur le C pour incrémenter ou décrémenter une variable basée sur un nombre.
Par exemple, en Visual Basic, vous devriez écrire.
i = i + 1 pour incrémenter la variable i.
En revanche, en C, vous pouvez simplement écrire i++.
J'espère que cela vous aidera.
Hiachiever
C'est un raccourci dans le langage C pour incrémenter ou décrémenter une variable basée sur un nombre.
Par exemple, en Visual Basic, vous devriez écrire.
i = i + 1 pour incrémenter la variable i.
En revanche, en C, vous pouvez simplement écrire i++.
J'espère que cela vous aidera.
HiachieverMerci,
Donc si je mets if (int i=6 ; i>0 ; i++)
cela va "boucler" ou continuer à vérifier la valeur jusqu'à 6 maximum ? je ne suis pas sûr que ce soit correct. Et si j'utilise i-- ? Veuillez clarifier.
Merci,
donc si je mets if (int i=6 ; i>0 ; i++)
il va "boucler" ou continuer à vérifier la valeur jusqu'à 6 maximum ? je ne suis pas sûr que ce soit correct. Et si j'utilise i-- ? Merci de clarifierMatrixebiz,
si tu veux commencer à 6 et revenir à 0 alors utilise i--
(int i=6 ; i>0 ; i--)
Cela commencera à 6, décrémentera de 1 à chaque boucle tant que I > 0.
Si vous voulez inclure 0, utilisez i>=0.
Merci,
Hiachiever
Matrixebiz,
si vous voulez commencer à 6 et revenir à 0, utilisez i--
(int i=6 ; i>0 ; i--)
Cela commencera à 6, décrémentera de 1 à chaque boucle aussi longtemps que i > 0.
Si vous voulez inclure 0, utilisez i>=0.
A la vôtre,
HiachieverOk, donc si je mets if (int i=6 ; i>0 ; i++)
alors il commencera à 6, puis recommencera à incrémenter 1, 2, 3 ... 6, correct ?
Ok, donc si je mets if (int i=6 ; i>0 ; i++) alors il commencera à 6 puis, recommencera à incrémenter de 1, 2, 3 ... 6, correct ?
Pas tout à fait si ce que vous voulez faire ici est de finir à 6.
Dans ce cas, le code serait le suivant
Pour (int i=1 ; i<=6 ; i++)
Cela commencera à 1 et finira à 6 en incrémentant de 1 à chaque boucle.
Merci,
Hiachiever