Bourse Blog bourse admin

hk-lisse

Aller au contenu | Aller au menu | Aller à la recherche

jeudi, février 14 2008

Changement De Crèmerie

 

Changement de crèmerie.

 

Désormais, l'aventure hk-lisse se poursuit sur Over-Blog.com.

Vous pouvez me retrouvez directement en cliquant ICI.
Voici la nouvelle adresse : http://hk-lisse.over-blog.com/

 

A+.

samedi, février 2 2008

Fourier Transform For Traders, By John Ehlers

Fourier Transform for Traders, by John Ehlers.

 

Dans le numéro de janvier 2007 de S&C, on retrouve un dernier article de John Ehlers sur la façon d'utiliser les cycles pour le trading.  Il propose d'utiliser la "Discrete Fourier Transform" (DFT) pour le tuning des indicateurs.  Il prend en exemple un RSI où la période est fonction du cycle dominant calculé par la DFT.  Je ne suis pas un fan du RSI, j'ai rentré la période adaptative dans un système de moyennes mobiles (exemple proposé par le développeur de WEALTH-LAB).  Les signaux sont donnés par le croisement de la courbe de régression linéaire (de période = 1/4 cycle) avec la moyenne mobile simple (de période = 1/2 cycle).  Voici une vue de KO avec les 2 moyennes et dans la fenêtre du bas, l'indicateur qui retourne le cycle dominant.

 

 

Plusieurs remarques :

 - Je ne suis pas certain de l'exactitude des calculs, après une rapide comparaison avec le graphe d'IBM présenté dans l'article.  J'éditerai le programme au besoin (vous pouvez toujours laisser un commentaire dans la file dédiée si vous trouvez un bug).

 - Le logiciel Prorealtime montre une nouvelle fois toutes ses limites avec l'impossibilité d'inclure des boucles dans des boucles.........  Message de boucle sans fin !  Après avoir planché pendant plus d'une semaine, je vous donne le résultat même si comme je l'ai signalé plus haut, je ne suis pas sûr de celui-ci.

 - Le programme rame, il faut près de 40 minutes pour afficher un graphe de 150 barres !  Il est donc inexploitable dans sa forme actuelle, j'imagine le temps nécessaire pour un screener ou un backtest !

 - Prochaines étapes : essayer de rendre le programme plus rapide et le comparer avec la méthode proposée par Dennis Meyers (Mesa Vs Goertzel DFT).

 

Voici le code pour Prorealtime de l'indicateur de cycle dominant :

 

maxpwr = CALL "sousprog dft"[8]
for kk=9 to 50
    mys=call "sousprog dft"[kk]
    if mys>maxpwr then
        maxpwr=mys
    endif
next
if barindex <60 then
    maxpwr=undefined
endif
num=0
denom=0
for kk=8 to 50
    mys=call"sousprog dft"[kk]
    db=-10*log(0.01/(1-0.99*mys/maxpwr))/log(10)
    if db>20 then
        db=20
    endif
    if db<3 then
        thre=3-db
        num=num+kk*thre
        denom=denom+thre
    endif
next
if barindex>60 then
    cyc=num/denom
else
    cyc=undefined
endif

return cyc

 

Ainsi que le code du sous-programme utilisé pour contourner les faiblesses du logiciel, il faut introduire la période en variable (peri) :

 

pr=medianprice
if barindex<=5 then
    hp=pr
    cl=pr
else
    per=360/40
    cosper=cos(per)
    alph=(1-sin(per))/cosper
    hp=0.5*(1+alph)*(pr-pr[1])+alph*hp[1]
    cl=(hp+2*hp[1]+3*hp[2]+3*hp[3]+2*hp[4]+hp[5])/12
endif
cospart=0
sinpart=0
for n=0 to 49
    cycper=(360*n)/peri
    cospart=cospart+cl[n]*cos(cycper)
    sinpart=sinpart+cl[n]*sin(cycper)
next
pwr=square(cospart)+square(sinpart)

return pwr

mardi, janvier 29 2008

Le 16 Mars : Un Nouveau Média Indépendant

