Overblog
Suivre ce blog Administration + Créer mon blog
10 février 2008 7 10 /02 /février /2008 17:40

Divergences : remettre les choses à leur place.

 

Le but de cette file est de faire un tour des setup's de trading à base de divergences.  Tout d'abord, je vous invite à lire (avec un oeil critique) le tutoriel de AT-BOURSE sur les divergences appliquées à l'analyse dynamique.  Cet exposé a l'avantage de donner des objectifs et donc d'avoir un système complet même si l'auteur prend beaucoup de précautions (on lit en fin d'introduction : "des divergences peuvent donc tout aussi bien être invalidées.......que conduire ........à une inversion de tendance du marché" ou encore plus loin : "le graphe suivant.......indique que ces objectifs ne sont que rarement réalisés......ils peuvent être réalisés, mais aussi dépassés, ou bien les divergences peuvent être invalidées loin de leur objectif").  Bref, c'est bien quand ça marche et c'est nul quand ça marche pas.  Une tentative de backtest a été publiée chez dakoté : c'est ici.  Le test ne tient pas compte de l'environnement.

 

Tout cela pour citer un intervenant sur un forum US qui disait : "What a great tool, it really works !  I see divergences all over the place and would get chopped to pieces if I trade all the signals.  Just doesn't work for me ! "

 

Les différents types de divergences.

 

- Les divergences baissières (bearish divergence), qui signalent une possible baisse du cours.

- Les divergences haussières (bullish divergence), qui signalent une possible hausse du cours.

- Les divergences classiques (classic divergence or regular divergence), qui signalent un possible renversement de la tendance.

- Les divergences de continuation ou divergences cachées (hidden divergence or reverse divergence or continuation divergence or trend divergence), qui signalent une possible poursuite de la tendance.

 

Au final, 4 catégories : les classiques baissières, les classiques haussières, les cachées baissières et enfin les cachées haussières.

 

Il y a divergence quand la représentation donnée par le cours n'est pas en relation avec celle donnée par l'indicateur : MACD, RSI, CCI, Stochastic ou tout autre oscillateur.  Les reverses divergences n'apparaissent pas avec le MACD ligne, il faut employer l'historigramme.  Voici une vue des différentes catégories : en A, classique baissière, en B, classique haussière, en C, cachée baissière et en D, cachée haussière.

 

hk22-copie-1.gif

 

Il faut retenir :

- le cours fait un plus haut plus haut et non l'indicateur, on a une divergence classique baissière (A).

- le cours fait un plus bas plus bas et non l'indicateur, on a une divergence classique haussière (B).

- l'oscillateur fait un plus bas plus bas et non le cours, on a une divergence cachée haussière (D).

- l'oscillateur fait un plus haut plus haut et non le cours, on a une divergence cachée baissière (C).

 

Les réflexions à venir :

- quand prendre la divergence ?  Sur le creux/sommet de l'indicateur ou comme pour un stochastic ou un MACD, attendre le croisement avec le signal ?  Même question pour l'invalidation.

- faire un programme de détection des divergences possibles et pas uniquement celles établies.

- quid de la divergence sur l'UT supérieure ?

- quid de la double divergence (UT supérieure et UT actuelle) ?

- quel est le nombre de barres entre deux creux/sommets, le cycle joue-t-il un rôle ?

- quelle est l'amplitude entre deux sommets/creux de l'indicateur (pour un sto sous 80, sous 50) ?

- quelle est l'amplitude entre deux creux/sommets sur les cours, la volatilité joue-t-elle ?

- doit-on prendre les divergences en période de cycle ou de tendance ?

- quelle est l'interactivité entre divergence Sto et MACD ?

- l'osillateur doit-il avoir un mouvement non-saccadé avant la divergence ?

Partager cet article
Repost0
10 février 2008 7 10 /02 /février /2008 17:22

Le canal de régression linéaire ou canal de Raff.

 

Dans la continuité du code Prorealtime permettant le traçage de la droite de régression linéaire, voici les programmes pour les différents canaux.  En premier le canal de Raff, avec une vue du CAC, pour une droite de longueur=50.  Normalement, le canal de Raff trace 2 droites parallèles passant par l'extrême le plus éloigné de la droite (droites bleues).   Dans le programme, j'ai rajouté les parallèles passant par l'extrême le plus proche (droites jaunes).  Sur le graphe du CAC, c'est assez parlant.

 

hk19.gif

 

Il faut toujours définir K en variable pour la longeur du canal, le code :

 

det=DPO[k*2](close)
if det=det[1] and det[1]=det[2] and det[2]<>det[3] then
    flag=1
endif
n=(k*2)-4
p=(n/2)-1
d100=DPO[n](close)
moy100=close-d100
co=(moy100-moy100[1]+(close[p])/n)*n
h100=dpo[n](high)
moyh=high-h100
hi=(moyh-moyh[1]+(high[p])/n)*n
l100=dpo[n](low)
moyl=low-l100
lo=(moyl-moyl[1]+(low[p])/n)*n
if flag=1 and flag[1]=0 then
    somx=0
    somy=0
    somxx=0
    somxy=0
    for i=1 to k
        somx=somx+i
    next
    for i=0 to k-1
        somy=somy+co[i]
    next
    for i=1 to k
        somxx=somxx+(i*i)
    next
    for i=0 to k-1
        somxy=somxy+(co[i]*(k-i))
    next
    a=(k*somxy-somx*somy)/(k*somxx-somx*somx)
    b=(somy-a*somx)/k
    for i=0 to k-1
        ecah=hi[i]-a*(k-i)-b
        maxh=max(maxh,ecah)
        ecal=a*(k-i)+b-lo[i]
        maxl=max(maxl,ecal)
    next
endif
if flag=0 then
    reg=undefined
else
    j=j+1
    reg=a*j+b
endif
raff=max(maxh,maxl)
raffl=reg-raff
raffh=reg+raff
riff=min(maxh,maxl)
riffh=reg+riff
riffl=reg-riff
return reg,riffl,riffh,raffl,raffh

 

Le canal d'écart type.

 

hk20.gif

 

Le graphe du CAC avec le canal d'écart type, la longueur de la droite est toujours de 50 et le coéfficient pour l'écart type est de 1.50.  Il faut définir 2 variables, K pour la longueur du canal et Z pour le coéfficient de l'écart type.  Le code :

 

once j=0
det=DPO[k*2](close)
if det=det[1] and det[1]=det[2] and det[2]<>det[3] then
    flag=1
endif
n=(k*2)-4
p=(n/2)-1
d100=DPO[n](close)
moy100=close-d100
co=(moy100-moy100[1]+(close[p])/n)*n
if flag=1 and flag[1]=0 then
    somx=0
    somy=0
    somxx=0
    somxy=0
    for i=1 to k
        somx=somx+i
    next
    for i=0 to k-1
        somy=somy+co[i]
    next
    for i=1 to k
        somxx=somxx+(i*i)
    next
    for i=0 to k-1
        somxy=somxy+(co[i]*(k-i))
    next
    a=(k*somxy-somx*somy)/(k*somxx-somx*somx)
    b=(somy-a*somx)/k
    eca=STD[k](co)
endif
if flag=0 then
    reg=undefined
else
    j=j+1
    reg=a*j+b
endif
return reg,reg+z*eca,reg-z*eca

 

Le canal d'erreur type.

 

hk21.gif

 

Toujours une vue du CAC avec le canal d'erreur type de longueur 50 et de coéfficient 1.50.  Comme pour le programme précédent, il faut définir 2 variables, K pour la longueur du canal et Z pour le coéfficient multiplicateur de l'erreur type.  Le code :

 

once j=0
det=DPO[k*2](close)
if det=det[1] and det[1]=det[2] and det[2]<>det[3] then
    flag=1
endif
n=(k*2)-4
p=(n/2)-1
d100=DPO[n](close)
moy100=close-d100
co=(moy100-moy100[1]+(close[p])/n)*n
if flag=1 and flag[1]=0 then
    somx=0
    somy=0
    somxx=0
    somxy=0
    for i=1 to k
        somx=somx+i
    next
    for i=0 to k-1
        somy=somy+co[i]
    next
    for i=1 to k
        somxx=somxx+(i*i)
    next
    for i=0 to k-1
        somxy=somxy+(co[i]*(k-i))
    next
    a=(k*somxy-somx*somy)/(k*somxx-somx*somx)
    b=(somy-a*somx)/k
    eca=STe[k](co)
endif
if flag=0 then
    reg=undefined
else
    j=j+1
    reg=a*j+b
endif
return reg,reg+z*eca,reg-z*eca

edit le 04/03/08 : suite à l'amélioration apportée par un lecteur, le code est modifié (en rose).

Partager cet article
Repost0
10 février 2008 7 10 /02 /février /2008 17:14

Tracer en automatique la droite de régression linéaire avec Prorealtime.

 

Voici un programme pour Prorealtime qui trace la droite de régression linéaire sur les dernières bougies.  Une vue du CAC, avec la période=60.

 

hk18.gif

 

Le programme retourne une courbe qui représente la droite de régression linéaire pour les 60 dernières bougies.  Pour les barres précédentes, on a la moyenne 20 simple (à modifier si vous le souhaitez), je superpose donc une seconde moyenne 20 simple pour masquer la courbe avant les 60 bougies utilisées pour la droite (vous suivez ?).  Il faut rentrer K comme variable pour la longueur de la droite.

 

Le code :

 

once j=0
det=DPO[k*2](close)
if det=det[1] and det[1]=det[2] and det[2]<>det[3] then
    flag=1
endif
n=(k*2)-4
p=(n/2)-1
d1=DPO[n](close)
moy=close-d1
co=(moy-moy[1]+(close[p])/n)*n
if flag=1 and flag[1]=0 then
    somx=0
    somy=0
    somxx=0
    somxy=0
    for i=1 to k
        somx=somx+i
    next
    for i=0 to k-1
        somy=somy+co[i]
    next
    for i=1 to k
        somxx=somxx+(i*i)
    next
    for i=0 to k-1
        somxy=somxy+(co[i]*(k-i))
    next
    a=(k*somxy-somx*somy)/(k*somxx-somx*somx)
    b=(somy-a*somx)/k
endif
if flag=0 then
    reg=undefined
else
    j=j+1
    reg=a*j+b
endif
return reg

edit le 04/03/08 : suite à l'amélioration apportée par un lecteur, le code est modifié (en rose)

Partager cet article
Repost0
10 février 2008 7 10 /02 /février /2008 17:05
Copie de l'article publié sur l'ancien Blog le 15.10.2007 :

Black Monday : Le 19 Octobre 1987.


A l'heure où Wall Street se prépare à fêter le vingtième anniversaire du crash de 1987, je vous livre ici quelques commentaires sur la journée.


En fin de semaine précédente (le jeudi ou le vendredi) était sorti une nouvelle (sur les taux ou l'emploi, je ne me souviens plus), ce qui avait provoqué un début de glissade du marché : baisse de 3.81% pour le mercredi, baisse de 2.39% pour le jeudi et baisse de 4.6% pour le vendredi.  Mais ce qui est important, c'est que les médias (du moins en Europe), ont parlé de cette baisse tout le week-end, ressassant la news aux oreilles des investisseurs.


Ce lundi là, en arrivant à la Bourse, on me prévient que le bureau a demandé de leur sonner quand nous serions prêt car ils avaient déjà des ordres à transmettre.  Il faut savoir qu'à l'époque tout se faisait encore par retranscription via communication téléphonique et qu'il fallait avoir une bonne oreille, une belle écriture et une exellente articulation !  Bref, la journée de travail démarra 1 heure plus tôt, vers 10h30.  Alors que nous pensions juste nous mettre en avance, le flot des ordres continua à jamais........


Vers 11h30, devant la quantité d'ordres à assurer (le bureau nous informant que de leur côté le téléphone n'arrêtait pas de sonner), les arbitragistes et les délégués sont réquisitionnés pour donner un coup de main.  Au début, il y eut quelques râles puis la bonne humeur refit surface avec l'excitation et le sentiment de vivre quelque chose d'extraordinaire.  Cela se termina même en compétition : voir celui qui retranscrirait le plus de contrats !  De toute façon pour l'arbitrage,  ce fut aussi une journée particulière :  les criées étant sans cesse retardées, les cours des  places étrangères fluctuant continuellement, ils recevaient chaque fois de nouveaux spreads et avaient pour consigne d'y aller  mollo.


Donc, tout le monde était sur le pont.  Les lignes téléphoniques n'ont pas cessé de chauffer, le bureau, les correspondants, institutionnels et clients se relayaient au bout du fil : certains nous sonnant directement n'arrivant pas à joindre le bureau.


Avec le temps, j'avais appris à reconnaître via les codes clients, le donneur d'ordre : pas besoin de livres sur la psychologie, l'irrationalité ou les mécanismes  du marché, toute l'information passait sous nos yeux. 


Ce qui se passait pour nous, se passait également dans les autres firmes.  La quantité d'ordres était telle que les criées furent plusieurs fois retardées (ce qui nous arrangeait bien :-) ), pour permettre au système informatique de la Bourse de digérer tous ces contrats.  Une fois les casiers de réceptions des ordres fermés, ce fut une longue attente avant la sortie des balances et le  début des criées, et un nouveau branle-bas de combat : pour les arbitragistes, essayer d'intervenir et pour les autres courrir d'une criée  à l'autre  pour exécuter les ordres tardifs non-encodés.  Heureusement, vu la longueur des  balances,  les criées qui d'ordinaire se passent relativement rapidement,  prenaient jusqu'à 10 minutes voir plus avec les suspensions !  j'avais tellement d'ordres à la vente que j'avais décidé de les inscrire dans mon carnet en rouge du côté achat afin de ne pas perdre toutes ces pages blanches......Il ne restait plus maintenant qu'à relever toutes ces exécutions et les transmettre......Une fois le carnet refermé, je regardais l'horloge : nous avions 3 heures de retard....

Alors que d'habitude, lorsque nous rentrions au bureau (parfois aprés un pot près de la Bourse avec les gars des autres firmes), la journée des employés était presque finie, ce jour là l'encodage des exécutions n'était pas terminé......  Une fois cela fait, il fallait encore attendre le traitement des fichiers (j'en profitais pour sonner à la maison pour dire que l'on ne m'attende pas pour le repas), puis enfin les imprimantes se mirent à cracher les avis d'opéré .    Toute cette masse  d'ordres provoquait un retard  en effet boule de neige.


