Overblog Suivre ce blog
Administration Créer mon blog
29 mai 2008 4 29 /05 /mai /2008 08:51

L'indicateur Supertrend dans Prorealtime.

Olivier Seban a créé l'indicateur Supertrend, il est présent directement sur la plateforme Prorealtime.  Beaucoup s'interrogent sur la toile à propos de la formule utilisée.  Il s'agit simplement d'afficher l'AverageTrueRange de longueur indiquée, multiplié par un coéfficient, le tout ajouté au cours médian : (H+L)/2.  Les paramètres par défaut sont : 3 pour le coéfficient et 10 pour la longueur.  Voici le code d'un programme qui retourne la courbe à l'identique :

avola=averagetruerange[bb](close)
avg=medianprice
up=avg+aa*avola
dn=avg-aa*avola
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=avg+aa*avola
endif
if flagh=1 then
    dn=avg-aa*avola
endif
if trend=1 then
    super=dn
else
    super=up
endif
return super

Il faut introduire aa (coéfficient) et bb (longueur) comme variables.  Et une vue du cac, on constate bien que le Supertrend se confond avec la courbe du programme :


Repost 0
Published by hk_lisse - dans Trailing Stop
commenter cet article
10 février 2008 7 10 /02 /février /2008 15:28

Trailing Stop : la cassure en trois blocs ou three line break.

 

Voici un indicateur qui donne le seuil de retournement pour le mode de représentation en cassure trois blocs.  Cet indicateur peut servir de trailing stop, il fonctionne avec le cours de cloture.  Un exemple sur le CAC, avec ensuite la représentation en "three line break" avec l'indicateur pour confirmation.

 

hk16.gif

hk17.gif

 

Et maintenant le code pour Prorealtime :

 

once t=1
once a0=(close)
once a1=(close)
once a2=(close)
once a3=(close)
if t=1 and close>a3 then
    a0=a1
    a1=a2
    a2=a3
    a3=close
elsif t=1 and close<a0 then
    t=-1
    a1=a3
    a0=a3
    a3=close
elsif t=-1 and close<a3 then
    a0=a1
    a1=a2
    a2=a3
    a3=close
elsif t=-1 and close>a0 then
    t=1
    a1=a3
    a0=a3
    a3=close
endif

return a0 coloured by t[1] as "cassure"

Repost 0
Published by hk_lisse - dans Trailing Stop
commenter cet article
10 février 2008 7 10 /02 /février /2008 14:51

Trailing Stop : le High/Low (suite).

 

Outre l'utilisation de la moyenne mobile, on peut employer le highest/high ou le lowest/low des x dernières barres.  La valeur de x varie de 3 à 5.  Un exemple sur ALU, avec x=5.

 

hk13-copie-1.gif

 

En mode SAR :

 

hk14.gif

 

Et le code, p représente le nombre de barres pris en compte :

 

once c=high
once f=-1
p=5
hi=highest[p](high)[1]
lo=lowest[p](low)[1]
if f=1 then
    if low<lo then
        f=-1
        c=hi
    else
        c=lo
    endif
else
    if high>hi then
        f=1
        c=lo
    else
        c=hi
    endif
endif
return c coloured by f

 

Une variante trouvée sur la toile, où n'est pas pris en compte les insidebar's :

 

hk15.gif

 

Avec le code :

 

once x=1
p=5
j=0
lo1=low[1]
hi1=high[1]
for i=1 to 100 do
    if low[i]<low[i+1] or high[i]>high[i+1] then
        lo1=min(lo1,low[i])
        hi1=max(hi1,high[i])
         j=j+1
    else
    endif
    if j=p then
        i=101
    else
    endif
next
if x=1 then
    if low<lo1        then
        x=-1
        c=hi1
    else
        c=lo1
        f=-1
    endif
else
     if high>hi1 then
        x=1
        c=lo1
    else
        c=hi1
        f=1
    endif
endif
return c coloured by f

Repost 0
Published by hk_lisse - dans Trailing Stop
commenter cet article
7 février 2008 4 07 /02 /février /2008 21:38

Trailing Stop : le High/Low Stop.

 