Le 16 mars : naissance d'un nouveau média indépendant.

 

Avec l'actualité des derniers jours, j'ai découvert un projet de nouveau média indépendant, celui-ci démarrera le 16 mars.  Il y a déjà en ligne de nombreux articles concernant le monde de la finance.  En voici un exemple.

 

Si tous les articles à venir sont de cette qualité, on ne peut que se rejouir de l'arrivée de MédiaPart.

 

Bonne lecture à tous.

 

jeudi, janvier 24 2008

Using Fisher Transform By John Ehlers

Using Fisher Transform by John Ehlers.

 

Dans le numéro de novembre 2002 de S&C, il y a un article de Ehlers sur la transformation de Fisher.  Une copie en pdf se trouve ici, pour les explications.  Voici une vue de l'indicateur appliqué à la Société Générale (j'essaye de coller à l'actualité !).

 

 

Et le code pour Prorealtime :

 

p=MedianPrice
len=10
maxh=highest[len](p)
minl=lowest[len](p)
if barindex<len then
    val1=2*((p-minl)/(maxh-minl)-0.5)
else
    val1=0.33*2*((p-minl)/(maxh-minl)-0.5)+0.67*val1[1]
endif
if val1>.99 then
    val2=.999
elsif val1<-0.99 then
    val2=-0.999
else
    val2=val1
endif
if barindex<len then
    fish=log((1+val2)/(1-val2))
else
    fish=0.5*log((1+val2)/(1-val2))+0.5*fish[1]
endif

return fish,fish[1],0

jeudi, janvier 17 2008

Trouver La Longueur Et L'Amplitude Du Cycle

Comment définir la longueur et l'amplitude du cycle d'une action ?

 

Tout d'abord, un petit graphe pour bien illustrer le caractère changeant du tracé des courbes dessinées pour l'instant avec le programme.  Dans le dernier article, je postais un graphe d'INTC en pariant sur un rebond vers le haut du canal mauve.  Sur le nouveau graphe, on voit que le pronostic était bien correct mais surtout que j'ai été bien aidé par le déplacement des courbes !  En effet, si vous comparez les 2 vues (ça fait un peu jeu des 7 erreurs  ), vous constaterez que les courbures ont changé.

 

 

Dans le dernier message, je disais également chercher à automatiser les longueurs et largeurs des enveloppes de Hurst.  Alors que Bressert prétendait qu'il n'y avait qu'un cycle et identifiait celui-ci avec une moyenne 20 centrée, Hurst avance le fait qu'il y a plusieurs cycles qui se superposent.  Dès lors mon programme "Detrend20" présenté le 21/10 basé sur la théorie de Bressert ne me suffit plus.

 

B. J. Millard, dans son livre "Channels & Cycles - A Tribute to J. M. Hurst", décrit un moyen d'identifier les différents cycles.  Il soustrait à une moyenne centrée de longueur égale au cycle à isoler, une seconde moyenne centrée de longueur égale à la moitié de la première.  J'ai trouvé une version "Amibroker" de l'indicateur, je l'ai adapté.  Voici une vue de HG avec l'indicateur en fenêtre 1, l'ancien indicateur "Detrend20" en fenêtre 2, et le cours en fenêtre 3.

 

 

D'une part, l'indicateur est beaucoup plus propre, et d'autre part, il permet de visualiser plusieurs cycles.

 

Je m'essaye à une petite analyse, voici une vue de l'indice Dow Jones avec l'indicateur de cycles :

 

 

On peut voir que le cycle à 6 mois (noir/blanc) est toujours présent et que son amplitude a augmenté depuis 1996, que le cycle à 2 ans était bien défini jusque 1999 et que l'on aurait un cycle de 3 ans qui se dessine depuis 2003.

 

Reste maintenant à trouver, comme pour le RSI3M3, un indicateur qui colle en temps réel pour me permettre une extrapolation convenable.

 

vendredi, janvier 11 2008

Cycles : Le Point sur Les Enveloppes

Cycles : le point sur les enveloppes.

 

Comme je vois que certains sont impatients de lire la suite des articles consacrés aux cycles, je vous poste ce petit compte rendu qui vous montre où j'en suis.  Voici le graphe d'INTC.

 

 

