Overblog Suivre ce blog
Administration Créer mon blog
11 octobre 2008 6 11 /10 /octobre /2008 21:23

La distribution des cours à l'intérieur des bandes de Bollinger.

Voici donc, toujours inspiré du RSI Generator de Elhers, la distribution des cours à l'intérieur des bandes de Bollinger, fondement de l'Analyse Dynamique.  Je ne m'attendais pas à ce genre de courbe après tout ce que j'en avais lu.  Qu'en penser ?

En pratique, je me suis servi du %Bollinger comme indicateur borné.  La valeur -1 représente le cours sous la bande basse alors que le niveau 100 donne le cours supérieur ou égal à la bande haute.  Pour le CAC : 4905 barres vues, 305 en - et  354 en +, soit 6,2% et 7,2%.



Pour le S&P 500 : 14722 barres vues, 945 en - et 1183 en +, soit 6,4% et 8%



Et pour changer de secteur, l'EURUSD : 7446 barres vues, 589 en - et 668 en +, soit 7,9% et 8,9%.



Ci-dessous les codes utilisés avec Prorealtime.  Il faut d'abord créer un sous programme avec zz en variable (50 par défaut), puis le programme lui-même.  Attention, il faut permettre pour la variable zz , une valeur de -1 (dans la subroutine) !

/////////// sous prgm ////////////
lb=BollingerDown[20](typicalprice)
ub=BollingerUp[20](typicalprice)
psn=(close-lb)/(ub-lb)*100
if zz=-1 then
    cond=psn<zz+1
elsif zz=100 then
    cond=psn>=zz
else
    cond=psn>=zz and psn<zz+1
endif
if cond=1 then
    count=count+1
endif
return count

//////////// programme /////////////////
once zz=-1
dip=dpo[204](close)
if dip=dip[1] and dip[1]=dip[2] and dip[2]<>dip[3] then
    flag=1
    endif
test= CALL "sous prgm"[zz]
if flag=1 then
    total=test
    zz=zz+1
else
    total=undefined
endif
if total>0 then
    zx=zx+total
endif
if (zz-1) mod 10 =0 then
    col=1
else
    col=-1
endif
return total coloured by col,zx/15

Repost 0
9 octobre 2008 4 09 /10 /octobre /2008 21:54

ATD, la distribution de la volatilité.

Inspiré par le RSI Generator de Ehlers, voici les graphes de la distribution de la volatilité normalisée (150 périodes) pour respectivement, le S&P 500 (14577 barres) et le CAC 40 (5015 barres) :





Les deux graphes ont la même allure.  Pour tous les deux, la médiane se trouve pile sur le niveau 30.  Les valeurs de 0 et 100, élevées, sonr atteintes lorsque la volatilité dépasse le seuil minimum ou maximum calculé sur 150 périodes.

Du coup, j'ai trouvé le moyen de faire un programme qui ressort la médiane pour la volatilité normalisée.  J'essaye de l'optimiser, car il est un peu long mais rapide, ce sera l'objet d'un prochain article.
Repost 0
7 août 2008 4 07 /08 /août /2008 14:56

ATD : Le screener de Prorealtime montre ses limites.

Dans un précédent article, je m'interrogeais sur l'utilisation des indicateurs multi-UT's dévellopés jusqu'à présent.  Backtests puis recherche des situations favorables via le screener, aurait été le chemin normal.  J'avais un peu laissé de coté le projet, rebuté par l'incompatibilté apparente entre les éléments pour une utilisation dédiée au trading : différentes UT's, indicateurs, backtest et screener.

Suivant l'actualité, mardi dernier, je suis rentré sur MER.  La situation ATD me paraissait très favorable et j'ai essayé de voir si il y avait moyen de détecter ce setup : divergence sur le Stochastic Week appliqué au Daily.



Si le screener est fait avec la construction assistée par un clic sur l'indicateur de la fenêtre du bas, rien ne sort.  Idem avec la construction personnalisée et recopiage du code.  Le screener ne calculant tout simplement pas l'indicateur pour les barres antérieures.  Il faut dès lors procéder avec un nouveau programme du type :

For y=0 to 130
x=130-y

et faire les calculs sur les barres d'index [x].

Le Stochastic est un 14,5,5.  Ce qui donne un nombre de barres nécessaires de 14*5+5*5+5*5+1*5+1*5, puisqu'il y a 5 jours par chandelier week à reconstituer, soit 130 barres.  Normalement le screener étant limité à 256 barres, la détection devrait fonctionner.  Eh bien non !  Un message de boucle sans fin vient bloquer le programme.  En fait Prorealtime ne tolère que des programmes d'environ 900 lignes (je ne sais plus exactement) sinon un message de boucle sans fin intervient.  Ici, j'ai 130 x un certain nombre de lignes qui ne doit pas dépasser 7, sinon 7 x 130 étant supérieur à 900, le programme se bloque.

