Bonjour,
Mon programme est équipé d’un stop suiveur dont je souhaite qu’il fasse ceci :
-il est croissant
-dans les 4 premières bougies après l’ouverture de position, le stop est 2% sous le plus bas des 3 jours précédents
-ensuite, le stop est 1% sous le plus bas des 2 jours précédents
Malheureusement, cela entraine à l’exécution de nombreuses positions qui sont ouvertes et fermées instantanément (achat et vente en même temps, donc opération nulle) sans que je comprenne pourquoi, et alors même que cela part bien à la hausse et ne devrait pas occasionner de déclenchement de stop.
Merci d’avance pour votre aide.
Voici le code :
DEFPARAM CumulateOrders = False
// Paramètres
StochK = 14
StochD = 3
Slowing = 5
// Calcul Stochastique
MyStoch = Stochastic[StochK, StochD](Close)
MySignal = Average[Slowing](MyStoch)
Cond = (MyStoch CROSSES OVER MySignal)
// Variables
Once TrailingStop = 0
Once CapitalInitial = 10000
if not longonmarket then
TrailingStop = 0
Duree = 0
if Cond then
BUY 1 contracts at market
endif
endif
if LongOnMarket then
Duree = Duree + 1
if Duree <= 4 then
level = lowest[3](low)*0.98
else
level = lowest[2](low)*0.99
endif
TrailingStop=max(TrailingStop,level)
SET STOP PRICE TrailingStop
endif
Le set stop price est sans doute toujours actif au lancement du nouvel ordre d’achat.
Ajoute un set stop price 0 pour le réinitialiser.
Bonjour. Il vous suffit de déplacer l’instruction `set stop price` hors de la condition. Avec cette modification, vous verrez que cela fonctionne. De plus, d’après votre message, je crois comprendre que vous souhaitez placer le stop au plus bas des trois barres précédentes. C’est exactement ça.
lowest[3](low)[1]*0.98
Bref, je vous enverrai votre code avec uniquement la première modification.
DEFPARAM CumulateOrders = False
// Paramètres
StochK = 14
StochD = 3
Slowing = 5
// Calcul Stochastique
MyStoch = Stochastic[StochK, StochD](Close)
MySignal = Average[Slowing](MyStoch)
Cond = (MyStoch CROSSES OVER MySignal)
// Variables
Once TrailingStop = 0
Once CapitalInitial = 10000
if not longonmarket then
TrailingStop = 0
Duree = 0
if Cond then
BUY 1 contracts at market
endif
endif
if LongOnMarket then
Duree = Duree + 1
if Duree <= 4 then
level = lowest[3](low)*0.98
else
level = lowest[2](low)*0.99
endif
TrailingStop=max(TrailingStop,level)
// SET STOP PRICE TrailingStop
endif
SET STOP PRICE TrailingStop
graphonprice level coloured("blue")
graphonprice TrailingStop coloured("red")
Bonjour, et merci pour vos réponses rapides.
Effectivement, cela fonctionne mieux.
J’ai encore quelques soucis avec les décalages dans le temps (+ ou -1), notamment par rapport à la bougie d’ouverture.
J’y travaille.
Cordialement.
Je me rends compte à l’instant que le programme ne sors maintenant jamais sur la bougie d’achat, mais au mieux sur la suivante.
Pourtant, une entrée sur une grande englobante baissière rouge devrait le faire stopper pendant la bougie.
J’ai aussi rajouté une variable basée sur le prix d’achat, pour que cela ne descende jamais plus d’1% en-dessous.
J’imagine que la commande pour sortir sur la bougie d’achat n’est pas bien positionnée ?
DEFPARAM CumulateOrders = False
// Paramètres
StochK = 14
StochD = 3
Slowing = 5
// Calcul Stochastique
MyStoch = Stochastic[StochK, StochD](Close)
MySignal = Average[Slowing](MyStoch)
Cond = (MyStoch CROSSES OVER MySignal)
// Variables
Once CapitalInitial = 10000
if not longonmarket then
TrailingStop = 0
Duree = 0
if Cond then
BUY 1 contracts at market
prix = tradeprice
endif
endif
if LongOnMarket then
Duree = Duree + 1
if Duree <= 4 then
level = max(prix*0.99,lowest[3](low)[1]*0.98)
else
level = lowest[2](low)[1]*0.99
endif
TrailingStop=max(TrailingStop,level)
// SET STOP PRICE TrailingStop
endif
SET STOP PRICE TrailingStop
graphonprice level coloured("blue")
graphonprice TrailingStop coloured("red")
avec le code mieux indenté :
DEFPARAM CumulateOrders = False
// Paramètres
StochK = 14
StochD = 3
Slowing = 5
// Calcul Stochastique
MyStoch = Stochastic[StochK, StochD](Close)
MySignal = Average[Slowing](MyStoch)
Cond = (MyStoch CROSSES OVER MySignal)
// Variables
Once CapitalInitial = 10000
if not longonmarket then
TrailingStop = 0
Duree = 0
if Cond then
BUY 1 contracts at market
prix = tradeprice
endif
endif
if LongOnMarket then
Duree = Duree + 1
if Duree <= 4 then
level = max(prix*0.99,lowest[3](low)[1]*0.98)
else
level = lowest[2](low)[1]*0.99
endif
TrailingStop=max(TrailingStop,level)
// SET STOP PRICE TrailingStop
endif
SET STOP PRICE TrailingStop
//graphonprice level coloured("blue")
//graphonprice TrailingStop coloured("red")
La variable “prix” n’est pas connu avec tradeprice lors du lancement de l’ordre, puisque tradeprice sera évalué au prochain chandelier avec le vrai prix d’ouverture (ordre envoyé au prochain Open, pour mémoire). Donc plutôt utiliser:
prix = close
Close étant le dernier prix connu. Le next open pourrait être sensiblement différent toutefois.
Si tu utilises TRADEPRICE directement, alors tu utilises le dernier prix connu d’ouverture d’un ordre.
D’accord, merci pour votre réponse.