Bonjour,
J’ai récupéré un code du Supertrend sur ce site, je souhaiterais le modifier en intégrant une variation de la volatilité liée à l’ATR.
En effet, quand par exemple le ST est cassé à la baisse, au moment de la cassure la valeur de l’ATR est prise en compte, ainsi que la valeur du prix moyen (High/Low)/2, ensuite quand aucun prix moyen plus bas n’est réalisé par les bougies suivantes le ST ne varie pas.
Je souhaiterais que dans ces périodes ou le prix moyen ne marque pas de valeur plus basse (dans le cas d’un ST cassé à la baisse) le ST garde la valeur du prix moyen référence (bougies notées par un trait sur mon graphe) mais que la différence entre la valeur de l’ATR au moment de la cassure (bougies notées par un trait sur mon graphe) et l’ATR actuel de la bougie en court soit ajoutée ou retranchée de la valeur du ST.
Dans le cas d’un ST cassé à la baisse un prix moyen à la hausse ne doit pas etre pris en compte dans le calcul, seule une variation de l’ATR doit modifier la valeur du ST.
La dernière valeur de référence à prendre en compte pour le calcul (prix et ATR) étant le denier prix moyen le plus bas (cas du ST cassé à la baisse).
L’inverse sera vrai pour un ST cassé à la hausse.
En espérant avoir été clair, je joins un graphe et le code que je n’arrive pas à modifier.
Merci
//Supertrend
multiplier = 3
//Période ATR
moy = AverageTrueRange[14](Close)
price = (high+low)/2
up = price+(multiplier*moy)
dn = price-(multiplier*moy)
once trend=1
if close>up[1] then
trend=1
elsif close<dn[1] then
trend=-1
endif
if trend<0 and trend[1]>0 then
flag=1
else
flag=0
endif
if trend>0 and trend[1]<0 then
flagh=1
else
flagh=0
endif
if trend>0 and dn<dn[1] then
dn=dn[1]
endif
if trend<0 and up>up[1] then
up=up[1]
endif
if flag=1 then
up=price+multiplier*moy
endif
if flagh=1 then
dn=price-multiplier*moy
endif
if trend=1 then
mysupertrend=dn
else
mysupertrend=up
endif
if close> mysupertrend[1] then
color1=0
color2=255
color3=0
elsif close < mysupertrend[1] then
color1=255
color2=0
color3=0
endif
return mysupertrend coloured (color1,color2,color3) as "SuperTrend"
Et si la différence des deux ATR retourne une valeur négative ? J’ai l’impression qu’il y a quelque chose qui se mord la queue dans ce concept 🙂 , ou alors je n’ai pas bien compris, dans ce cas désolé.
Si pour la bougie référence l’ATR était de 15 et qu’actuellement l’ATR est de 20, je souhaite éloigner le ST des cours de 5 points, (ou de 5 à multiplier par le coef à voir par la suite).
Inversement si l’ATR a diminué, je souhaite que le ST se rapproche des cours.
et si actuellement on a 11 points d’ATR ?
Si pour la bougie référence l’ATR était de 15 et qu’actuellement l’ATR est de 11, je souhaite rapprocher le ST des cours de 4 points, (ou de 4 à multiplier par le coef à voir par la suite).
Quand les cours vont contre le ST, je veux que celui-ci varie en fonction de l’ATR, plus l’ATR est grand plus le ST s’éloigne et plus l’ATR décroit plus le ST se rapproche des cours.
Si ma demande n’est pas claire, je ferai le nécessaire pour la reformuler.
N’hésitez pas si besoin.
Merci
Ok c’est compris, voilà le code en question, sans facteur multiplicateur sur cette différence.
//Supertrend
multiplier = 3
if barindex>14 then
moy = AverageTrueRange[14](Close)
once firstATR = moy+1*pointsize
diffatr = moy-firstATR
//once diffatr = moy
price = (high+low)/2
up = price+(multiplier*moy)+diffATR
dn = price-(multiplier*moy)-diffATR
once trend=1
if close>up[1] then
trend=1
elsif close<dn[1] then
trend=-1
endif
if trend<0 and trend[1]>0 then
flag=1
firstATR=moy
else
flag=0
endif
if trend>0 and trend[1]<0 then
flagh=1
firstATR=moy
else
flagh=0
endif
if trend>0 and dn<dn[1] then
dn=dn[1]
endif
if trend<0 and up>up[1] then
up=up[1]
endif
if flag=1 then
up=price+multiplier*moy
endif
if flagh=1 then
dn=price-multiplier*moy
endif
if trend=1 then
mysupertrend=dn
else
mysupertrend=up
endif
endif
if close> mysupertrend[1] then
color1=0
color2=255
color3=0
elsif close < mysupertrend[1] then
color1=255
color2=0
color3=0
endif
return mysupertrend coloured (color1,color2,color3) as "SuperTrend2",firstATR,moy
Sans facteur, on note une toute petite variation, même en timeframe 1-minute. En trait plein le Supertend modifié, en pointillé la version originale.
C’était bien l’idée de ma demande.
Merci pour l’aide.
Bonjour,
Je reviens avec mon Supertrend, le ST2.
Je voudrais préciser ma demande car le code ne correspond pas exactement à mes attentes.
En noir le premier code ST1 avant modifs, en rouge/vert le second code ST2 avec variation liée à l’ATR.
Dans la partie droite du graphe quand les prix sont sous le ST1 et ST2 en rouge pour exemple :
La valeur de mon ST2 doit être identique à celle du ST1 à chaque nouveau MidPrice plus bas, on réactualise ST1 = ST2.
Par contre dans les plats de ST1 (pas de MidPrice plus bas) je souhaiterais que mon ST2 se rapproche des prix, de la valeur de l’ATR de référence (le dernier MidPrice le plus bas) – l’ATR Actuel.
Ou que le ST2 s’éloigne des prix en cas d’augmentation de l’ATR par rapport au dernier MidPrice plus bas.
Ce qui revient à utiliser dans les zones de plat le denier MidPrice le plus bas avec l’ATR actuel.
A chaque nouveau MidPrice plus bas le ST1 et le ST2 auront donc la même valeur, mais dans les zones plates le ST1 restera fixe alors que le ST2 évoluera selon la variation de l’ATR depuis le début de la zone plate.
Sur mon graphe, pour les dernières cotations, le ST2 devrait être sous le ST1, car l’ATR a baissé depuis le denier MidPrice.
En espérant avoir été clair,
Merci
Je ne sais pas si ma demande est claire, mais si je pouvais un début de piste pour modifier le dernier indicateur ça m’aiderait bien, merci.
Moi ce qui m’aiderait c’est 36h dans une journée, mais personne ne veut me les accorder 🙁
Je reviens dés que possible … ! 😉
Déjà 36h par semaine c’est pas tout le monde 🙂
J’avais juste peur de l’oubli, pardon pour cette impatience.
Bonne journée,
ça pourrait ressembler à cette ligne en pointillé non ? Si oui, il restera à coder les croisements avec le prix comme pour la ligne originale du SuperTrend.
//Supertrend
multiplier = 3
//Période ATR
moy = AverageTrueRange[14](Close)
price = (high+low)/2
up = price+(multiplier*moy)
dn = price-(multiplier*moy)
once trend=1
if close>up[1] then
trend=1
elsif close<dn[1] then
trend=-1
endif
if trend<0 and trend[1]>0 then
flag=1
else
flag=0
endif
if trend>0 and trend[1]<0 then
flagh=1
else
flagh=0
endif
if trend>0 and dn<dn[1] then
dn=dn[1]
endif
if trend<0 and up>up[1] then
up=up[1]
endif
if flag=1 then
up=price+multiplier*moy
endif
if flagh=1 then
dn=price-multiplier*moy
endif
if trend=1 then
ist=dn
else
ist=up
endif
if close> ist[1] then
color1=0
color2=255
color3=0
elsif close < ist[1] then
color1=255
color2=0
color3=0
endif
//final cut
top = ist=ist[1] and ist[1]<ist[2]
bottom = ist=ist[1] and ist[1]>ist[2]
if top or bottom then
lastprice=price
endif
if ist=ist[1] and close<ist[1] then
iline=lastprice+(multiplier*moy)//+(lastatr-moy)
elsif ist=ist[1] and close>ist[1] then
iline=lastprice-(multiplier*moy)
else
iline=ist
endif
return iline coloured (color1,color2,color3) style(dottedline,2), ist coloured (color1,color2,color3) as "SuperTrend"
C’est un oui, le pointillé traduit bien ma demande initiale.
Ok donc je pense que cette nouvelle version du code devrait faire l’affaire :
//Supertrend
multiplier = 3
//Période ATR
moy = AverageTrueRange[14](Close)
price = (high+low)/2
up = price+(multiplier*moy)
dn = price-(multiplier*moy)
once trend=1
//if close>up[1] then
//trend=1
//elsif close<dn[1] then
//trend=-1
//endif
if close>iline[1] then
trend=1
elsif close<iline[1] then
trend=-1
endif
if trend<0 and trend[1]>0 then
flag=1
else
flag=0
endif
if trend>0 and trend[1]<0 then
flagh=1
else
flagh=0
endif
if trend>0 and dn<dn[1] then
dn=dn[1]
endif
if trend<0 and up>up[1] then
up=up[1]
endif
if flag=1 then
up=price+multiplier*moy
endif
if flagh=1 then
dn=price-multiplier*moy
endif
if trend=1 then
ist=dn
else
ist=up
endif
if close> ist[1] then
color1=0
color2=255
color3=0
elsif close < ist[1] then
color1=255
color2=0
color3=0
endif
//final cut
top = ist=ist[1] and ist[1]<ist[2]
bottom = ist=ist[1] and ist[1]>ist[2]
if top or bottom then
lastprice=price
endif
if ist=ist[1] and close<ist[1] then
iline=lastprice+(multiplier*moy)//+(lastatr-moy)
elsif ist=ist[1] and close>ist[1] then
iline=lastprice-(multiplier*moy)
else
iline=ist
endif
return iline coloured (color1,color2,color3) style(dottedline,2)//, ist coloured (color1,color2,color3) as "SuperTrend"