Actualisation KO de Stop loss lors de pyramidage
Forums › ProRealTime forum Français › Support ProOrder › Actualisation KO de Stop loss lors de pyramidage
- This topic has 12 replies, 2 voices, and was last updated 5 years ago by Nicolas.
-
-
07/30/2019 at 10:20 PM #103836
Bonjour,
Je ne comprends pas l’exécution en PJ de Backtest.
On y voit un premier achat, puis 2 pyramidage.
Lors du premier achat, un stoploss est mis à 2*ATR.
Puis lors de chaque pyramidage, un stoploss est remis au min. entre le précédent 2*ATR et nouvel 2*ATR (vu que l’ATR évolue entre chaque achat).
Dans mon exemple, la distance de mon stoploss ne change pas (car l’ATR augmente).Sauf que, on voit qu’à la vente, ce n’est pas le stoploss qui est touché, mais un ordre de vente que j’ai codé, basé sur d’autres conditions.
Hors, le stoploss était sensé être plus haut…
C’est comme si le prix correspondant à ma distance de stop loss souhaitée n’était pas recalculé par Prorealtime.
Sauf que moi, je veux qu’il me recalcule mon prix de stop par rapport à mon dernier achat ! 🙁Voyez-vous une erreur dans l’extrait de code suivant qui expliquerait le phénomène ?
Merci d’avance.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374// variables :// Risk = 2// S1EntryMAPeriod = 20// S1ExitMAPeriod = 10// seuilMACD = 0.1DEFPARAM CumulateOrders = True // Cumul des positions désactivéONCE S1LongN = 0ONCE S1LongNbPyramid = 0ONCE S1ShortN = 0ONCE S1ShortNbPyramid = 0ONCE S2LongN = 0ONCE S2LongNbPyramid = 0ONCE stopDist = 0capital = CapitalInitialif REINVEST>0 thencapital = CapitalInitial + strategyprofitendifONCE AdjustedRisk = RiskN = TR(close)trendMA = Average[50](close)macdHisto = MACD[12,26,9](close)ca1 = (close > highest[S1EntryMAPeriod](high)[1])// position précédente est gagnanteS1LongFilter = (S1LongN>0 and positionperf(1) > 0)IF Not LongOnMarket and ca1 and not S1LongFilter THEN//calcul de la taille de position en fonction du risk et de la volatilitériskOnTrade = capital * AdjustedRisk / 100nbSharesToBuy = riskOnTrade / (2*N)//achat de nbSharesToBuy arrondi inférieurBUY nbSharesToBuy SHARES ROUNDEDDOWN AT MARKET// place un Hard Stop loss à 2NstopDist = 2*NSET STOP LOSS stopDist//réinitialise le nb de pyramidageS1LongNbPyramid=0//défini à combien on devra pyramiderS1LongN=NENDIF// pyramidage Long// ne pas pyramider contre-tendanceif LongOnMarket and close > (tradeprice(1)+S1LongN) and S1LongNbPyramid < NbMaxPyramid and Momentum[1](trendMA)>0 then//calcul de la taille de position en fonction du risk et de la volatilitériskOnTrade = capital * AdjustedRisk / 100nbSharesToBuy = riskOnTrade / (2*N)//achat de nbSharesToBuy arrondi inférieurBUY nbSharesToBuy SHARES ROUNDEDDOWN AT MARKET// place un Hard Stop loss au min de l'ancien 2N et du nouveau 2NstopDist = min(stopDist,2*N)SET STOP LOSS stopDistS1LongNbPyramid = S1LongNbPyramid + 1//défini à combien on devra pyramiderS1LongN=Nendif// Conditions pour fermer une position acheteusecca1 = (close < lowest[S1ExitMAPeriod](low)[1])IF LongOnMarket and (cca1 or macdHisto < (-1*seuilMACD)) THENSELL AT MARKETENDIF07/31/2019 at 2:14 PM #10388107/31/2019 at 3:13 PM #103888Bonjour,
En effet, c’est plus visuel.
Mais le SL est bien où je pensais (nouvelle image en PJ). Donc il aurait dû être touché.
Je ne vois vraiment pas ce qui peut clocher 🙁PS : j’ai mis “GRAPHONPRICE (tradeprice(1)-stopDist)” pour avoir le SL affiché au bon endroit.
07/31/2019 at 3:27 PM #103890J’ai essayé de remplacer, à l’endroit de mon pyramidage, mon SL par un ordre de vente STOP.
Et ça ne change rien…Du coup, j’ai essayé de supprimer mes conditions de vente, pour voir où le STOP est réellement touché.
En PJ ce que cela donne (STOP loss touché, vente au prix de 12.806).Mais je n’y compris toujours rien … on dirait que le stop est déplacé plus bas, mais je ne vois pas par quoi !
07/31/2019 at 3:46 PM #103894Cette fois, c’est sûr, il y a un bug.
J’ai mis en commentaire toutes les lignes “SET STOP LOSS” de tout le code, sauf celle qui est dans le IF de pyramidage, et le résultat reste le même qu’initialement.
Si je laisse ma condition d’Exit Long, le stop loss n’est pas touché.
Si je supprime ma condition d’Exit Long, le stop loss est touché, mais vendu à 12.806. Ce qui veut dire mon stop loss qui n’a été mis que 2 fois durant tout le backtest :- 1 première fois lors du 1er pyramidage à 12.89
- 1 deuxième fois lors du 2ème pyramidage à 13.466
Vu la vente à 12.806, c’est le premier stop loss qui a été touché.
Dit autrement, le second SET STOP LOSS n’est pas pris en compte par Prorealtime…
@Nicolas, de ton expérience, tu confirmes le phénomène ?
07/31/2019 at 4:02 PM #10389707/31/2019 at 4:10 PM #103898A chaque pyramidage, tu pourrais calculer ton nouveau niveau de stop et placer directement un ordre conditionnel de type stop également, comme ceci:
12monSL = close-stopDistSELL AT monSL STOPCet ordre conditionnel devrait être aussi placé en continu par la suite si tu es au marché. De cette façon tous les ordres se fermeront à monSL simultanément.
1 user thanked author for this post.
07/31/2019 at 5:14 PM #103903J’ai réussi à avoir les SL là où je voulais en codant avec des ordres de vente type Stop comme tu le mentionnes pour la technique de breakeven, c’est à dire en rajoutant en début de script :
123456ONCE stopPrice = 0if Not OnMarket thenstopDist = 0stopPrice = 0endifet en fin de script :
1234567if stopPrice > 0 thenif LongOnMarket thenSELL AT stopPrice STOPelsif ShortOnMarket thenEXITSHORT AT stopPrice STOPendifendifEt dans mon IF de pyramidage, je calcule le stopPrice = close – stopDist (ou close + stopDist pour le Short)
Enfin, c’est quand même pas top que Prorealtime ne prenne pas en compte correctement les STOP LOSS 🙁
ça serait plus simple que de bidouiller avec des ordres de vente à replacer à chaque bougie…En tout cas, merci beaucoup Nicolas !
08/01/2019 at 7:53 AM #10393408/01/2019 at 11:24 AM #103962Bonjour,
Je serais intéressé par ton analyse dans ce cas.
Ci-joint le fichier ITF, que j’ai un peu allégé pour faciliter ton analyse.
J’ai gardé une seule strategy Long sur 2, et supprimer la Short.le point qui me pose question est sur l’exécution du stop loss suite à pyramidage (premier ordre début décembre 2017, vente mi-janvier 2018)
Merci d’avance pour ton oeil expert.
08/01/2019 at 12:40 PM #10397208/01/2019 at 2:21 PM #10398108/01/2019 at 3:06 PM #103985Avec le code suivant, j’utilise donc un SET STOP LOSS stopDist et je graph sur le prix un Close-stopDist que j’update à chaque nouvelle ordre, la clôture du panier se fait correctement au bon niveau (plus ou moins compte tenu que je ne connais pas le prix d’ouverture réel à l’open suivant).
La ligne rouge semble bonne, qu’est ce qui te choque ?
-
AuthorPosts
Find exclusive trading pro-tools on