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+.
Aller au contenu | Aller au menu | Aller à la recherche
jeudi, février 14 2008
Par hk_lisse le jeudi, février 14 2008, 18:40 - Commentaires
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
Par hk_lisse le samedi, février 2 2008, 17:58 - Les Cycles
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
Par hk_lisse le mardi, janvier 29 2008, 21:40 - Commentaires
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
Par hk_lisse le jeudi, janvier 24 2008, 20:36 - Indicateurs
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
Par hk_lisse le jeudi, janvier 17 2008, 19:37 - Les Cycles
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
Par hk_lisse le vendredi, janvier 11 2008, 12:31 - Les Cycles
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
Par hk_lisse le jeudi, janvier 10 2008, 19:38 - Backtest
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
Par hk_lisse le dimanche, janvier 6 2008, 16:38 - Les Divergences
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
Par hk_lisse le mardi, janvier 1 2008, 22:32 - Les Cycles
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
Par hk_lisse le lundi, décembre 17 2007, 18:36 - Backtest
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
Par hk_lisse le samedi, décembre 15 2007, 10:43 - Volatilité
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
Par hk_lisse le mercredi, décembre 12 2007, 22:27 - Les Divergences
Par hk_lisse le mercredi, décembre 12 2007, 20:04 - Les Divergences
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
Par hk_lisse le lundi, décembre 10 2007, 22:11 - Z - Archives
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é.
Par hk_lisse le lundi, décembre 10 2007, 08:20 - Z - Archives
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
Par hk_lisse le dimanche, décembre 9 2007, 17:33 - Les Divergences
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
Par hk_lisse le samedi, décembre 8 2007, 19:08 - Les Divergences
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
Par hk_lisse le vendredi, décembre 7 2007, 23:11 - Backtest
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)
Par hk_lisse le vendredi, décembre 7 2007, 08:32 - Z - Archives
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
Par hk_lisse le jeudi, décembre 6 2007, 12:04 - Z - Archives
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.
« articles précédents - page 1 de 4