Supertrend, intégrer une variation de la volatilité liée à l’ATR

Viewing 15 posts - 1 through 15 (of 23 total)
  • Author
    Posts
  • #90711 quote
    Ted21
    Participant
    Senior

    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"
    DAX-15-minutes.png DAX-15-minutes.png
    #90723 quote
    Nicolas
    Keymaster
    Master

    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é.

    #90726 quote
    Ted21
    Participant
    Senior

    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.

    #90746 quote
    Nicolas
    Keymaster
    Master

    et si actuellement on a 11 points d’ATR ?

    #90747 quote
    Ted21
    Participant
    Senior

    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.

    #90769 quote
    Ted21
    Participant
    Senior

    Si ma demande n’est pas claire, je ferai le nécessaire pour la reformuler.

    N’hésitez pas si besoin.
    Merci

    #90839 quote
    Nicolas
    Keymaster
    Master

    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.

    Ted21 thanked this post
    supertrend-variation-atr.png supertrend-variation-atr.png
    #90854 quote
    Ted21
    Participant
    Senior

    C’était bien l’idée de ma demande.

    Merci pour l’aide.

    #90927 quote
    Ted21
    Participant
    Senior

    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

    Capture.jpg Capture.jpg
    #91194 quote
    Ted21
    Participant
    Senior

    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.

    #91269 quote
    Nicolas
    Keymaster
    Master

    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 … ! 😉

    #91271 quote
    Ted21
    Participant
    Senior

    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,

    #91273 quote
    Nicolas
    Keymaster
    Master

    ç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"
    
    Ted21 thanked this post
    supertend-volatility.png supertend-volatility.png
    #91284 quote
    Ted21
    Participant
    Senior

    C’est un oui, le pointillé traduit bien ma demande initiale.

    #91292 quote
    Nicolas
    Keymaster
    Master

    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"
    
    supertrend-mods.png supertrend-mods.png
Viewing 15 posts - 1 through 15 (of 23 total)
  • You must be logged in to reply to this topic.

Supertrend, intégrer une variation de la volatilité liée à l’ATR


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
Ted21 @ted21 Participant
Summary

This topic contains 22 replies,
has 2 voices, and was last updated by Nicolas
6 years, 8 months ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 02/07/2019
Status: Active
Attachments: 8 files
Logo Logo
Loading...