Pour l'instant, j'arrive à tracer les enveloppes qui sont décrites par Hurst et Millard.  J'ai encore quelques problèmes d'ajustements : en A, B,  et C, la courbe inférieure long terme devrait se décaler vers le haut, par contre en D, c'est la courbe supérieure qui est trop basse.  Les courbes sont tracées par tâtonnement, j'essaye d'automatiser la longueur et la largeur de celles-ci.

 

Si l'analyse des cycles est correcte, on devrait avoir un rebond d'INTC vers le haut du canal mauve.  N'oubliez toujours pas que les courbes sont tracées avec les données futures connues et qu'elles changent !

jeudi, janvier 10 2008

Trading Strategy Using Ehlers Filter

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) :

 

 

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 :

 

 

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.

 

 

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

 

 

dimanche, janvier 6 2008

Over / Under Divergence

Over / Under Divergence.

 

Sur le site de NQoos, il y a un setup de divergence sur Stochastics  :  "Over / Under Divergence by Birdman".  Toutes les informations nécessaires se trouvent sur la page, je vous déconseille d'aller sur Intellitraders.com, car l'anti-virus me donne une alerte.

 

Les conditions telles que je les ai codées sont :

 - Une divergence classique haussière sur le Stochastic 7,3.  La divergence est validée sur un simple zigzag du Stochastic.

 - Le premier creux du Stochastic 7,3 est inférieur au Stochastic 21,10 et le second supérieur.

 - La bougie précédant le signal doit marquer un plus bas de 7 barres.

 - La bougie du signal doit avoir un plus haut supérieur à celui de la barre précédente et Close>Open.

 

Il serait pertinent AMHA de backtester l'efficience de certaines conditions :

 - Nécessicité d'avoir une bougie verte.

 - Avoir le Stochastic 21,10 orienté à la hausse.

 - Valider la divergence non pas avec un zigzag mais avec le croisement de %K et %D.

 - Avoir le point bas sur la bougie[2] ou [0] et non pas la bougie[1].

 

Voici un exemple de signal :

 

 

Il y a peu de signaux, c'est pour cela que je m'interroge sur l'utilité de toutes les conditions.

Il faut bien lire les 4 remarques à la fin de la page de NQoos, particulièrement celle sur le "Strong Trend".  Pour le higher timeframe, 5 ou 6 fois l'unité de temps devrait être correct.  Dans ce cas, il est intéressant de chercher sur celui-ci des figures telles que "Mof" ou "Slingshot" (voir Buffy sur Google, pour ceux qui ne connaissent pas encore).  Il faudrait regarder aussi  du côté du range de la bougie de manière à avoir un R/R jouable.

 

Voici le code pour Prorealtime de la version "achat", avec les conditions de base.  Je vous laisse faire la version "vente".

 

x=Stochastic[7,3](close)
z=stochastic[21,10](close)
if x<x[1] then
    lo=min(lo,x)
    lowco=min(lowco,min(low,low[1]))
endif
if x>x[1] and x[1]<x[2]  then
    zt1=zt
    zt=z[1]
    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>x[1] then
    p4=lowco1
    lowco1=min(lowco1,low)
endif
c1=( p1<p2 and sto1 > sto2 and x>x[1] and x[1]<x[2])
c2=(c1 and sto2<zt1 and sto1>zt )
if c2 and low[1]=lowest[7](low) and high>high[1] and close>open then
    divi=3
else
    divi=0
endif
return divi

mardi, janvier 1 2008

Commencer Par Le Début Avec J. M. Hurst

Cycles : au début, il y eut J. M. Hurst.

 

J. M. Hurst est l'auteur de "The Profit Magic Of Stock Transaction Timing", écrit à la fin des années 60.  Ce livre fut un des premiers à parler de cyclicité des marchés financiers.  W.Bressert, J. Tillman, P. Eliades, R. Zukowski...   poursuivent dans cette voie et ont utilisé les travaux de Hurst.  Par exemple, beaucoup de ce que J. Ehlers publie, est déjà dans le livre de Hurst.

 