Tout cela pour dire que j'ai bien peur d'avoir programmé tous ces indicateurs ATD multi-UT's pour rien.  En effet à quoi sert un backtest si on ne peut pas détecter la situation par le screener ?  A méditer et à garder en mémoire pour éviter les impasses sur Prorealtime.
Repost 0
22 mars 2008 6 22 /03 /mars /2008 12:33

La volatilité normalisée en unités de temps hebdomadaire et mensuelle.

Dernier article sur les indicateurs, je vous présente le code des programmes qui retournent la volatilité normalisée pour l'unité de temps supérieure.  Voici une vue de JPM, avec l'indicateur weekly dans la seconde fenêtre : l'historigramme blanc/noir signale une cloture en dehors des bandes de Bollinger.  Pour la volatilité de référence qui est normalement de 150, j'ai simplement multiplié ce nombre par 5 et 21 pour l'indicateur week et month : les valeurs ne sont donc pas rigoureusement exactes.

hk106.gif
hk107.gif

Et maintenant le code pour Prorealtime :

////////// unité weekly : volatilité normalisée ////////////
once haut=high
once bas = low
haut=max(haut,high)
bas=min(bas,low)
if dayofweek < dayofweek[1] then
    a19=a18
    a18=a17
    a17=a16
    a16=a15
    a15=a14
    a14=a13
    a13=a12
    a12=a11
    a11=a10
    a10=a9
    a9=a8
    a8=a7
    a7=a6
    a6=a5
    a5=a4
    a4=a3
    a3=a2
    a2=a1
    a1=close[1]
    h19=h18
    h18=h17
    h17=h16
    h16=h15
    h15=h14
    h14=h13
    h13=h12
    h12=h11
    h11=h10
    h10=h9
    h9=h8
    h8=h7
    h7=h6
    h6=h5
    h5=h4
    h4=h3
    h3=h2
    h2=h1
    h1=haut[1]
    haut=high
    l19=l18
    l18=l17
    l17=l16
    l16=l15
    l15=l14
    l14=l13
    l13=l12
    l12=l11
    l11=l10
    l10=l9
    l9=l8
    l8=l7
    l7=l6
    l6=l5
    l5=l4
    l4=l3
    l3=l2
    l2=l1
    l1=bas[1]
    bas=low
    zz=zz+1
    prevec=vfin[1]
else
endif
tp1=(h1+l1+a1)/3
tp2=(h2+l2+a2)/3
tp3=(h3+l3+a3)/3
tp4=(h4+l4+a4)/3
tp5=(h5+l5+a5)/3
tp6=(h6+l6+a6)/3
tp7=(h7+l7+a7)/3
tp8=(h8+l8+a8)/3
tp9=(h9+l9+a9)/3
tp10=(h10+l10+a10)/3
tp11=(h11+l11+a11)/3
tp12=(h12+l12+a12)/3
tp13=(h13+l13+a13)/3
tp14=(h14+l14+a14)/3
tp15=(h15+l15+a15)/3
tp16=(h16+l16+a16)/3
tp17=(h17+l17+a17)/3
tp18=(h18+l18+a18)/3
tp19=(h19+l19+a19)/3
mb=((close+bas+haut)/3+tp1+tp2+tp3+tp4+tp5+tp6+tp7+tp8+tp9+tp10+tp11+tp12+tp13+tp14+tp15+tp16+tp17+tp18+tp19)/20
vola=((square((close+bas+haut)/3)+square(tp1)+square(tp2)+square(tp3)+square(tp4)+square(tp5)+square(tp6)+square(tp7)+
square(tp8)+square(tp9)+square(tp10)+square(tp11)+square(tp12)+square(tp13)+square(tp14)+square(tp15)+square(tp16)+
square(tp17)+square(tp18)+square(tp19))/20)-square(mb)// ATTENTION, à recoller au montage si nécessaire !!
ecart=sqrt(vola)
if zz<20 then
    mb=undefined
    lb=undefined
    ub=undefined
endif
lb=mb-(ecart*2)
ub=mb+(2*ecart)
vola=ecart/mb
vmin=lowest[750](vola)
vmax=highest[750](vola)
vfin=(vola-vmin)/(vmax-vmin)
condvol=vfin-prevec
if close<lb then
    flagb=-.1
