Comment coder ? - page 118

 

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--)

 
matrixebiz:
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

 
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.

 
matrixebiz:
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 clarifier

Matrixebiz,

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

 
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,

Hiachiever

Ok, donc si je mets if (int i=6 ; i>0 ; i++)

alors il commencera à 6, puis recommencera à incrémenter 1, 2, 3 ... 6, correct ?

 
matrixebiz:
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

Raison: