Overblog Suivre ce blog
Administration Créer mon blog
12 février 2008 2 12 /02 /février /2008 19:57

Divergences : Partir d'un cas concret, conclusions.

 

L'indicateur donne donc les divergences haussières du stochastic, que celles-ci précèdent ou accompagnent une divergence MACD.

 

Tout d'abord, je trouve qu'il y a relativement peu de signaux.  Je n'ai pas tenu compte comme annoncé, des reversaldays.  Cela aurait fait un filtre supplémentaire et donc encore réduit le nombre d'alertes.  Je pense qu'avec cet indicateur, il faut regarder également du côté de la volatilité.  Mais comment faire un indicateur pour reconnaître une tendance en ligne d'une bulle ?

Maintenant au niveau d'un backtest, j'ai planché la-dessus pendant 3 jours : avec quel stop, quel objectif et quel R/R ?

L'objectif premier paraît être la moyenne de Bollinger.  J'ai donc modifié le stochastic 14,3,5 en stochastic ATD et le MACD en 9,19,6 et éliminé les cas où le high du jour est supérieur à l'objectif.  Pour le stop, j'ai pris la bollinger inférieure ou un trailing-stop de volatilité suivant leurs positions.  Ayant le stop et l'objectif, j'ai paramètré un R/R de 1 (celui-ci doit pouvoir être optimisé AHMA) et de 3000$ au départ du trade.   J'ai appliqué tout ça sur la liste US50 de Prorealtime du 1/1/05 à ajd.  Voici une vue d'un trade (SLB) :

 

hk54.gifundefined

 

Dans l'ordre : l'EC, le cours avec le trade et le trailing-stop (en orange), le stochastic ATD avec le signal de divergence (historigramme noir), le MACD 9,19,6, l'indicateur de divergence possible MACD et enfin en mauve, l'alerte qui déclenche le trade.

 

Et les résultats complets :

 

 hk56.gif

 

Donc 19 trades sur un total de 37500 barres vues............  Je vous laisse continuer les tests, voici le code :

 

REM Capital de 100000, frais IB

REM Achat

indic1 = CALL "divergence atd"// mettre le nom de l'indicateur (cas concret partie 2) et changer les paramètres du stochastic et du MACD !
c1 = (indic1 > 0.0)
indic2 = Average[20](close)
c2 = (high < indic2)
indic3, ignored, ignored, ignored = CALL "stop volatilité"[10]// mette le nom de votre indicateur
indic7 = BollingerDown[20](close)
risk=max(indic7,indic3[1])
c3=(close-risk<=indic2-close)
nbre=3000/(close-risk)
IF c1 AND c2 AND c3 THEN
    BUY nbre shares AT MARKET THISBARONCLOSE
ENDIF

REM Vente
sell at indic2 limit
if close<risk then
    sell at market thisbaronclose
endif

Bon amusement.

Repost 0
Published by hk_lisse - dans Les Divergences
commenter cet article
12 février 2008 2 12 /02 /février /2008 19:18

Divergences : un cas concret, deuxième partie.

 

Première étape : le programme de divergence sur le stochastic.

------------------------------------------------------------------------------

 

J'ai un programme simple de détection des divergences haussières sur le stochastic.  Voici le problème que j'ai à résoudre :

 

hk50.gif

 

Normalement, le point bas sur les cours se fait alors que le stochastic est sous son signal.  Mais parfois, il se fait alors que le stochastic a déjà croisé à la hausse (exemple 3 et 1).  Il peut se faire également juste avant que le stochastic ne croise son signal à la baisse (exemple 2).

 

Je vous donne pour info, le programme actuel, pour vous montrer le cheminement (je dois maintenant l'améliorer pour tenir compte du problème rencontré) :

 

x=Stochastic[14,3](close)
y=average[5](x)
if x<y then
    lo=min(lo,x)
    lowco=min(lowco,low)
endif
if x CROSSES OVER y  then
    sto2=sto1
    sto1=lo
    lo=100
    p2=p1
    p1=lowco
    lowco=100000
else
endif
if p1<p2 and sto1 > sto2 and x crosses over y and x>x[1]  then
    sign=10
else
    sign=0
endif
return sign

 

Edit 9/12 à 19h23 :

 

Bon voici à quoi j'arrive sur le programme stochastic, si je trouve des anomalies, je modifierais........

 

x=Stochastic[14,3](close)
y=average[5](x)
if x<y then
    lo=min(lo,x)
    lowco=min(lowco,min(low,low[1]))
endif
if x CROSSES OVER y  then
    sto2=sto1
    sto1=lo
    lo=100
    p3=p1
    p2=min(p1,lowco1)
    p1=min(lowest[3](low),lowco)
    if p2=p1 then
        p2=min(p3,p4)
    endif
    lowco=100000
    lowco1=100000
endif
if x>y then
    p4=lowco1
    lowco1=min(lowco1,low)
endif

if p1<p2 and sto1 > sto2 and x crosses over y and x>x[1]  then
    sign=10
else
    sign=0
endif
return sign

 

Je prends en compte le low juste avant le croisement à la baisse (exemple 2),   le low de la bougie du croisement à la hausse (exemple 1), et le low après le croisement à la hausse si celui-ci n'est pas égale au low avant le croisement à la baisse.  (j'espère que vous suivez ?)

 

On peut filtrer l'alerte de divergence en testant la différence entre le stochastic de la barre actuelle et celui de la barre précedente (pour l'instant, je teste seulement x>x[1]).  On peut aussi exiger que le signal du stochastic soit à la hausse (croisement a+ ?) ou encore regarder le R/R avec la position par rapport aux bandes de Bollinger ou bien enfin tester le high de la bougie d'alerte.  Tout ça à mettre en place lors du backtest.........

 

Seconde étape : le programme de divergence potentielle sur le MACD.

--------------------------------------------------------------------------------------

 

 Voici le premier jet du programme de détection de divergences potentielles, le cours marque un plus bas et non le MACD.  Le code retourne également les divergences validées :

 

m=MACDline[9,19,6](close)
s=exponentialaverage[6](m)
if m<s then
    lo1=min(lo1,m)
    lowco=min(lowco,low)
endif
if m>s then
    lowco1=min(lowco1,low)
endif
if m CROSSES OVER s  then
    a=lo1
    lo1=100
    c=min(lowco,lowco1)
    lowco=100000
    lowco1=100000
    a1=a0
    a0=a
    c1=c0
    c0=c
endif
if m crosses over s and a0>a1 and c0<c1 then
    sign=1
else
    sign=0
endif
minmac=lowest[4](m)
minco=lowest[5](low)
if m<s and minco<c0 and minmac>a0 then
    pre=.5
else
    pre=0
endif

return sign,pre

 

Avec une vue de l'indicateur, l'historigramme noir retourne la divergence possible et la barre blanche signale la validation de la divergence (le MACD croise son signal) :

 

hk51.gif

 

-----------------------------------------------------------

 

Il vous suffit de combiner les 2 programmes : (divergence potentielle MACD or divergence validée MACD) and divergence stochastic.  Voici des exemples d'applications : en 1 un faux signal, en 2 la divergence stochastic est simultanée avec celle du MACD, et en 3 et 4, la divergence stochastic précède celle du MACD.

 

hk52.gif

 hk53.gif

A première vue, il y a peu de reversalday.  Je ferai néanmoins un article sur le sujet.  N'oubliez pas qu'il existe une file commentaires ici, j'attends vos remarques.

Repost 0
Published by hk_lisse - dans Les Divergences
commenter cet article
12 février 2008 2 12 /02 /février /2008 18:46

Trading Strategy Using Ehlers Filter.

 

Dans le fichier TSWorld05, téléchargeable sur le site de J. Ehlers, celui-ci présente et compare 8 filtres non-linéaires (ou moyennes mobiles adaptatives) :

 - KAMA (Kaufman Adaptative Moving Average).

 - VIDYA (Variable Index Dynamic Average).

 - MAMA (MESA Adaptative Moving Average).

 - Ehlers Filter.

 - Median Filter.

 - Median-MA Difference Filter.

 - FRAMA (Fractal Adaptative Moving Average).

 - Nonlinear Laguerre Filter.

 

L'auteur construit à partir de ces moyennes non-linéaires, une stratégie de trading fort simple.  Je reprends ici l'exemple de système donné par J. Ehlers dans son fichier.  Voici tout d'abord une vue d'un graphique (AMD) avec le "Ehlers Filter" (len=15) :

 

hk47.gif

 

Et le code pour Prorealtime, il faut introduire len (longueur du filtre) en variable :

 

rem len entre 5 et 25, conseillé entre 16 et 25
pr=MedianPrice
if barindex>1    then
    smooth=(pr+2*pr[1]+2*pr[2]+pr[3])/6
    dist=0
    for j= 1 to len-1 do
        dist=dist+SQUARE(smooth-smooth[j])
    next
    sumcoef=0
    num=0
    for i=0 to len-1 do
        sumcoef=sumcoef+dist[i]
        num=num+dist[i]*smooth[i]
    next
    filt=num/sumcoef  
endif
return filt

 

Ensuite, J. Ehlers applique à cette courbe une enveloppe fonction de la volatilité afin ,dit-il, de filtrer les périodes de range.  Dès que la courbe sort de l'enveloppe, un signal est donné.  Le système est de type SAR, on est tout le temps dans le marché.  Voici une vue de l'indicateur avec son enveloppe :

 

hk48.gif

 

Voici le code, on peut faire varier la largeur de l'enveloppe en introduisant le coefficient (frac) en variable :

 

rem len entre 5 et 25, conseillé entre 16 et 25
rem frac entre 2 et 15
pr=MedianPrice
if barindex>1    then
    smooth=(pr+2*pr[1]+2*pr[2]+pr[3])/6
    dist=0
    for j= 1 to len-1 do
        dist=dist+SQUARE(smooth-smooth[j])
    next
    sumcoef=0
    num=0
    for i=0 to len-1 do
        sumcoef=sumcoef+dist[i]
        num=num+dist[i]*smooth[i]
    next
    filt=num/sumcoef
   
    rng=0.1*Range+0.9*rng[1]
    val1=filt[1]+rng/frac
    val2=filt[1]-rng/frac
endif
return filt,val1,val2

 

Et le code pour la version en historigramme :

 

rem len entre 5 et 25, conseillé entre 16 et 25
rem frac entre 2 et 15
pr=MedianPrice
if barindex>1    then
    smooth=(pr+2*pr[1]+2*pr[2]+pr[3])/6
    dist=0
    for j= 1 to len-1 do
        dist=dist+SQUARE(smooth-smooth[j])
    next
    sumcoef=0
    num=0
    for i=0 to len-1 do
        sumcoef=sumcoef+dist[i]
        num=num+dist[i]*smooth[i]
    next
    filt=num/sumcoef
   
    rng=0.1*Range+0.9*rng[1]
    val1=filt[1]+rng/frac
    val2=filt[1]-rng/frac
endif
if filt crosses over val1 then
    flag=1
elsif filt crosses under val2 then
    flag=-1
endif
return flag

 

J'ai donc construit un système basé sur l'indicateur en historigramme.  Ehlers conseille d'ajouter un stop pour que la stratégie soit complète, je ne l'ai pas fait.  Tel système de trading peut , d'après l'auteur, être basé sur n'importe lequel des 8 filtres qu'il présente dans son fichier.  Voilà une vue du système sur AMD, optimisé et sans stop.

 

hk49.gif

 

