Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
14 février 2008 4 14 /02 /février /2008 16:20

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.

 

hk84.gif

 

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

Partager cet article

Repost 0
Published by hk_lisse - dans Les Cycles
commenter cet article

commentaires