Le travail continua une bonne partie de la soirée, les yeux rivés sur la séance de Wall Street, chacun se demandant ce qui allait nous arriver demain.......Nous fermames le bureau tard dans la soirée, connaissant la cloture du Dow Jones,  on se donna rendez-vous  dés 7  heures  le lendemain matin, un de nous  se chargeant de passer par le tri postal avec le courrier, seul moyen pour les clients de recevoir leurs  confirmations  dans les temps.


Cette journée a été fabuleuse par l'ambiance qui régnait, tout le monde n'avait à la bouche que "crash 1929", mais c'était également l'inconnu car personne, ni même le plus ancien, n'avait connu cette période.  Extraordinaire, également, car malgré le nombre d'ordres, il n'y eu aucune panne.......juste un peu de retard !  Bien que le niveau de courtage de la journée soit exceptionnel, ce n'était pas un record, par contre le nombre d'exécutions enregistrées sur un jour ne fut plus jamais dépassé.  Pour l'arbitrage, ce fut également une excellente journée, malgré les consignes.  Le fait de devoir intervenir modérément faisait tomber les cours, il n'y avait plus de soutien.........Ils ont gagné plus en décalages de cours qu'en commissions.  


Le lendemain, on vit apparaître à l'achat quelques gros ordres........et le soir WS se stabilisait.......