else
    flagb=0
endif
if close>ub then
    flagh=-.1
else
    flagh=0
endif
return vfin coloured by condvol,flagb,flagh


///////////// unité mois : volatilité normalisée //////////////
once bas = low
once haut= high
haut=max(haut,high)
bas=min(bas,low)
jour=Date MOD 1000000
moi= jour mod 10000
jour=moi mod 100
moi=(moi-jour)/100
if moi <> moi[1] then
    a19=a18
    a18=a17
    a17=a16
    a16=a15
    a15=a14
    a14=a13
    a13=a12
    a12=a11
    a11=a10
    a10=a9
    a9=a8
    a8=a7
    a7=a6
    a6=a5
    a5=a4
    a4=a3
    a3=a2
    a2=a1
    a1=close[1]
    h19=h18
    h18=h17
    h17=h16
    h16=h15
    h15=h14
    h14=h13
    h13=h12
    h12=h11
    h11=h10
    h10=h9
    h9=h8
    h8=h7
    h7=h6
    h6=h5
    h5=h4
    h4=h3
    h3=h2
    h2=h1
    h1=haut[1]
    haut=high
    l19=l18
    l18=l17
    l17=l16
    l16=l15
    l15=l14
    l14=l13
    l13=l12
    l12=l11
    l11=l10
    l10=l9
    l9=l8
    l8=l7
    l7=l6
    l6=l5
    l5=l4
    l4=l3
    l3=l2
    l2=l1
    l1=bas[1]
    bas=low
    zz=zz+1
    prevec=vfin[1]
else
endif
tp1=(h1+l1+a1)/3
tp2=(h2+l2+a2)/3
tp3=(h3+l3+a3)/3
tp4=(h4+l4+a4)/3
tp5=(h5+l5+a5)/3
tp6=(h6+l6+a6)/3
tp7=(h7+l7+a7)/3
tp8=(h8+l8+a8)/3
tp9=(h9+l9+a9)/3
tp10=(h10+l10+a10)/3
tp11=(h11+l11+a11)/3
tp12=(h12+l12+a12)/3
tp13=(h13+l13+a13)/3
tp14=(h14+l14+a14)/3
tp15=(h15+l15+a15)/3
tp16=(h16+l16+a16)/3
tp17=(h17+l17+a17)/3
tp18=(h18+l18+a18)/3
tp19=(h19+l19+a19)/3
mb=((close+bas+haut)/3+tp1+tp2+tp3+tp4+tp5+tp6+tp7+tp8+tp9+tp10+tp11+tp12+tp13+tp14+tp15+tp16+tp17+tp18+tp19)/20
vola=((square((close+bas+haut)/3)+square(tp1)+square(tp2)+square(tp3)+square(tp4)+square(tp5)+square(tp6)+square(tp7)+
square(tp8)+square(tp9)+square(tp10)+square(tp11)+square(tp12)+square(tp13)+square(tp14)+square(tp15)+square(tp16)+
square(tp17)+square(tp18)+square(tp19))/20)-square(mb)// ATTENTION, à recoller au montage si nécessaire !!
ecart=sqrt(vola)
if zz<20 then
    mb=undefined
    lb=undefined
    ub=undefined
endif
lb=mb-(ecart*2)
ub=mb+(2*ecart)
vola=ecart/mb
vmin=lowest[3150](vola)
vmax=highest[3150](vola)
vfin=(vola-vmin)/(vmax-vmin)
condvol=vfin-prevec
if close<lb then
    flagb=-.1
else
    flagb=0
endif
if close>ub then
    flagh=-.1
else
    flagh=0
endif
return vfin coloured by condvol,flagb,flagh


Repost 0
16 mars 2008 7 16 /03 /mars /2008 18:35

Analyse Technique Dynamique :  références et  réflexions.

Il me reste encore à programmer l'indicateur de volatilité mais d'ores et déjà, je me pose quelques questions sur la suite.

Tout d'abord, un certain nombre de codes ont déjà été publiés sur la toile par Christian , j'en reprendrai probablement quelques uns.  C'est  ici.

Des travaux de vulgarisation existent également ici par Philippulus et ici par gl.