Dans les premiers chapitres de son livre, Hurst construit des enveloppes de largeurs constantes autour des cours.  il s'en sert pour  illustrer une partie de sa théorie sur l'importance du timing dans le trading.  Un exemple de graphique utilisant les bandes, se trouve ici

 

Voici pour l'instant ce à quoi j'arrive avec Prorealtime en me basant sur un code Metastock (graphique de AAPL) :

 

 

Il faut savoir que ce genre de représentation ne peut être utilisée pour le trading car elle fait appel aux données du futur.  Ainsi, les courbes qui apparaissent en même temps que la ligne jaune, sont susceptibles de changer.  Il y a deux défis à relever : d'abord, avoir  des enveloppes et une courbe correctes pour les données "établies" et ensuite essayer de trouver un moyen d'extrapoler les courbes de façon la plus exacte possible.

 

Voici une autre vue pour illustrer le principe (SNDK) :

 

 

On voit que le programme prend une moyenne mobile triangulaire, y ajoute 2 enveloppes à +/- 7% et recentre le tout 11 barres en arrière.  Les coéfficients dépendent des cycles et sont donc propres à chaque graphe.  Les bandes peuvent être construites également avec un montant fixe (exemple : 2$) ou un multiple de l'ATR.  Les channels dessinées depuis la barre -11 sont, par nature, pure fiction !  Je continue l'exploration.....

 

lundi, décembre 17 2007

Tester Une Stratégie Sur Une Liste De Valeurs

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)  :

 

 

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.

 

 

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) :

 

 

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. 

 

 

 

samedi, décembre 15 2007

Le Précurseur De Volatilité D'Oxythan

Le précurseur de volatilité d'Oxythan.

 

Voici un petit indicateur que je trouve bien pratique, il est à comparer avec le Bollinger Bandwidth : à employer pour filtrer des stratégies de suivi de tendance ou de contre-trend.  Cet indicateur a été créé par Oxythan, il en fait état en 2004 sur une file chez Dakoté.  Je reprends son explication :

 

Principe :
L'idée est de construire un indicateur qui utilisé la dérivée de la volatilité afin de détecter les coups de faiblesse qui précedent a peu prés toujours les sommets.

Afin d'avoir une bonne approximation de la dérivée, on modélise la courbe de volatilité par un ensemble de polynomes du second degrés en prenant des groupes de 3 points sur une fenêtre glissante.
Ensuite, on dérive de façon algébrique ce polynome, et on exprime la valeur de la dérivée sur le dernier point en fonction de la valeur des 3 points.
A ce moment la, on peut avoir la valeur de la dérivée de la volatilité en tous points de l'historique, mais les données extrèmement bruitées, sont inutilisables.
Pour obtenir un signal utilisable, on applique un MACD sur cette dérivée et c'est le croisement de ce MACD avec son signal qui donne une très bonne approximation des creux et sommets de volatilité.

 

Et le code pour Prorealtime, il faut mettre p1, p2 et p3 en variable (valeurs préconisées : 22, 44, 9) :

 

ub=BollingerUp[20](close)
lb=BollingerDown[20](close)

// on prend les 3 derniers points de volatilité

left=100*((ub[2]-lb[2])/((ub[2]+lb[2])/2))
center=100*((ub[1]-lb[1])/((ub[1]+lb[1])/2))
right=100*((ub-lb)/((ub+lb)/2))

// on calcule la dérivée sur le dernier point

derive=((left+right)/2)-2*center+right

// on calcule le MACD de cette dérivée

ema1=exponentialaverage[p1](derive)
ema2=exponentialaverage[p2](derive)
mac=ema1-ema2
mmac=exponentialaverage[p3](mac)
precurseur=mac-mmac
return mac,mmac,precurseur,0

 

Et une vue de l'indicateur en fenêtre 1, en 2 la Bollinger Bandwidth pour comparaison et en 3 les cours.

 

mercredi, décembre 12 2007

Hidden Divergence Sur Le Nasdaq Composite ?

Hidden Divergence sur le Nasdaq Composite.

 