Et pour être complet, le code en version "indicateur backtest", il faut entrer aa (len) et bb (frac) en variables à optimiser.  Attention, vu la construction du filtre, les tests peuvent prendre du temps !

 

REM Achat
indicator1 = CALL "ehlers filter historigramme"[aa, bb]
c1 = (indicator1 > 0.0)
IF c1 THEN
    BUY 10000 CASH AT MARKET THISBARONCLOSE
ENDIF
REM Vente
c2 = (indicator1 < 0.0)
IF c2 THEN
    SELL  AT MARKET THISBARONCLOSE
ENDIF
REM Vente à découvert
c3 = (indicator1 < 0.0)
IF c3 THEN
    SELLSHORT 10000 CASH AT MARKET THISBARONCLOSE
ENDIF
REM Rachat
c4 = (indicator1 > 0.0)
IF c4 THEN
    EXITSHORT  AT MARKET THISBARONCLOSE
ENDIF

 

 

Repost 0
12 février 2008 2 12 /02 /février /2008 18:39

Comment tester une stratégie sur un ensemble de valeurs ?

 

Une des lacunes du logiciel Prorealtime est de ne pas pouvoir tester les stratégies de trading sur un portefeuille d'actions.  Il faut à chaque fois relancer le backtest en changeant le support pour ainsi appliquer le système de trading aux titres un par un.  Avec une stratégie simple, je vais montrer comment on peut améliorer la chose.

 

La stratégie : achat lors du croisement A+ (de type fort) de la moyenne 7 simple avec la moyenne mobile 20 simple.  On prend position à la cloture de la barre si celle-ci est inférieure à 75% de la Bollinger Bandwdth et le high < à 85%, l'objectif est la Bollinger supérieure et le stop une cloture sous la moyenne 20 simple.  Cette stratégie sert juste d'exemple, rien ne dit qu'elle est gagnante, attention !

 

Le code :

 

REM Achat

indic1 = Average[7](close)
c1 = (indic1>indic1[1] and indic1[1]>indic1[2])
indic2=std[20](close)
indic3 = Average[20](close)
c2 = (indic3>indic3[1] and indic3[1]>indic3[2])
c10=(indic1 crosses over indic3)
indic5 = indic3+indic2
c3 = (close <= indic5 and close > indic3)
indic6 = BollingerUp[20](close)
c4 = (high <= ((indic6-indic5)*0.4)+indic5)
c11=(close>open)
IF c1 AND c2 AND c3 AND c4 and c10 and c11 THEN
    BUY 20000 CASH AT MARKET THISBARONCLOSE
ENDIF

REM Vente
sell at indic6 limit
c5 = (close<indic3)
IF c5 THEN
    SELL  AT MARKET THISBARONCLOSE
ENDIF

 

Une vue d'un trade sur  DELL, M7 haussière (en jaune), M20 haussière (en blanc), close<75% bbw (en ciel)  :

 

hk43.gif

 

L'astuce consiste à construire un indicateur qui fera office de backtest.  Voici le code de l'indicateur pour le backtest pris en exemple, on voit bien que les 2 courbes sont identiques.

 

hk44.gif

 

REM Achat
once cap=100000
indic1 = Average[7](close)
c1 = (indic1>indic1[1] and indic1[1]>indic1[2])
indic2=std[20](close)
indic3 = Average[20](close)
c2 = (indic3>indic3[1] and indic3[1]>indic3[2])
c10=(indic1 crosses over indic3)
indic5 = indic3+indic2
c3 = (close <= indic5 and close > indic3)
indic6 = BollingerUp[20](close)
c4 = (high <= ((indic6-indic5)*0.4)+indic5)
c11=(close>open)
IF c1 AND c2 AND c3 AND c4 and c10 and c11 THEN
    nbr=round (20000/close)
    cap=cap-(nbr*close)-5
    flag=1
ENDIF

REM Vente
if high>=indic6[1] and flag=1 then
    flag=0
    cap=cap+(nbr*indic6[1])-5
