Bonjour à tous,
Je pense que je vais adopter le foin comme nourriture principale… Je n’arrive pas à comprendre le comportement du code d’arrêt de fuite de Nicolas:
https://www.prorealcode.com/blog/trading/complete-trailing-stop-code-function/
Avec les améliorations d’ici:
https://www.prorealcode.com/topic/modified-nicolas-trailing-stop-code/
// Air Liquide Pivot H1
// PARAMETRES
DEFPARAM CUMULATEORDERS = FALSE
Atrailingstart = 0.05
Atrailingstep = 0.02
Astoploss = 0.01
ONCE nblot = 1
IF high[1] = close[1] AND close[1] > open[1] THEN
BUY nblot SHARES AT MARKET
SET STOP pLOSS Astoploss
ENDIF
//trailing stop function
trailingstart = Atrailingstart //20 //trailing will start @trailinstart points profit
trailingstep = Atrailingstep //trailing step to move the "stoploss"
//reset the stoploss value
IF NOT ONMARKET THEN
newSL=0
ENDIF
//manage long positions
IF LONGONMARKET THEN
//first move (breakeven)
IF newSL=0 AND high-tradeprice(1)>=trailingstart*pipsize THEN
newSL = tradeprice(1)+trailingstep*pipsize
IF newSL > close THEN
SELL AT MARKET
ENDIF
ENDIF
//next moves
IF newSL>0 AND high-newSL>=trailingstep*pipsize THEN
newSL = newSL+trailingstep*pipsize
IF newSL > close THEN
SELL AT MARKET
ENDIF
ENDIF
ENDIF
//stop order to exit the positions
IF newSL>0 THEN
SELL AT newSL STOP
ENDIF
GRAPH newSL
Mais le système ne bloque pas les fuites, preuves sur la capture d’écran.
Le plus haut est à 123,450 pour un achat à 123,007. Comme à partir de 0,05 de bénéfice je dois bouger le newSL ça voudrais dire qu’à partir de 123,057 le stoploss doit bouger tous les 0,02 mais il n’en ai rein et la vente se fait à 123,009!
de plus mon ex de condition contient un simple “high[1] = close[1] AND close[1] > open[1] ” et une seconde bougie rouge baissière lance tout de même un achat…!
J’ai pris là un code très simple sur une action au hasard pour comprendre ce code mais un truc m’échappe.
Où est mon erreur svp ?
Je pense que le problème vient de tes paramètres entre les lignes 5 et 7, tu les exprimes en prix, alors qu’ils sont attendus en points.
Tu utilises pLoss (qui attend une valeur en point), pour un prix il faut utiliser Loss.
Pour la fonction du trailing stop, elle utilise une conversion en multipliant la valeur de tes paramètres avec PointSize, hors comme tu envois déjà une valeur prix, le calcul devient faux, d’où ton incompréhension.