Cette expérience me servit 2 ans plus tard, le lundi 16 octobre 1989 (tiens, encore un lundi en octobre ?) avec la chute du mur, le marché fut chahuté en Europe suite à la cloture de WS le vendredi........J'ai fait une petite fortune ce jour là avec un reverse d'anthologie à 4 jours de l'expiration des options........mais c'est une autre histoire.


Photo de l'écran du Reuter à la cloture de la séance du 19 octobre 1987.

Partager cet article
Repost0
10 février 2008 7 10 /02 /février /2008 16:41

En Bourse, tu n'as pas d'amis.


Alors que je faisais mes premiers pas au parquet, mon mentor qui me présentait les lieux et les intervenants, me répétait à l'oreille après chaque poignée de main : "N'oublies pas, en Bourse, tu n'as pas d'amis.  Tu as des clients, des collègues, des contreparties, des confrères mais pas d'amis ! ".  Sur le moment, je m'interrogeais sur les délires paranoîaques de ce vieux qui m'accompagnait, mais avec le temps, je compris qu'il avait raison.  Un adage qui s'applique même entres estimés confrères de la place parisienne comme le montre l'article de MediaPart, à lire ici.  Encore un papier qui fait mouche  après la série d'exellents articles consacrés à la crise aux caisses d'épargnes.nti_bug_fck
Partager cet article
Repost0
10 février 2008 7 10 /02 /février /2008 15:28