endif
IF close<indic3 and flag=1 tHEN
    flag=0
    cap=cap+(nbr*close)-5
endif
if flag=1 then
    capital=cap+(nbr*close)
else
    capital=cap
endif
return capital

 

Maintenant, je peux appliquer cet indicateur (comme critère) sur un screener.  De nouveau, on se retrouve confronté aux limites du logiciel : seules 30 valeurs sont affichées (je dois donc procéder en plusieures fois), le screener étant limité aux  254 derniéres barres, les résultats du backtest concernent ce même intervalle de temps.

 

Une vue du screener (on retrouve bien les données pour DELL, en 15ième position) :

 

hk45.gif

 

Une derniére astuce : si je souhaite connaître les signaux pour une certaine période comprise dans les 254 dernières barres, on peut faire un tri avec une boucle.  Ici, un exemple sur les 10 dernières barres (toujours avec la même stratégie) :

 

REM exemple de screener avec boucle
for i=0 to 9
    indic1 = Average[7](close)
    c1 = (indic1>indic1[1] and indic1[1]>indic1[2])
    indic2=std[20](close)
    indic3 = Average[20](close)
    c2 = (indic3>indic3[1] and indic3[1]>indic3[2])
    c10=(indic1 crosses over indic3)
    indic5 = indic3+indic2
    c3 = (close <= indic5 and close > indic3)
    indic6 = BollingerUp[20](close)
    c4 = (high <= ((indic6-indic5)*0.4)+indic5)
    c11=(close>open)
    IF c1 AND c2 AND c3 AND c4 and c10 and c11 THEN
        flag=1
    else
        flag=0
    ENDIF
         
    c15=(flag=1)
    criteria = volume
    c2=(volume>1000000)
    SCREENER[c15[i] and c2[i]] (criteria AS "volumei")
next

 

L'écran me retourne les valeurs avec un signal sur les 10 dernières barres (ça dure assez longtemps mais ça marche).  On voit que pour cette stratégie, il y en a eu très peu. 

 

hk46.gif

 

Repost 0
12 février 2008 2 12 /02 /février /2008 18:25

Backtest : existe-t-il une corrélation entre les bougies semaines et jours ?

 

La question a été posée, par exemple : pour une semaine positive, quelle chance (?) d'avoir un lundi positif également ?

 

Voici une vue du CAC avec l'indicateur, l'historigramme indique la corrélation.  Sur l'historique affiché, on a un taux de 46,222% après une semaine rouge et un taux de 43,719% après une semaine verte.

 

hk42.gif

 

Et le code de l'indicateur pour Prorealtime :

 

once ouv=open
dw=DayOfWeek
if dw<dw[1] then
    ouv1=ouv
    ouv=open
    clot=close[1]
    flag=1
else
    flag=0
endif
if clot>ouv1 and flag=1 then
    sem=1
    cc=cc+1
else
    if clot<ouv1 and flag=1 then
        sem=-1
        hh=hh+1
    else
        sem=0
    endif
endif
if flag=1 then
    cor=sem
else
    cor=0
endif
if cor=1 and close>open then
    aa=10
    bb=bb+1
endif
if cor=-1and close<open then
    aa=-10
    gg=gg+1
endif
if cor=0 then
    aa=0
endif

return  aa,(bb/cc)*100,(gg/hh)*100

 

Edit 8/12, 17h00 : afin de comparer avec les données de chrism, voici les résultats du test avec Prorealtime :

 

Le test est fait sur la première barre qui suit la semaine (donc le mardi, par exemple si le lundi est férié). 

 

Depuis le 1/1/1988 : semaine haussière => 1er jour vert à 50,439%,  semaine baissière => 1er jour vert à 55.414%.

Depuis le 1/1/2000 : semaine haussière => 1er jour vert à 46.606%,  semaine baissière => 1er jour vert à 55,959%.

