Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
10 février 2008 7 10 /02 /février /2008 17:22

Le canal de régression linéaire ou canal de Raff.

 

Dans la continuité du code Prorealtime permettant le traçage de la droite de régression linéaire, voici les programmes pour les différents canaux.  En premier le canal de Raff, avec une vue du CAC, pour une droite de longueur=50.  Normalement, le canal de Raff trace 2 droites parallèles passant par l'extrême le plus éloigné de la droite (droites bleues).   Dans le programme, j'ai rajouté les parallèles passant par l'extrême le plus proche (droites jaunes).  Sur le graphe du CAC, c'est assez parlant.

 

hk19.gif

 

Il faut toujours définir K en variable pour la longeur du canal, le code :

 

det=DPO[k*2](close)
if det=det[1] and det[1]=det[2] and det[2]<>det[3] then
    flag=1
endif
n=(k*2)-4
p=(n/2)-1
d100=DPO[n](close)
moy100=close-d100
co=(moy100-moy100[1]+(close[p])/n)*n
h100=dpo[n](high)
moyh=high-h100
hi=(moyh-moyh[1]+(high[p])/n)*n
l100=dpo[n](low)
moyl=low-l100
lo=(moyl-moyl[1]+(low[p])/n)*n
if flag=1 and flag[1]=0 then
    somx=0
    somy=0
    somxx=0
    somxy=0
    for i=1 to k
        somx=somx+i
    next
    for i=0 to k-1
        somy=somy+co[i]
    next
    for i=1 to k
        somxx=somxx+(i*i)
    next
    for i=0 to k-1
        somxy=somxy+(co[i]*(k-i))
    next
    a=(k*somxy-somx*somy)/(k*somxx-somx*somx)
    b=(somy-a*somx)/k
    for i=0 to k-1
        ecah=hi[i]-a*(k-i)-b
        maxh=max(maxh,ecah)
        ecal=a*(k-i)+b-lo[i]
        maxl=max(maxl,ecal)
    next
endif
if flag=0 then
    reg=undefined
else
    j=j+1
    reg=a*j+b
endif
raff=max(maxh,maxl)
raffl=reg-raff
raffh=reg+raff
riff=min(maxh,maxl)
riffh=reg+riff
riffl=reg-riff
return reg,riffl,riffh,raffl,raffh

 

Le canal d'écart type.

 

hk20.gif

 

Le graphe du CAC avec le canal d'écart type, la longueur de la droite est toujours de 50 et le coéfficient pour l'écart type est de 1.50.  Il faut définir 2 variables, K pour la longueur du canal et Z pour le coéfficient de l'écart type.  Le code :

 

once j=0
det=DPO[k*2](close)
if det=det[1] and det[1]=det[2] and det[2]<>det[3] then
    flag=1
endif
n=(k*2)-4
p=(n/2)-1
d100=DPO[n](close)
moy100=close-d100
co=(moy100-moy100[1]+(close[p])/n)*n
if flag=1 and flag[1]=0 then
    somx=0
    somy=0
    somxx=0
    somxy=0
    for i=1 to k
        somx=somx+i
    next
    for i=0 to k-1
        somy=somy+co[i]
    next
    for i=1 to k
        somxx=somxx+(i*i)
    next
    for i=0 to k-1
        somxy=somxy+(co[i]*(k-i))
    next
    a=(k*somxy-somx*somy)/(k*somxx-somx*somx)
    b=(somy-a*somx)/k
    eca=STD[k](co)
endif
if flag=0 then
    reg=undefined
else
    j=j+1
    reg=a*j+b
endif
return reg,reg+z*eca,reg-z*eca

 

Le canal d'erreur type.

 

hk21.gif

 

Toujours une vue du CAC avec le canal d'erreur type de longueur 50 et de coéfficient 1.50.  Comme pour le programme précédent, il faut définir 2 variables, K pour la longueur du canal et Z pour le coéfficient multiplicateur de l'erreur type.  Le code :

 

once j=0
det=DPO[k*2](close)
if det=det[1] and det[1]=det[2] and det[2]<>det[3] then
    flag=1
endif
n=(k*2)-4
p=(n/2)-1
d100=DPO[n](close)
moy100=close-d100
co=(moy100-moy100[1]+(close[p])/n)*n
if flag=1 and flag[1]=0 then
    somx=0
    somy=0
    somxx=0
    somxy=0
    for i=1 to k
        somx=somx+i
    next
    for i=0 to k-1
        somy=somy+co[i]
    next
    for i=1 to k
        somxx=somxx+(i*i)
    next
    for i=0 to k-1
        somxy=somxy+(co[i]*(k-i))
    next
    a=(k*somxy-somx*somy)/(k*somxx-somx*somx)
    b=(somy-a*somx)/k
    eca=STe[k](co)
endif
if flag=0 then
    reg=undefined
else
    j=j+1
    reg=a*j+b
endif
return reg,reg+z*eca,reg-z*eca

edit le 04/03/08 : suite à l'amélioration apportée par un lecteur, le code est modifié (en rose).

Partager cet article

Repost 0

commentaires