Trailing Stop : la cassure en trois blocs ou three line break.

 

Voici un indicateur qui donne le seuil de retournement pour le mode de représentation en cassure trois blocs.  Cet indicateur peut servir de trailing stop, il fonctionne avec le cours de cloture.  Un exemple sur le CAC, avec ensuite la représentation en "three line break" avec l'indicateur pour confirmation.

 

hk16.gif

hk17.gif

 

Et maintenant le code pour Prorealtime :

 

once t=1
once a0=(close)
once a1=(close)
once a2=(close)
once a3=(close)
if t=1 and close>a3 then
    a0=a1
    a1=a2
    a2=a3
    a3=close
elsif t=1 and close<a0 then
    t=-1
    a1=a3
    a0=a3
    a3=close
elsif t=-1 and close<a3 then
    a0=a1
    a1=a2
    a2=a3
    a3=close
elsif t=-1 and close>a0 then
    t=1
    a1=a3
    a0=a3
    a3=close
endif

return a0 coloured by t[1] as "cassure"

Partager cet article
Repost0
10 février 2008 7 10 /02 /février /2008 14:51

Trailing Stop : le High/Low (suite).

 

Outre l'utilisation de la moyenne mobile, on peut employer le highest/high ou le lowest/low des x dernières barres.  La valeur de x varie de 3 à 5.  Un exemple sur ALU, avec x=5.

 