Une autre technique de trailing stop consiste à afficher une moyenne mobile des high/low.  C'est surtout utile en intraday ou encore pour gérer un trade sur l'unité de temps inférieure.  Une vue sur ALU avec une SMA5 :

 

hk11.gif

 

En version SAR :

 

hk12.gif

 

Et maintenant le code, p représente la longueur de la moyenne (à déterminer par backtest).   On peut  changer le critère de reverse par close, on peut également  ajouter ou soustraire à la courbe  un écart variant en fonction de la volatilité.

 

p=5 // longueur de la moyenne des extrêmes
hi=(average[p](high))
lo=(average[p](low))
if f=1 then
    if low<lo then // on peut utiliser close
        c=hi
        f=-1
    else
        c=lo
    endif
else
    if high>hi then // on peut utiliser close
        c=lo
        f=1
    else
        c=hi
    endif
endif
return c coloured by f

Repost 0
Published by hk_lisse - dans Trailing Stop
commenter cet article
7 février 2008 4 07 /02 /février /2008 21:34

Stop de volatilité en utilisant l'écart type.

 

Pour continuer, la série des codes Prorealtime concernant le trailing stop, je vous propose cette fois de travailler avec l'écart type.  Voici un graphe d'ALU avec affiché les extêmes du jour +/- un écart type et deux écarts types, celui-ci est calculé sur la moyenne à 10 jours des clotures.

 

hk9.gif

 

On peut utiliser ces courbes comme trailing stop, voici une copie d'écran en mode SAR, toujours pour ALU, avec le coéfficient 2.

 

hk10.gif

 

Et maintenant, le code (p représente la longueur de la moyenne mobile et b donne le coéfficient multiplicateur) :

 

a=STD[p](close)
b=2
if barindex<p then
    l1=low
    h1=high
else
    if low-a*b > l1 then
        l1=low-a*b
    else
    endif
    if low<l1 then
        l1=low-a*b
        c=h1
    else
    endif
    if high+a*b<h1 then
        h1=high+a*b
    else
    endif
    if high >h1 then
        h1=high+a*b
        c=l1
    else
    endif
endif
if c<low then
    c=l1
else
    c=h1
endif
if close<c then
    f=-1
else
    f=1
endif

return c coloured by f

Repost 0
Published by hk_lisse - dans Trailing Stop
commenter cet article
7 février 2008 4 07 /02 /février /2008 21:08

Van K. Tharp préconise un stop basé sur l'ATR.

 

Dans son livre "Trade Your Way To Financial Freedom" ("Réussir En Trading" pour la version française), Van K. Tharp préconise un trailing stop placé 3 ATR's sous la cloture.  Il prétend même qu'un système à entrées aléatoires utilisant ce type de stop est gagnant, il l'aurait testé sur un ensemble de 10 marchés sur une durée de 10 ans. 

Les intervenants sur cette file n'ont pas l'air tous d'accord : http://www.tradingblox.com/forum/viewtopic.php?t=3637

 

Voici le code pour Prorealtime de ce "volatility stop".  Les variables sont : d pour la période de l'ATR et c pour le coéfficient multiplicateur, on peut encore éventuellement faire varier la longueur de la moyenne exponentielle (ici 10).  En version SAR, cela permet de bien visualiser la tendance.

 

c=3
d=9
ONCE a=close
once b=1
if b=1 then
    if close >a then
        a= close
    else
    endif
    if close < a - (c*(ExponentialAverage[10](AverageTrueRange[d](close)))) then
        b=-1
        e=a
        a=close
        f=-1
    else
        e= a - (c*(ExponentialAverage[10](AverageTrueRange[d](close))))
        f=1
    endif
else
    if close < a then
        a=close
    else
    endif
    if close > a + (c*(ExponentialAverage[10](AverageTrueRange[d](close)))) then
        b=1
        e=a
        a=close
        f=1
    else
        e=a + (c*(ExponentialAverage[10](AverageTrueRange[d](close))))
        f=-1
    endif
endif

return e coloured by (f)

 

Et une vue de l'indicateur appliqué sur ALU :

hk8.gif

Repost 0
Published by hk_lisse - dans Trailing Stop
commenter cet article
7 février 2008 4 07 /02 /février /2008 20:54