Voici un exemple de divergence cachée, cela signifierait la poursuite de la baisse.

 

 

Et pour le même prix, une ETE qui se profile en UT week !

 

Divergences : Un Cas Concret, Conclusions

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) :

 

 

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 :

 

      Actions       Date          Résultats
WMT 24/04/05 + 1981
CVX 29/04/05 + 2988
ORCL 03/05/05 + 1659
EMC 02/08/05 - 4110
VZ 26/08/05 + 887
INTC 19/09/05 - 1873
WMT 23/09/05 + 2361
CSCO 12/10/05 - 2648
DELL 22/11/05 + 1398
PFE 12/12/05 + 2172
FCX 13/03/06 + 3338
QCOM 24/07/06 - 4305
VLO 21/09/06 + 5469
YHOO 23/10/06 + 4327
DELL 14/03/07 + 1842
MER 15/03/07 + 2203
MOT 17/08/07 + 2061
BRCM 27/11/07 + 1446
SLB 28/11/07 +3233
 = TOTAL =   + 24429

 

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.

lundi, décembre 10 2007

Trade Management : la séance du 11 décembre

Gestion des positions pour la séance du 11 décembre.

 

Je suis finalement sorti de TDG au B/E, tant pis si on est plus haut.   J'ai quitté DKS également.  Je suis flat pour attendre la Fed et la volatilité.

Trade Management : la séance du 10 décembre

Gestion des positions pour la séance du 10 décembre.

 

Je suis toujours collé sur TDG, je vais essayer de sortir sans casse, stop maintenu.  Sur DKS, je remonte le stop à 30.50.  Le titre a bien progressé en séance, la cloture est moins belle (des prises de bénéfices avant le week-end, j'espère).

dimanche, décembre 9 2007

Divergences : Un Cas Concret, Partie 2

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 :

 

 

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) :

 

 

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

 

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.

 

 

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.

samedi, décembre 8 2007

Divergences : Un Cas Concret

Divergences : Partir d'un cas concret.

 

Cette semaine, dans la sélection de titres US, est tombé PDLI.  L'action présentait une divergence stochastic ainsi qu'une MACD possible.  Je propose de partir du graphe pour établir un setup et voir si cette situation est reproductible.  Voici le  graphe :

 

 

Les paramètres sont : stochastic 14/3/5 simple et MACD 9/19/6.

Le setup : divergence haussière sur le stochastic, la validation se fait par le croisement de la courbe (noire) et du signal (rouge).  Le MACD croise son signal une barre plus tard, il faut prendre en compte la "possibilité" de la divergence haussière.  Le stochastic croise donc avant le MACD.  On a une reversalbar, la pertinence de cet élément sera étudié.

 

Je vais démarrer avec des programmes le plus simple possible et les corriger au besoin.

 

A suivre..........

vendredi, décembre 7 2007

Corrélation Semaine / Jour ?

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

 

La question a été posée sur le site, 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 309 semaines, on a un taux de 45,614% après une semaine rouge et un taux de 46,377% après une semaine verte.

 

 

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)

Trade Management : la séance du 7 décembre

Gestion des positions pour la séance du 7 décembre.

 

Hier, j'ai été trop gourmand sur PDLI.  Je pensais que le gap serait refermé partiellement.  L'ordre d'achat était trop bas, dommage car l'objectif a été tapé.  Je reste collé sur TDG, stop maintenu à 46, objectif revu à 49.4, séance sans volume, c'est pour ajd ou jamais.  Je suis rentré sur DKS (voir sélection du 4) sur dépassement du high de la veille, stop à 29.7, objectif>34.

jeudi, décembre 6 2007

La sélection du jour à Wall Street

Hier, je suis rentré sur GRMN et puis j'ai été sorti au B/E lors de la descente.  Sur PLL, trade réussi même si je suis rentré un peu plus cher car ça a été trop vite à l'ouverture.  Je reste sur TDG, stop remonté à 46, on a une double insidebar.  Je propose pour ce soir PDLI, on a une divergence haussière sur le stochastic et une possible sur le MACD.  Je viserai M20.

 

- page 1 de 4