hk13-copie-1.gif

 

En mode SAR :

 

hk14.gif

 

Et le code, p représente le nombre de barres pris en compte :

 

once c=high
once f=-1
p=5
hi=highest[p](high)[1]
lo=lowest[p](low)[1]
if f=1 then
    if low<lo then
        f=-1
        c=hi
    else
        c=lo
    endif
else
    if high>hi then
        f=1
        c=lo
    else
        c=hi
    endif
endif
return c coloured by f

 

Une variante trouvée sur la toile, où n'est pas pris en compte les insidebar's :

 

hk15.gif

 

Avec le code :

 

once x=1
p=5
j=0
lo1=low[1]
hi1=high[1]
for i=1 to 100 do
    if low[i]<low[i+1] or high[i]>high[i+1] then
        lo1=min(lo1,low[i])
        hi1=max(hi1,high[i])
         j=j+1
    else
    endif
    if j=p then
        i=101
    else
    endif
next
if x=1 then
    if low<lo1        then
        x=-1
        c=hi1
    else
        c=lo1
        f=-1
    endif
else
     if high>hi1 then
        x=1
        c=lo1
    else
        c=hi1
        f=1
    endif
endif
return c coloured by f

Partager cet article
Repost0
7 février 2008 4 07 /02 /février /2008 21:38