Depuis le 1/1/2002 : semaine haussière => 1er jour vert à 46.377%,  semaine baissière => 1er jour vert à 54.386%. (résultats déjà donnés)

Repost 0
12 février 2008 2 12 /02 /février /2008 18:04

Copie d'un article publié originalement le 10/10/07 sur l'ancien Blog.

Black Monday : Prorealtime réécrit l'histoire !

 

Je souhaitais à j-9, parler de cette journée et pour bien me remémorer la séance, je vais faire un tour sur le graphe de Prorealtime.  Quelle ne fut pas ma surprise de voir que la chute de 508 points (22.7%) c'était transformée en baisse de 248 points (11.4%) soit la moitié !  Ce sont les vendeurs de l'époque, qui doivent être contents, ils perdent nettement moins !

 

La preuve par l'image :

 

hk40.gif

 

Et maintenant, le bon graphe :

 

hk41.gif

 

Ca fait un peu "jeu des 7 erreurs".

 

Comme de quoi, toujours vérifier ses données pour un backtest, une analyse ou un article.

 

PS : le screener sur US ne fonctionne pas pour l'instant non plus, c'est pas leur journée !

Repost 0
12 février 2008 2 12 /02 /février /2008 17:51

Exemple de l'utilisation de l'indicateur d'avantage sur Prorealtime.

 

Dans les conclusions du rapport GERARDIN de 2002, on peut lire que "la formulation du critère T1 peut être réduite à la proposition suivante : la volatilité est petite depuis 3-4 périodes et elle vient d'augmenter de 20-30% au moins".

 

Comme je ne sais pas ce qu'est une volatilité petite, je teste uniquement le critère d'augmentation  que je fixe à 30% pour cet exemple.  Néanmoins, visuellement, on peut constater que pour  avoir une augmentation de 30%, la volatilité doit être relativement basse.  On peut constater également que le signal d'augmentation de 30% intervient souvent après le T1 (en T2 ou T3).

 

Voici ce que donne l'écran pour 23 signaux avec le max d'historiques :

 

hk39.gif

On a les 3 derniers signaux et au final un rapport de : 3.942/2.2854=1.7249

 

On peut conclure que le signal brut en daily sur le CAC devrait être profitable.  Reste à tester sur d'autres valeurs, à ajouter les conditions de sorties (stop et takeprofit), faire varier les conditions du test (nombre de bougies après le signal, valeur de l'ATR, niveau du %) et affiner les conditions d'entrées.

Repost 0
12 février 2008 2 12 /02 /février /2008 17:22

Le marqueur de barre -8 et -24.

 

Un des derniers avantages du pack "analyse dynamique" était le marquage des barres -8 et -24, bien que l'on pouvait remédier à cela en affichant une ligne verticale à -8 et -24.  Voici un indicateur qui signale ces deux barres, vous pouvez le mettre à toutes les sauces (par exemple en utilisant l'indicateur de coloriage)..........  Un exemple sur le CAC avec la coloration du high/low (jaune=barre -8, blanc=barre -24) et retour en SAR pour les autres barres.  Dans la fenêtre du dessous, l'indicateur simple.

 

hk38.gif

 

Et maintenant le code pour Prorealtime de l'indicateur simple :

 

de16=DPO[16](close)
de48=DPO[48](close)
if de16=de16[1] and de16[1]=de16[2] and de16[2]<>de16[3] then
    flag8=1
else
    flag8=0
endif
if de48=de48[1] and de48[1]=de48[2] and de48[2]<>de48[3] then
    flag24=1
else
    flag24=0
endif

return flag8,flag24

Repost 0
Published by hk_lisse - dans Prorealtime Astuces
commenter cet article
12 février 2008 2 12 /02 /février /2008 17:20

Création de données : incidence sur les indicateurs.

 

Comment mesurer l'incidence des cours sur les indicateurs ?  Comment connaître la pente d'une tendance en ligne qui va produire en faux signal, une divergence de renversement ? 

 

