Bonjour,
Depuis ma découverte de PRT en aôut 2016, j’ai beaucoup progressé en terme de programmation.
Je profite de ce message pour remercier Nicolas et tous les participants du forum.
J’utilise à présent le stop trailing mis au point par Nicolas.
A présent, je cherche à le combiner avec un stop loss.
Si je mets en place le stop trailing qui se déclenche lorsque le dax gagne 15 points, cela n’est pas suffisant pour protéger la position quand le marché ne monte pas assez alors que je suis long.
Je voudrais donc coder un stop sur le prix d’entrée du marché si le dax gagne 10 points.
Exemple:
Achat dax à 10 000.
Le marché monte à 10 015, le stop trailing se met en place.
Par contre, le marché monte à 10 010 et redescend. Je voudrais déclencher dans ce cas-là, un ordre stop à 10 000 pour sortir flat.
J’ai essayé de combiner les 2 codes de Nicolas sans succès.
Merci si quelqu’un peut m’aider à modifier le code.
trailingstart = 15//trailing will start @trailinstart points profit
trailingstep = 15//trailing step to move the "stoploss"
minstop = 2//minimum allowed stop
priceleap = 1 //if price moves rapidly the stop will move till the set leapstop from close.
leapstop = 1//if price moves rapidly the stop will move till the set leapstop from close.
//reset the stoploss value
IF NOT ONMARKET THEN
newSL=0
ENDIF
//manage long positions
IF LONGONMARKET THEN
//first move (breakeven)
IF newSL=0 AND close-tradeprice(1)>=trailingstart*pipsize THEN
newSL = tradeprice(1)+trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND close-newSL>=trailingstep*pipsize AND close-newSL>=minstop*pipsize THEN
if close-newSL>=priceleap*pipsize then
newSL = close - leapstop
else
newSL = newSL+trailingstep*pipsize
endif
ENDIF
ENDIF
//manage short positions
IF SHORTONMARKET THEN
//first move (breakeven)
IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THEN
newSL = tradeprice(1)-trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND newSL-close>=trailingstep*pipsize AND newSL-close>= minstop*pipsize THEN
if newSL-close>=priceleap*pipsize then
newSL = close + leapstop
else
newSL = newSL-trailingstep *pipsize
endif
ENDIF
ENDIF
//stop order to exit the positions
IF newSL>0 THEN
SELL AT newSL STOP
EXITSHORT AT newSL STOP
ENDIF
trailingstart = 10//trailing will start @trailinstart points profit
trailingstep = 10 //trailing step to move the "stoploss"
//reset the stoploss value
IF NOT ONMARKET THEN
SL=0
ENDIF
//manage long positions
IF LONGONMARKET THEN
//first move (breakeven)
IF SL=0 AND close-tradeprice(1)>=trailingstart*pipsize THEN
SL = tradeprice(1)+trailingstep*pipsize
ENDIF
//next moves
IF SL>0 AND close-SL>=trailingstep*pipsize THEN
SL = SL+trailingstep*pipsize
ENDIF
ENDIF
//manage short positions
IF SHORTONMARKET THEN
//first move (breakeven)
IF SL=0 AND tradeprice(1)-close>=trailingstart*pipsize THEN
SL = tradeprice(1)-trailingstep*pipsize
ENDIF
//next moves
IF SL>0 AND SL-close>=trailingstep*pipsize THEN
SL = SL-trailingstep*pipsize
ENDIF
ENDIF
//stop order to exit the positions
IF SL>0 THEN
SELL AT SL STOP
EXITSHORT AT SL STOP
ENDIF
Le “first move”, c’est à dire la première fois que le stoploss bouge doit mettre ton ordre au breakeven. C’est à dire au prix d’entrée + trailingstep.
Si tu “trailingstep” a la même valeur que “trailingstart”, comme c’est le cas dans ton code, alors bien entendu ça ne fonctionner pas correctement. Pour mémoire, “trailingstart” est le seuil de gain en pips à partir duquel le trailing stop rentrera en fonctionnement. Je parle ici du fonctionnement de mon code original disponible dans le blog, et pas de celui de ton message .. désolé Dimanche soir, je n’ai pas pris le temps de bien l’analyser/comprendre 😉
Bonjour Nicolas.
Je pensais qu’on peut très bien mettre le même chiffre pour trailingstart et trailing step.
Si je mets 20 points pour les 2. Cela veut dire que si le dax (dans mon exemple)passe de 1000 à 1020, le stop se fait à 1020.
J’ai peut être mal interprété le code. Cela voudrait dire que à 1020, le stop se met à 1000 et montre tous les 20. Pourtant, ce n’est pas ce qui se passe dans le test en réel.
Pour ma part, j’aurais voulu mettre 2 stops différents mais cela n’est sans doute pas possible.
Pour un dax à 1000, je voulais la situation suivant si je suis long:
1010 points, je déclenche un stop sur 1000
1020 points, j’enclenche un nouveau stop à 1020 proche du niveau du marché (le stop de 1000 disparaît bien sûr)
1030, le stop remonte à 1030 au niveau du marché.
Je ne sais pas si je peux le faire à partir de votre code.
Finalement, tous les systèmes reposent sur la gestion des sorties. Sinon point de salut.