Trailing Stop : le High/Low Stop.

 

Une autre technique de trailing stop consiste à afficher une moyenne mobile des high/low.  C'est surtout utile en intraday ou encore pour gérer un trade sur l'unité de temps inférieure.  Une vue sur ALU avec une SMA5 :

 

hk11.gif

 

En version SAR :

 

hk12.gif

 

Et maintenant le code, p représente la longueur de la moyenne (à déterminer par backtest).   On peut  changer le critère de reverse par close, on peut également  ajouter ou soustraire à la courbe  un écart variant en fonction de la volatilité.

 

p=5 // longueur de la moyenne des extrêmes
hi=(average[p](high))
lo=(average[p](low))
if f=1 then
    if low<lo then // on peut utiliser close
        c=hi
        f=-1
    else
        c=lo
    endif
else
    if high>hi then // on peut utiliser close
        c=lo
        f=1
    else
        c=hi
    endif
endif
return c coloured by f

Partager cet article
Repost0
7 février 2008 4 07 /02 /février /2008 21:34

Stop de volatilité en utilisant l'écart type.

 

Pour continuer, la série des codes Prorealtime concernant le trailing stop, je vous propose cette fois de travailler avec l'écart type.  Voici un graphe d'ALU avec affiché les extêmes du jour +/- un écart type et deux écarts types, celui-ci est calculé sur la moyenne à 10 jours des clotures.

 

hk9.gif

 

On peut utiliser ces courbes comme trailing stop, voici une copie d'écran en mode SAR, toujours pour ALU, avec le coéfficient 2.

 

hk10.gif

 

Et maintenant, le code (p représente la longueur de la moyenne mobile et b donne le coéfficient multiplicateur) :

 

a=STD[p](close)
b=2
if barindex<p then
    l1=low
    h1=high
else
    if low-a*b > l1 then
        l1=low-a*b
    else
    endif
    if low<l1 then
        l1=low-a*b
        c=h1
    else
    endif
    if high+a*b<h1 then
        h1=high+a*b
    else
    endif
    if high >h1 then
        h1=high+a*b
        c=l1
    else
    endif
endif
if c<low then
    c=l1
else
    c=h1
endif
if close<c then
    f=-1
else
    f=1
endif

return c coloured by f

Partager cet article
Repost0
7 février 2008 4 07 /02 /février /2008 21:08

Van K. Tharp préconise un stop basé sur l'ATR.

 

Dans son livre "Trade Your Way To Financial Freedom" ("Réussir En Trading" pour la version française), Van K. Tharp préconise un trailing stop placé 3 ATR's sous la cloture.  Il prétend même qu'un système à entrées aléatoires utilisant ce type de stop est gagnant, il l'aurait testé sur un ensemble de 10 marchés sur une durée de 10 ans. 

Les intervenants sur cette file n'ont pas l'air tous d'accord : http://www.tradingblox.com/forum/viewtopic.php?t=3637

 

Voici le code pour Prorealtime de ce "volatility stop".  Les variables sont : d pour la période de l'ATR et c pour le coéfficient multiplicateur, on peut encore éventuellement faire varier la longueur de la moyenne exponentielle (ici 10).  En version SAR, cela permet de bien visualiser la tendance.

 

c=3
d=9
ONCE a=close
once b=1
if b=1 then
    if close >a then
        a= close
    else
    endif
    if close < a - (c*(ExponentialAverage[10](AverageTrueRange[d](close)))) then
        b=-1
        e=a
        a=close
        f=-1
    else
        e= a - (c*(ExponentialAverage[10](AverageTrueRange[d](close))))
        f=1
    endif
else
    if close < a then
        a=close
    else
    endif
    if close > a + (c*(ExponentialAverage[10](AverageTrueRange[d](close)))) then
        b=1
        e=a
        a=close
        f=1
    else
        e=a + (c*(ExponentialAverage[10](AverageTrueRange[d](close))))
        f=-1
    endif
endif

return e coloured by (f)

 

Et une vue de l'indicateur appliqué sur ALU :

hk8.gif

Partager cet article
Repost0