Bonjour,
Je reviens vers vous pour un problème de TARGET PROFIT à présent !
Dans le code ci-dessous, si j’active la routine de short (ShortON = 1), le target profit réservé au position short se retrouve actif pour les longs…
Du coup le trailing stop n’est pas actif et les longs sont coupé au target profit qui ne devrait être actif pour les shorts ?
Si on passe les short à 0 le trailing stop pour les longs fonctionne …
// UT = 4 minutes
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
//Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
DEFPARAM FLATBEFORE = 070000
////////// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
DEFPARAM FLATAFTER = 213000
DEFPARAM Preloadbars = 3000
ShortON = 1 // Short activé ?
ONCE TSL = 1 // Use TSL?
// Evite l'ouverture de WS
Temps1 = time >= 150000 and time < 160000
MME100 = Average[100,1](close)
//// LONG ////
c1 = high > MME100 and close > open
c2 = close - open > 14// bougie de x point minimum
c3 = high[1] < MME100 and open[1] < close[1]
c4 = 1
c5 = 1
C13 = c1 and c2 and c3 and c4 and c5 and not Temps1 and NOT LongOnMarket
IF C13 THEN
BUY 1 CONTRACT AT MARKET
SET STOP LOSS (close-low) // SL sous le plus bas de la bougie précédente
ENDIF
IF ShortON then
///// SHORT ////
c6 = low < MME100 and close < open
c7 = open - close > 14// bougie de x point minimum
c8 = low[1] > MME100 and open[1] > close[1]
c9 = 1
c10 = 1
C14 = c6 and c7 and c8 and c9 and c10 and not Temps1 and NOT ShortOnMarket
IF C14 THEN
Sellshort 1 CONTRACT AT MARKET
SET STOP LOSS (close+high) // SL sur le plus haut de la bougie précédente
SET Target Pprofit 10 // Pas de stop suiveur car mouvement de baisse trop rapide
ENDIF
EndIf
// *****************************
IF TSL = 1 THEN
//trailing stop function
trailingstart = 8 //trailing will start @trailinstart points profit
trailingstep = 4 // 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 close-tradeprice(1)>=trailingstart THEN
newSL = tradeprice(1)+trailingstep
ENDIF
//next moves
IF newSL>0 AND close-newSL>=trailingstep THEN
newSL = newSL+trailingstep
ENDIF
Sell at newSL stop // Place un ordre de vente stop en guise de seuil de stopsuiveur
//graph newSL coloured (0,255,255) as "newSL"
ENDIF
//manage short positions
//IF SHORTONMARKET THEN
////first move (breakeven)
//IF newSL=0 AND tradeprice(1)-close>=trailingstart THEN
//newSL = tradeprice(1)-trailingstep
//ENDIF
////next moves
//IF newSL>0 AND newSL-close>=trailingstep THEN
//newSL = newSL-trailingstep
//ENDIF
//Exitshort at newSL stop // Place un ordre d'achat stop en guise de seuil de stopsuiveur
//graph newSL coloured (255,255,255) as "newSL SHORT"
//
//ENDIF
ENDIF
Je reproduis aussi cet effet, je cherche à comprendre et je reviens dés que possible 🙂
Il faut simplement reset le takeprofit, puisqu’en effet celui-ci restera actif à la cette valeur pour tous les ordres consécutifs.
Ajoute la ligne :
set target pprofit 0
à la ligne 37, après ton achat, pour bien lui coller un TP nul.
Cela ne fonctionne pas 🙁
J’utilise la version 10.3 de PRT (pour information)
Voici la nouvelle verison du code avec une petite optimisation mais qui reste le même sur globalement
// UT = 4 minutes
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
//Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
DEFPARAM FLATBEFORE = 081500
////////// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
DEFPARAM FLATAFTER = 213000
DEFPARAM Preloadbars = 1000
ShortON = 1 // Short activé ?
ONCE TSL = 1 // Use TSL?
// Evite l'ouverture de WS
Temps1 = time >= 151500 and time < 160000
MME100 = Average[100,1](close)
//// LONG-1 //// Une bougie de part et autre de la EMA100
c1 = high > MME100 and close > open
c2 = close - open > 12// bougie de x point minimum
c3 = high[1] < MME100 and open[1] < close[1] // bougie précédente verte également et inférieure à MME100
c4 = 1
c5 = 1
C13 = c1 and c2 and c3 and c4 and c5 and not Temps1 and NOT LongOnMarket
IF C13 THEN
BUY 1 CONTRACT AT MARKET
SET STOP LOSS (close-low) // SL sous le plus bas de la bougie précédente
ENDIF
//// LONG-2 //// Une bougie rebondit sur la MME100
d1 = close > open // bougie verte
d2 = open > MME100 and close > MME100
d3 = open[1] > MME100 and close[1] > MME100
d4 = low[1] < MME100 and low < MME100
d5 = close[1] > open[1]
D13 = d1 and d2 and d3 and d4 and d5 and not Temps1 and NOT LongOnMarket
IF D13 THEN
BUY 1 CONTRACT AT MARKET
Set Target pprofit 0
SET STOP LOSS (close-low) // SL sous le plus bas de la bougie précédente
graph (close-low) coloured(255,255,255) as "SL"
ENDIF
IF ShortON then
///// SHORT ////
c6 = low < MME100 and close < open
c7 = open - close > 14// bougie de x point minimum
c8 = low[1] > MME100 and open[1] > close[1]
c9 = 1
c10 = 1
C14 = c6 and c7 and c8 and c9 and c10 and not Temps1 and NOT ShortOnMarket
IF C14 THEN
Sellshort 1 CONTRACT AT MARKET
SET STOP LOSS (close+high) // SL sur le plus haut de la bougie précédente
SET Target Pprofit 10 // Pas de stop suiveur car mouvement de baisse trop rapide
ENDIF
EndIf
// *****************************
IF TSL = 1 THEN
//trailing stop function
trailingstart = 8 //trailing will start @trailinstart points profit
trailingstep = 4 // 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 close-tradeprice(1)>=trailingstart THEN
newSL = tradeprice(1)+trailingstep
ENDIF
//next moves
IF newSL>0 AND close-newSL>=trailingstep THEN
newSL = newSL+trailingstep
ENDIF
Sell at newSL stop // Place un ordre de vente stop en guise de seuil de stopsuiveur
//graph newSL coloured (0,255,255) as "newSL"
ENDIF
//manage short positions
//IF SHORTONMARKET THEN
////first move (breakeven)
//IF newSL=0 AND tradeprice(1)-close>=trailingstart THEN
//newSL = tradeprice(1)-trailingstep
//ENDIF
////next moves
//IF newSL>0 AND newSL-close>=trailingstep THEN
//newSL = newSL-trailingstep
//ENDIF
//Exitshort at newSL stop // Place un ordre d'achat stop en guise de seuil de stopsuiveur
//graph newSL coloured (255,255,255) as "newSL SHORT"
//
//ENDIF
ENDIF
Le fix que je t’ai indiqué fonctionne sur la version que tu as posté précédemment ! 🙄
Dans ce dernier code, que je n’ai pas testé, rapidement je vois que la ligne 77 est incohérente, tu ajoutes 2 prix pour calculer ta taille de stoploss ! 😀
C’est le même mode de calcul que pour les SL des longs, à la différence que je prends la somme du CLOSE et du HIGH pour le placer juste au dessus de la bougie baissière qui précède l’ordre de short ??
Exemple sur le DAX, si j’ajoute un Close (13226) et un High (13330), j’obtiens une valeur de stoploss de 26556 points ajouté à ton Close (puisque tu utilises SET STOP LOSS), donc un ordre sera placé à 39782 points. Je pense que c’est un peu … large ? 😆
oops en effet, (close-high) est plus pertinent 😀
J’ai trouvé ce qui n’allait pas dans ce deuxième code, il y a deux conditions distinctes d’achat, et je n’avais fait ta modif que sur une !!
A présent ça fonctionne, merci !!!
High-Close sinon tu auras encore un stoploss négatif comme au début.