Trailing Stop basé sur la volatilité : le Cynthia Kase Dev-Stop.

 

Voici le code pour Prorealtime, du Kase Dev-Stop, trailing stop basé sur la volatilité.  P1 représente le nombre de jours pris en compte pour le calcul de l'ATR.  P2, P3, P4 sont des coéfficients  pour les différents niveaux de stop.  On peut également se servir du système comme target.  La première ligne est appelée "warning"

 

p1=20
p2=1
p3=2.2
p4=3.3
ecart=0
ht=highest[2](high)
bs=lowest[2](low)
truer=max(max(ht-bs,abs(ht-close[2])),abs(bs-close[2]))
atruer=average[p1](truer)
for i=0 to p1-1 do
    ecart=ecart+square(truer[i]-atruer)
next
ecart=ecart/p1
sdev=sqrt(ecart)
dev1=close-atruer
dev2=close-atruer-sdev*p2
dev3=close-atruer-p3*sdev
dev4=close-atruer-p4*sdev
if dev1<dev1[1] and close > dev4[1] then
    dev1=dev1[1]
endif
if dev2<dev2[1] and close>dev4[1] then
    dev2=dev2[1]
endif
if dev3<dev3[1] and close>dev4[1] then
    dev3=dev3[1]
endif
if dev4<dev4[1] and close>dev4[1] then
    dev4=dev4[1]
endif
dev5=close+atruer
dev6=close+atruer+sdev*p2
dev7=close+atruer+p3*sdev
dev8=close+atruer+p4*sdev
if dev5>dev5[1] and close< dev8[1] then
    dev5=dev5[1]
endif
if dev6>dev6[1] and close< dev8[1] then
    dev6=dev6[1]
endif
if dev7>dev7[1] and close< dev8[1] then
    dev7=dev7[1]
endif
if dev8>dev8[1] and close< dev8[1] then
    dev8=dev8[1]
endif

return dev1,dev2,dev3,dev4, dev5, dev6, dev7, dev8

 

Avec un exemple de l'indicateur appliqué à ALU :

hk6.gif

 

On peut également s'en servir comme indicateur de tendance avec une fonction Stop And Reverse.

 

hk7.gif

 

Voici le code en version SAR :

 

p1=20
p2=1
p3=2.2
p4=3.3
ecart=0
ht=highest[2](high)
bs=lowest[2](low)
truer=max(max(ht-bs,abs(ht-close[2])),abs(bs-close[2]))
atruer=average[p1](truer)
for i=0 to p1-1 do
    ecart=ecart+square(truer[i]-atruer)
next
ecart=ecart/p1
sdev=sqrt(ecart)
dev1=close-atruer
dev2=close-atruer-sdev*p2
dev3=close-atruer-p3*sdev
dev4=close-atruer-p4*sdev
if dev1<dev1[1] and close > dev4[1] then
    dev1=dev1[1]
endif
if dev2<dev2[1] and close>dev4[1] then
    dev2=dev2[1]
endif
if dev3<dev3[1] and close>dev4[1] then
    dev3=dev3[1]
endif
if dev4<dev4[1] and close>dev4[1] then
    dev4=dev4[1]
endif
dev5=close+atruer
dev6=close+atruer+sdev*p2
dev7=close+atruer+p3*sdev
dev8=close+atruer+p4*sdev
if dev5>dev5[1] and close< dev8[1] then
    dev5=dev5[1]
endif
if dev6>dev6[1] and close< dev8[1] then
    dev6=dev6[1]
endif
if dev7>dev7[1] and close< dev8[1] then
    dev7=dev7[1]
endif
if dev8>dev8[1] and close< dev8[1] then
    dev8=dev8[1]
endif
if close>dev8[1] then
    flag=-1
else
    if close<dev4[1] then
        flag=1
    endif
endif
if flag=-1 then
    ind1=dev1
    ind2=dev2
    ind3=dev3
    ind4=dev4
    k=1
else
    ind1=dev5
    ind2=dev6
    ind3=dev7
    ind4=dev8
    k=-1
endif

return ind1 COLOURED BY k,ind2 coloured by k,ind3 coloured by k,ind4 coloured by k

Repost 0
Published by hk_lisse - dans Trailing Stop
commenter cet article