Le but au départ était de définir / backtester des setups provenant de l'ATD et pas nécéssairement le T1 ou la méthode dans son ensemble mais uniquement des "petits bouts" et cela en multi-ut.  Et tant mieux si au final j'arrive à recoller des morceaux.  J'ai longuement réfléchi au choix du triptyque, ce sera Daily / Weekly / Monthly bien que ce ne soit pas l'idéal.  Je souhaitais tester sur plusieurs actions mais en données intraday PRT ne fournit pas assez d'historiques et un test sur mono support (par exemple future) ne correspond pas à mon désir.  D'un autre coté, l'ut weekly deviendrait l'ut majeure........ Ce n'est pas trop pour me plaire.  En plus impossible d'appliquer les indicateurs monthly sur l'ut weekly !  Bref, les tests seront réalisés sur l'ut daily (la seule permettant l'affichage de tous les indicateurs multi-ut) mais j'hésite encore pour le choix de l'ut majeure entre semaine et jour (mais comment dans ce cas gèrer la sortie de position ?).  Un autre problème vient s'ajouter : le screener.  On est limité à 268 barres pour les historiques, donc à part la M7 les autres indicateurs monthly sont inutilisables en daily (et aussi en weekly du fait de la non-coordination semaine / mois).  Donc en résumé, c'est un vrai casse-tête !


bug_fck
Repost 0
11 mars 2008 2 11 /03 /mars /2008 19:49

Unités de temps hebdomadaire et mensuelle : le SAR et le Stochastic.

Avant-dernière série d'indicateurs, voici les codes pour Prorealtime du SAR et du Stochastic en hebdomadaire et en mensuel, avec une vue du CAC en daily où sont appliquées les courbes :

hk104.gif
hk105.gif

Et les codes des programmes :

//////////////// unité hebdomadaire stochastic /////////////
once haut=high
once bas = low
coef=2/6
haut=max(haut,high)
bas=min(bas,low)
if dayofweek < dayofweek[1] then
    h13=h12
    h12=h11
    h11=h10
    h10=h9
    h9=h8
    h8=h7
    h7=h6
    h6=h5
    h5=h4
    h4=h3
    h3=h2
    h2=h1
    h1=haut[1]
    haut=high
    l13=l12
    l12=l11
    l11=l10
    l10=l9
    l9=l8
    l8=l7
    l7=l6
    l6=l5
    l5=l4
    l4=l3
    l3=l2
    l2=l1
    l1=bas[1]
    bas=low
    zz=zz+1
    plusb=min(l13,min(l12,min(l11,min(l10,min(l9,min(l8,min(l7,min(l6,min(l5,min(l4,min(l3,min(l2,l1))))))))))))
    plush=max(h13,max(h12,max(h11,max(h10,max(h9,max(h8,max(h7,max(h6,max(h5,max(h4,max(h3,max(h2,h1))))))))))))
    moyk=coef*osci[1]+(1-coef)*moyk
    moyd=coef*moyk+(1-coef)*moyd
endif
plusha=max(plush,haut)
plusba=min(plusb,bas)
osci=(close-plusba)/(plusha-plusba)*100
k=coef*osci+(1-coef)*moyk
d=coef*k+(1-coef)*moyd
kk=k
dd=d
if zz<19 then
    kk=undefined
    dd=undefined
endif
return kk coloured by kk-moyk,dd coloured by dd-moyd,50,20,80

///////////////// unité mois stochastic //////////////////
once haut=high
once bas = low
coef=2/6
haut=max(haut,high)
bas=min(bas,low)
if dayofweek < dayofweek[1] then
    h13=h12
    h12=h11
    h11=h10
    h10=h9
    h9=h8
    h8=h7
    h7=h6
    h6=h5
    h5=h4
    h4=h3
    h3=h2
    h2=h1
    h1=haut[1]
    haut=high
    l13=l12
    l12=l11
    l11=l10
    l10=l9
    l9=l8
    l8=l7
    l7=l6
    l6=l5
    l5=l4
    l4=l3
    l3=l2
    l2=l1
    l1=bas[1]
    bas=low
    zz=zz+1
    plusb=min(l13,min(l12,min(l11,min(l10,min(l9,min(l8,min(l7,min(l6,min(l5,min(l4,min(l3,min(l2,l1))))))))))))
    plush=max(h13,max(h12,max(h11,max(h10,max(h9,max(h8,max(h7,max(h6,max(h5,max(h4,max(h3,max(h2,h1))))))))))))
    moyk=coef*osci[1]+(1-coef)*moyk
    moyd=coef*moyk+(1-coef)*moyd
endif
plusha=max(plush,haut)
plusba=min(plusb,bas)
osci=(close-plusba)/(plusha-plusba)*100
k=coef*osci+(1-coef)*moyk
d=coef*k+(1-coef)*moyd
kk=k
dd=d
if zz<19 then
    kk=undefined
    dd=undefined
endif
return kk coloured by kk-moyk,dd coloured by dd-moyd,50,20,80

//////////////// unité hebdomadaire SAR ///////////////
once facteur =0.02
once tmpsar=low
once extreme=high
once tendance=1
once haut=high
once bas=low
once bas1=low
once haut1=high
bas=min(bas,low)
haut=max(haut,high)
if barindex>1 then
    if dayofweek<dayofweek[1] then
        bas2=bas1
        bas1=bas[1]
        haut2=haut1
        haut1=haut[1
        if tendance[1]=1 then
            extreme = max(extreme[1],haut1)
            if tmpsar[1] >bas1 then
                tendance =-1
                facteur=0.02
                tmpsar=extreme
                extreme=bas1
            else
                if extreme>extreme[1] and facteur <0.2 then
                    facteur=min(0.2,facteur+0.02)
                endif
                tmpsar=tmpsar[1]+facteur*(extreme-tmpsar[1])
                tmp=min(bas1,bas2)
                tmpsar=min(tmpsar,tmp)
            endif
        else
            extreme=min (extreme[1],bas1)
            if tmpsar[1]<haut1 then
                tendance=1
                facteur=.02
                tmpsar=extreme
                extreme=haut1
            else
                if extreme<extreme[1] and facteur<.2 then
                    facteur=min(.2,facteur+.02)
                endif
                tmpsar=tmpsar[1]+facteur*(extreme-tmpsar[1])
                tmp=max(haut1, haut2)
                tmpsar=max(tmpsar,tmp)
            endif
        endif
        haut=high
        bas=low
    endif
endif
return tmpsar coloured by tendance

/////////////// unité mois SAR //////////////////
once facteur =0.02
once tmpsar=low
once extreme=high
once tendance=1
once haut=high
once bas=low
once bas1=low
once haut1=high
bas=min(bas,low)
haut=max(haut,high)
jour=Date MOD 1000000
moi= jour mod 10000
jour=moi mod 100
moi=(moi-jour)/100
if moi<>moi[1] then
    if barindex>1 then
        bas2=bas1
        bas1=bas[1]
        haut2=haut1
        haut1=haut[1]
        if tendance[1]=1 then
            extreme = max(extreme[1],haut1)
            if tmpsar[1] >bas1 then
                tendance =-1
                facteur=0.02
                tmpsar=extreme
                extreme=bas1
            else
                if extreme>extreme[1] and facteur <0.2 then
                    facteur=min(0.2,facteur+0.02)
                endif
                tmpsar=tmpsar[1]+facteur*(extreme-tmpsar[1])
                tmp=min(bas1,bas2)
                tmpsar=min(tmpsar,tmp)
            endif
        else
            extreme=min (extreme[1],bas1)
            if tmpsar[1]<haut1 then
                tendance=1
                facteur=.02
                tmpsar=extreme
                extreme=haut1
            else
                if extreme<extreme[1] and facteur<.2 then
                    facteur=min(.2,facteur+.02)
                endif
                tmpsar=tmpsar[1]+facteur*(extreme-tmpsar[1])
                tmp=max(haut1, haut2)
                tmpsar=max(tmpsar,tmp)
            endif
        endif
        haut=high
        bas=low
    endif
endif
return tmpsar coloured by tendance
Repost 0
10 mars 2008 1 10 /03 /mars /2008 18:46

Unité de temps mensuelle : le MACD.

Toujours dans l'optique de screeners ou de backtests, voici le code pour Prorealtime du MACD "monthly" à afficher sur un graphe en "daily".  Une vue du CAC avec l'indicateur :

hk102.gif
hk103.gif

De par la  formule de la moyenne exponentielle, il faut attendre "un certain" nombre de barres pour que les données mensuelles et journalières coïncident très exactement.

////////////// MACD unité mois //////////////
once m2=close
once m1=close
jour=Date MOD 1000000
moi= jour mod 10000
jour=moi mod 100
moi=(moi-jour)/100
a=2/20
b=2/10
c=2/7
if moi<>moi[1] then
    m2=a*close[1]+(1-a)*m2
    m1=b*close[1]+(1-b)*m1
    dif1=m1-m2
    mdif=c*dif1+(1-c)*mdif
    zz=zz+1
endif
mm2=a*close+(1-a)*m2
mm1=b*close+(1-b)*m1
dif=mm1-mm2
mmdif=c*dif+(1-c)*mdif
macdmoi=dif-mmdif
ligne1=dif
ligne2=mmdif
if zz<19 then
    macdmoi=undefined
    ligne1=undefined
    ligne2=undefined
endif
return macdmoi,ligne1 coloured by ligne1-dif1,ligne2 coloured by ligne2-mdif,0

Et le code pour le MACD hebdomadaire :

/////////////// MACD unité hebdomadaire //////////////
once m2=close
once m1=close
a=2/20
b=2/10
c=2/7
if dayofweek<dayofweek[1] then
    m2=a*close[1]+(1-a)*m2
    m1=b*close[1]+(1-b)*m1
    dif1=m1-m2
    mdif=c*dif1+(1-c)*mdif
    zz=zz+1
endif
mm2=a*close+(1-a)*m2
mm1=b*close+(1-b)*m1
dif=mm1-mm2
mmdif=c*dif+(1-c)*mdif
macdhebdo=dif-mmdif
ligne1=dif
ligne2=mmdif
if zz<19 then
    macdhebdo=undefined
    ligne1=undefined
    ligne2=undefined
endif
return macdhebdo,ligne1 coloured by ligne1-dif1,ligne2 coloured by ligne2-mdif,0.

bug_fck
Repost 0
8 mars 2008 6 08 /03 /mars /2008 19:09

Unités de temps journalière et hebdomadaire : les bandes de Bollinger et les moyennes 7 et 23.

Sur le même principe que celui utilisé pour le code "monthly", voici les codes des programmes qui permettent de sortir les données hebdomadaires et journalières sur des unités de temps inférieures.

//////////////// unité de temps hebdomadaire /////////////
once haut=high
once bas = low
haut=max(haut,high)
bas=min(bas,low)
if dayofweek < dayofweek[1] then
    a22=a21
    a21=a20
    a20=a19
    a19=a18
    a18=a17
    a17=a16
    a16=a15
    a15=a14
    a14=a13
    a13=a12
    a12=a11
    a11=a10
    a10=a9
    a9=a8
    a8=a7
    a7=a6
    a6=a5
    a5=a4
    a4=a3
    a3=a2
    a2=a1
    a1=close[1]
    h19=h18
    h18=h17
    h17=h16
    h16=h15
    h15=h14
    h14=h13
    h13=h12
    h12=h11
    h11=h10
    h10=h9
    h9=h8
    h8=h7
    h7=h6
    h6=h5
    h5=h4
    h4=h3
    h3=h2
    h2=h1
    h1=haut[1]
    haut=high
    l19=l18
    l18=l17
    l17=l16
    l16=l15
    l15=l14
    l14=l13
    l13=l12
    l12=l11
    l11=l10
    l10=l9
    l9=l8
    l8=l7
    l7=l6
    l6=l5
    l5=l4
    l4=l3
    l3=l2
    l2=l1
    l1=bas[1]
    bas=low
    zz=zz+1
    prev7=moy7[1]
    prev23=moy23[1]
    prevmb=mb[1]
    prevub=ub[1]
    prevlb=lb[1]
endif
moy7=(close+a1+a2+a3+a4+a5+a6)/7
moy23=(close+a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14+a15+a16+a17+a18+a19+a20+a21+a22)/23
tp1=(h1+l1+a1)/3
tp2=(h2+l2+a2)/3
tp3=(h3+l3+a3)/3
tp4=(h4+l4+a4)/3
tp5=(h5+l5+a5)/3
tp6=(h6+l6+a6)/3
tp7=(h7+l7+a7)/3
tp8=(h8+l8+a8)/3
tp9=(h9+l9+a9)/3
tp10=(h10+l10+a10)/3
tp11=(h11+l11+a11)/3
tp12=(h12+l12+a12)/3
tp13=(h13+l13+a13)/3
tp14=(h14+l14+a14)/3
tp15=(h15+l15+a15)/3
tp16=(h16+l16+a16)/3
tp17=(h17+l17+a17)/3
tp18=(h18+l18+a18)/3
tp19=(h19+l19+a19)/3
mb=((close+bas+haut)/3+tp1+tp2+tp3+tp4+tp5+tp6+tp7+tp8+tp9+tp10+tp11+tp12+tp13+tp14+tp15+tp16+tp17+tp18+tp19)/20
vola=((square((close+bas+haut)/3)+square(tp1)+square(tp2)+square(tp3)+square(tp4)+square(tp5)+square(tp6)+square(tp7)+
square(tp8)+square(tp9)+square(tp10)+square(tp11)+square(tp12)+square(tp13)+square(tp14)+square(tp15)+square(tp16)+
square(tp17)+square(tp18)+square(tp19))/20)-square(mb)// ATTENTION, à recoller au montage si nécessaire !!
ecart=sqrt(vola)
ub=mb+(2*ecart)
lb=mb-(2*ecart)
if zz<7 then
    moy7=undefined
endif
if zz<23 then
    moy23=undefined
endif
if zz<20 then
    mb=undefined
    ub=undefined
    lb=undefined
endif
cond23=moy23-prev23
cond7=moy7-prev7
condmb=mb-prevmb
condub=ub-prevub
condlb=lb-prevlb

return moy7 coloured by cond7,moy23 coloured by cond23,mb coloured by condmb,ub coloured by condub,lb coloured by condlb

///////////////// unité de temps daily /////////////:
if dayofweek <> dayofweek[1] then
    a22=a21
    a21=a20
    a20=a19
    a19=a18
    a18=a17
    a17=a16
    a16=a15
    a15=a14
    a14=a13
    a13=a12
    a12=a11
    a11=a10
    a10=a9
    a9=a8
    a8=a7
    a7=a6
    a6=a5
    a5=a4
    a4=a3
    a3=a2
    a2=a1
    a1=dclose(1)
    h19=h18
    h18=h17
    h17=h16
    h16=h15
    h15=h14
    h14=h13
    h13=h12
    h12=h11
    h11=h10
    h10=h9
    h9=h8
    h8=h7
    h7=h6
    h6=h5
    h5=h4
    h4=h3
    h3=h2
    h2=h1
    h1=dhigh(1)
    l19=l18
    l18=l17
    l17=l16
    l16=l15
    l15=l14
    l14=l13
    l13=l12
    l12=l11
    l11=l10
    l10=l9
    l9=l8
    l8=l7
    l7=l6
    l6=l5
    l5=l4
    l4=l3
    l3=l2
    l2=l1
    l1=dlow(1)
    zz=zz+1
    prev7=moy7[1]
    prev23=moy23[1]
    prevmb=mb[1]
    prevub=ub[1]
    prevlb=lb[1]
endif
moy7=(close+a1+a2+a3+a4+a5+a6)/7
moy23=(close+a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14+a15+a16+a17+a18+a19+a20+a21+a22)/23
tp1=(h1+l1+a1)/3
tp2=(h2+l2+a2)/3
tp3=(h3+l3+a3)/3
tp4=(h4+l4+a4)/3
tp5=(h5+l5+a5)/3
tp6=(h6+l6+a6)/3
tp7=(h7+l7+a7)/3
tp8=(h8+l8+a8)/3
tp9=(h9+l9+a9)/3
tp10=(h10+l10+a10)/3
tp11=(h11+l11+a11)/3
tp12=(h12+l12+a12)/3
tp13=(h13+l13+a13)/3
tp14=(h14+l14+a14)/3
tp15=(h15+l15+a15)/3
tp16=(h16+l16+a16)/3
tp17=(h17+l17+a17)/3
tp18=(h18+l18+a18)/3
tp19=(h19+l19+a19)/3
mb=((close+dlow(0)+dhigh(0))/3+tp1+tp2+tp3+tp4+tp5+tp6+tp7+tp8+tp9+tp10+tp11+tp12+tp13+tp14+tp15+tp16+tp17+tp18+tp19)/20
vola=((square((close+dlow(0)+dhigh(0))/3)+square(tp1)+square(tp2)+square(tp3)+square(tp4)+square(tp5)+square(tp6)+square(tp7)+
square(tp8)+square(tp9)+square(tp10)+square(tp11)+square(tp12)+square(tp13)+square(tp14)+square(tp15)+square(tp16)+square(tp17)+
square(tp18)+square(tp19))/20)-square(mb)// ATTENTION, à recoller au montage si nécessaire !!
ecart=sqrt(vola)
ub=mb+(2*ecart)
lb=mb-(2*ecart)
if zz<7 then
    moy7=undefined
endif
if zz<23 then
    moy23=undefined
endif
if zz<20 then
    mb=undefined
    ub=undefined
    lb=undefined
endif
cond23=moy23-prev23
cond7=moy7-prev7
condmb=mb-prevmb
condub=ub-prevub
condlb=lb-prevlb

return moy7 coloured by cond7,moy23 coloured by cond23,mb coloured by condmb,ub coloured by condub,lb coloured by condlb

Edit le 10/03/08, les conditions pour la coloration (en rose) sont modifiées.
Repost 0
5 mars 2008 3 05 /03 /mars /2008 18:07

Unité de temps mensuelle : les moyennes 7 et 23, les bandes de Bollinger.

Afin de pouvoir faire des backtests ou des screeners, voici les indicateurs mensuels à appliquer sur un graphe journalier.  Une vue du CAC daily :

hk100.gif
hk101.gif

Voici le code pour Prorealtime, il y a un seul programme qui sort les 5 valeurs (mettre celles dont on ne se sert pas en invisible) :

once haut=high
once bas = low
haut=max(haut,high)
bas=min(bas,low)
jour=Date MOD 1000000
moi= jour mod 10000
jour=moi mod 100
moi=(moi-jour)/100
if moi <> moi[1] then
    a22=a21
    a21=a20
    a20=a19
    a19=a18
    a18=a17
    a17=a16
    a16=a15
    a15=a14
    a14=a13
    a13=a12
    a12=a11
    a11=a10
    a10=a9
    a9=a8
    a8=a7
    a7=a6
    a6=a5
    a5=a4
    a4=a3
    a3=a2
    a2=a1
    a1=close[1]
    h19=h18
    h18=h17
    h17=h16
    h16=h15
    h15=h14
    h14=h13
    h13=h12
    h12=h11
    h11=h10
    h10=h9
    h9=h8
    h8=h7
    h7=h6
    h6=h5
    h5=h4
    h4=h3
    h3=h2
    h2=h1
    h1=haut[1]
    haut=high
    l19=l18
    l18=l17
    l17=l16
    l16=l15
    l15=l14
    l14=l13
    l13=l12
    l12=l11
    l11=l10
    l10=l9
    l9=l8
    l8=l7
    l7=l6
    l6=l5
    l5=l4
    l4=l3
    l3=l2
    l2=l1
    l1=bas[1]
    bas=low
    zz=zz+1
    prev7=moy7[1]
    prev23=moy23[1]
    prevmb=mb[1]
    prevub=ub[1]
    prevlb=lb[1]
else
endif
moy7=(close+a1+a2+a3+a4+a5+a6)/7
moy23=(close+a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14+a15+a16+a17+a18+a19+a20+a21+a22)/23
tp1=(h1+l1+a1)/3
tp2=(h2+l2+a2)/3
tp3=(h3+l3+a3)/3
tp4=(h4+l4+a4)/3
tp5=(h5+l5+a5)/3
tp6=(h6+l6+a6)/3
tp7=(h7+l7+a7)/3
tp8=(h8+l8+a8)/3
tp9=(h9+l9+a9)/3
tp10=(h10+l10+a10)/3
tp11=(h11+l11+a11)/3
tp12=(h12+l12+a12)/3
tp13=(h13+l13+a13)/3
tp14=(h14+l14+a14)/3
tp15=(h15+l15+a15)/3
tp16=(h16+l16+a16)/3
tp17=(h17+l17+a17)/3
tp18=(h18+l18+a18)/3
tp19=(h19+l19+a19)/3
mb=((close+bas+haut)/3+tp1+tp2+tp3+tp4+tp5+tp6+tp7+tp8+tp9+tp10+tp11+tp12+tp13+tp14+tp15+tp16+tp17+tp18+tp19)/20
vola=((square((close+bas+haut)/3)+square(tp1)+square(tp2)+square(tp3)+square(tp4)+square(tp5)+square(tp6)+square(tp7)+
square(tp8)+square(tp9)+square(tp10)+square(tp11)+square(tp12)+square(tp13)+square(tp14)+square(tp15)+square(tp16)+
square(tp17)+square(tp18)+square(tp19))/20)-square(mb)// ATTENTION, à recoller au montage si nécessaire !!
ecart=sqrt(vola)
ub=mb+(2*ecart)
lb=mb-(2*ecart)
if zz<7 then
    moy7=undefined
endif
if zz<23 then
    moy23=undefined
endif
if zz<20 then
    mb=undefined
    ub=undefined
    lb=undefined
endif
cond23=moy23-prev23
cond7=moy7-prev7
condmb=mb-prevmb
condub=ub-prevub
condlb=lb-prevlb

return moy7 coloured by cond7,moy23 coloured by cond23,mb coloured by condmb,ub coloured by condub,lb coloured by condlb

Edit le 10/03/08, les conditions de coloration sont simplifiées (en rose).fck
Repost 0
4 mars 2008 2 04 /03 /mars /2008 11:49

Le triptyque ATD.

Voici un exemple de représentation sur le Dow Jones :

hk97.gifhk98.gifhk99.gif

Avec dans l'ordre les unités de temps mois, semaines et jours.  Les barres -8 sont en rose et les -24 en bleu.  Le dernier indicateur est la volatilité normalisée (de paramètre 150).

  bug_fck
Repost 0