Voici un programme pour Prorealtime qui permet de générer des figures, ce qu'il faut retenir c'est la philosophie de la construction de l'indicateur, à vous d'imaginer les patterns et d'étudier les conséquences sur les indics.   

 

Ici, j'ai créé une zone de range avec une sortie à la hausse de 10%, suivie par un retracement sur le Fibo 61.8 et un triangle ABCDE avec de nouveau une sortie haussière et un objectif théorique touché (c'est facile l'AT !).  J'ai ajouté le MACD et le STO dynamique, pour avoir un setup complet.

 

hk37.gif

 

Il faut d'abord identifier la valeur de BARINDEX sur la dernière barre en créant un indic simple : RETURN BARINDEX.

Une fois la valeur connue(ici : 4990), je la code dans le programme.  Reste encore à connaître le nombre de barres que l'on souhaite créer (ici : 49).  J'ai fait un petit prgm pour générer le range, il y a certainement moyen de faire mieux.

 

Après il faut appliquer les indicateurs classiques sur l'indicateur créé.  On peut imaginer inventer également open, high et low en plus de la close.

 

Voilà le code, juste pour info.

 

if barindex<4941 then
    //a=999
    b=SQRT(barindex*(b+1))
    b=abs((b-ROUND(b))*100)
    a=average[7]((b*2.5))+970
endif
if barindex=4941 then
    a=1000
endif
if barindex=4942 then
    a=1022
endif
if barindex=4943 then
    a=1040
endif
if barindex=4944 then
    a=1056
endif
if barindex=4945 then
    a=1070
endif
if barindex=4946 then
    a=1082
endif
if barindex=4947 then
    a=1092
endif
if barindex=4948 then
    a=1100
endif
if barindex=4949 then
    a=1085
endif
if barindex=4950 then
    a=1072
endif
if barindex=4951 then
    a=1061
endif
if barindex=4952 then
    a=1052
endif
if barindex=4953 then
    a=1045
endif
if barindex=4954 then
    a=1040
endif
if barindex=4955 then
    a=1038
endif
if barindex=4956 then
    a=1049
endif
if barindex=4957 then
    a=1059
endif
if barindex=4958 then
    a=1068
endif
if barindex=4959 then
    a=1076
endif
if barindex=4960 then
    a=1082
endif
if barindex=4961 then
    a=1087
endif
if barindex=4962 then
    a=1091
endif
if barindex=4963 then
    a=1080
endif
if barindex=4964 then
    a=1072
endif
if barindex=4965 then
    a=1066
endif
if barindex=4966 then
    a=1060
endif
if barindex=4967 then
    a=1055
endif
if barindex=4968 then
    a=1050
endif
if barindex=4969 then
    a=1048
endif
if barindex=4970 then
    a=1059
endif
if barindex=4971 then
    a=1064
endif
if barindex=4972 then
    a=1071
endif
if barindex=4973 then
    a=1073
endif
if barindex=4974 then
    a=1076
endif
if barindex=4975 then
    a=1079
endif
if barindex=4976 then
    a=1082
endif
if barindex=4977 then
    a=1075
endif
if barindex=4978 then
    a=1069
endif
if barindex=4979 then
    a=1065
endif
if barindex=4980 then
    a=1062
endif
if barindex=4981 then
    a=1060
endif
if barindex=4982 then
    a=1059
endif
if barindex=4983 then
    a=1058
endif
if barindex=4984 then
    a=1075
endif
if barindex=4985 then
    a=1090
endif
if barindex=4986 then
    a=1103
endif
if barindex=4987 then
    a=1113
endif
if barindex=4988 then
    a=1121
endif
if barindex=4989 then
    a=1127
endif
if barindex=4990 then
    a=1130
endif
return a

Repost 0
Published by hk_lisse - dans Prorealtime Astuces
commenter cet article
11 février 2008 1 11 /02 /février /2008 20:54

Astuce : comment colorier le graphique suivant un indicateur ?

 

Une des lacunes du logiciel Prorealtime est de ne pas pouvoir colorer les barres ou chandeliers en fonction d'un indicateur et non simplement en fonction du critère hausse/baisse du cours.

 

Voici un code, assez fastidieux à paramètrer, mais le résultat à l'écran est bluffant !

 

Exemple en version "candle", pour le Nasdaq Comp, avec la coloration suivant le sens de M7 :

 

hk35.gif

 

Et maintenant en version "barchart" :

 

hk36.gif

 

Il faut d'abord créer une fenètre avec le prix (barchart), puis ajouter l'indicateur sur le prix et paramètrer le tout : gros points et couleur des points.  Il faut également mettre la condition c1 à votre sauce et changer le return  pour "ave" (que j'ai mis uniquement pour contrôle).

 

Version "candle" :

 

ave=average[7](close)
c1=(ave>ave[1])
if c1 then
    c=1
else
    c=-1
endif
r=abs(open-close)
r=(r)/29
if open<close then
    b1=open
else
    b1=close
endif
b2=b1+r
b3=b2+r
b4=b3+r
b5=b4+r
b6=b5+r
b7=b6+r
b8=b7+r
b9=b8+r
b10=b9+r
b11=b10+r
b12=b11+r
b13=b12+r
b14=b13+r
b15=b14+r
b16=b15+r
b17=b16+r
b18=b17+r
b19=b18+r
b20=b19+r
b21=b20+r
b22=b21+r
b23=b22+r
b24=b23+r
b25=b24+r
b26=b25+r
b27=b26+r
b28=b27+r
b29=b28+r
b30=b29+r

return b1 coloured by c,b2 coloured by c,b3 coloured by c,b4 coloured by c,b5 coloured by c,b6 coloured by c,b7 coloured by c,b8 coloured by c,b9 coloured by c,b10 coloured by c,b11 coloured by c,b12 coloured by c,b13 coloured by c,b14 coloured by c,b15 coloured by c,b16 coloured by c,b17 coloured by c,b18 coloured by c,b19 coloured by c,b20 coloured by c,b21 coloured by c,b22 coloured by c,b23 coloured by c,b24 coloured by c,b25 coloured by c,b26 coloured by c,b27 coloured by c,b28 coloured by c,b29 coloured by c,b30 coloured by c,ave

 

En version "barchart" :

 

ave=average[7](close)
c1=(ave>ave[1])
if c1 then
    c=1
else
    c=-1
endif
r=(high-low)/29
b1=low
b2=b1+r
b3=b2+r
b4=b3+r
b5=b4+r
b6=b5+r
b7=b6+r
b8=b7+r
b9=b8+r
b10=b9+r
b11=b10+r
b12=b11+r
b13=b12+r
b14=b13+r
b15=b14+r
b16=b15+r
b17=b16+r
b18=b17+r
b19=b18+r
b20=b19+r
b21=b20+r
b22=b21+r
b23=b22+r
b24=b23+r
b25=b24+r
b26=b25+r
b27=b26+r
b28=b27+r
b29=b28+r
b30=b29+r

return b1 coloured by c,b2 coloured by c,b3 coloured by c,b4 coloured by c,b5 coloured by c,b6 coloured by c,b7 coloured by c,b8 coloured by c,b9 coloured by c,b10 coloured by c,b11 coloured by c,b12 coloured by c,b13 coloured by c,b14 coloured by c,b15 coloured by c,b16 coloured by c,b17 coloured by c,b18 coloured by c,b19 coloured by c,b20 coloured by c,b21 coloured by c,b22 coloured by c,b23 coloured by c,b24 coloured by c,b25 coloured by c,b26 coloured by c,b27 coloured by c,b28 coloured by c,b29 coloured by c,b30 coloured by c,ave

Repost 0
Published by hk_lisse - dans Prorealtime Astuces
commenter cet article