Merci FOKI <img src='http://www.pro-at.com/style/images/icones/icon_smile_big.gif' border='0' alt='' title='' align='middle' />
Annonce
Réduire
Aucune annonce.
Ads
Réduire
[Graphe AT PRo : programmation]
Réduire
X
-
bonjour a tous, un indicateur de plus pour ceux que ca interesse
voici le code pour représenter un pseudo market profile
/////
Z1(0)=0
Z2(0)=0
Z3(0)=0
Z4(0)=0
Z5(0)=0
Z6(0)=0
Z7(0)=0
Z8(0)=0
Z9(0)=0
Z10(0)=0
Z11(0)=0
ZC1(0)=0
ZC2(0)=0
ZC3(0)=0
ZC4(0)=0
ZC5(0)=0
ZC6(0)=0
ZC7(0)=0
ZC8(0)=0
ZC9(0)=0
ZC10(0)=0
ZC11(0)=0
POC(0)=0
M=MOIS
J=JOUR
H(0)=HAUT
ZPOC(0)=0
COMPT(0)=0
i = 0
TantQue i<JOUR Faire
si MOIS(I)=M ALORS NBJOUR(0)=NBJOUR(0)+1
i = i + 1
FinTantQue
HIGH=MAX(HAUT,NBJOUR)
MINU=MIN(BAS,NBJOUR)
ECART(0)=(HIGH-MINU)/11
i = 0
tantQue i<NBJOUR Faire
si haut(i)<HIGH-ECART alors Z1=Z1 sinon Z1=Z1+1
si HAUT(i)<=(HIGH-2*ECART) ou BAS(i)>=(HIGH-1*ECART) alors Z2=Z2 sinon Z2=Z2+1
si HAUT(i)<=(HIGH-3*ECART) ou BAS(i)>=(HIGH-2*ECART) alors Z3=Z3 sinon Z3=Z3+1
si HAUT(i)<=(HIGH-4*ECART) ou BAS(i)>=(HIGH-3*ECART) alors Z4=Z4 sinon Z4=Z4+1
si HAUT(i)<=(HIGH-5*ECART) ou BAS(i)>=(HIGH-4*ECART) alors Z5=Z5 sinon Z5=Z5+1
si HAUT(i)<=(HIGH-6*ECART) ou BAS(i)>=(HIGH-5*ECART) alors Z6=Z6 sinon Z6=Z6+1
si HAUT(i)<=(HIGH-7*ECART) ou BAS(i)>=(HIGH-6*ECART) alors Z7=Z7 sinon Z7=Z7+1
si HAUT(i)<=(HIGH-8*ECART) ou BAS(i)>=(HIGH-7*ECART) alors Z8=Z8 sinon Z8=Z8+1
si HAUT(i)<=(HIGH-9*ECART) ou BAS(i)>=(HIGH-8*ECART) alors Z9=Z9 sinon Z9=Z9+1
si HAUT(i)<=(HIGH-10*ECART) ou BAS(i)>=(HIGH-9*ECART) alors Z10=Z10 sinon Z10=Z10+1
si bas(i)>(HIGH-10*ECART) alors Z11=Z11 sinon Z11=Z11+1
i = i + 1
FinTantQue
ZPOC=Z1
COMPT=1
si Z2>=ZPOC alors
ZPOC=Z2
COMPT=2
finsi
si Z3>=ZPOC alors
ZPOC=Z3
COMPT=3
finsi
si Z4>=ZPOC alors
ZPOC=Z4
COMPT=4
finsi
si Z5>=ZPOC alors
ZPOC=Z5
COMPT=5
finsi
si Z6>=ZPOC alors
ZPOC=Z6
COMPT=6
finsi
si Z7>ZPOC alors
ZPOC=Z7
COMPT=7
finsi
si Z8>ZPOC alors
ZPOC=Z8
COMPT=8
finsi
si Z9>ZPOC alors
ZPOC=Z9
COMPT=9
finsi
si Z10>ZPOC alors
ZPOC=Z10
COMPT=10
finsi
si Z11>ZPOC alors
ZPOC=Z11
COMPT=11
finsi
POC=HIGH-(COMPT-0.5)*ECART
POC2(0)=HIGH-(COMPT-0.5)*ECART
i=1
TantQue i<=NBJOUR Faire
si Z1>=i alors ZC1(NBJOUR-i)=HIGH-0.5*ECART sinon ZC1(NBJOUR-i)=0
si Z2>=i alors ZC2(NBJOUR-i)=HIGH-1.5*ECART sinon ZC2(NBJOUR-i)=0
si Z3>=i alors ZC3(NBJOUR-i)=HIGH-2.5*ECART sinon ZC3(NBJOUR-i)=0
si Z4>=i alors ZC4(NBJOUR-i)=HIGH-3.5*ECART sinon ZC4(NBJOUR-i)=0
si Z5>=i alors ZC5(NBJOUR-i)=HIGH-4.5*ECART sinon ZC5(NBJOUR-i)=0
si Z6>=i alors ZC6(NBJOUR-i)=HIGH-5.5*ECART sinon ZC6(NBJOUR-i)=0
si Z7>=i alors ZC7(NBJOUR-i)=HIGH-6.5*ECART sinon ZC7(NBJOUR-i)=0
si Z8>=i alors ZC8(NBJOUR-i)=HIGH-7.5*ECART sinon ZC8(NBJOUR-i)=0
si Z9>=i alors ZC9(NBJOUR-i)=HIGH-8.5*ECART sinon ZC9(NBJOUR-i)=0
si Z10>=i alors ZC10(NBJOUR-i)=HIGH-9.5*ECART sinon ZC10(NBJOUR-i)=0
si Z11>=i alors ZC11(NBJOUR-i)=HIGH-10.5*ECART sinon ZC11(NBJOUR-i)=0
si ZPOC>=i alors POC(NBJOUR-i)=HIGH-(COMPT-0.5)*ECART sinon POC(NBJOUR-i)=0
Z1(NBJOUR-i)=Z1
Z2(NBJOUR-i)=Z2
Z3(NBJOUR-i)=Z3
Z4(NBJOUR-i)=Z4
Z5(NBJOUR-i)=Z5
Z6(NBJOUR-i)=Z6
Z7(NBJOUR-i)=Z7
Z8(NBJOUR-i)=Z8
Z9(NBJOUR-i)=Z9
Z10(NBJOUR-i)=Z10
Z11(NBJOUR-i)=Z11
COMPT(NBJOUR-i)=COMPT
POC2(NBJOUR-i)=POC2
i = i + 1
FinTantQue
// calcul de value area
CAL(0)=Z1
CAL(1)=Z2
CAL(2)=Z3
CAL(3)=Z4
CAL(4)=Z5
CAL(5)=Z6
CAL(6)=Z7
CAL(7)=Z8
CAL(8)=Z9
CAL(9)=Z10
CAL(10)=Z11
VARIABILITE(0)=ECARTYPE(CAL,10)
si MOIS(1)<>MOIS(0)
alors
VA(1)=POC2(1)-VARIABILITE(1)*ECART(1)
VA(2)=POC2(1)+VARIABILITE(1)*ECART(1)
sinon VA=0
//////
le principe retenu est le suivant :
pour la représentation, je prends en compte les cotations du mois,
je decompose en 11 zones de prix de larguer égale, à partir du plus haut et du plus bas du mois
je comptabilise durant le mois le temps passé dans chaque zone
je représente le temps passé dans chaque zone le temps passé
en bleu pour chque zone,
en vert le POC (zone ou le temps passé est maximale)
je représente, centré sur le POC, la distribution des cours à un écart type (en jaune)
au final, voir la littérature pour l'exploitation
application concrête, le POC ou les extremités de la value area en jaune peuvent servir de support/résistance
<center><img src='http://images.pro-at.com/200606/b/screenhunter_1.jpg' alt='' /></center>
Commentaire
-
et on obtient des graphes comme celui ci<center><a href='http://images.pro-at.com/200606/b/a_novo.gif' target='_blank' style='display:block; width:600px; border:2px dashed #888; padding:10px'><img src="http://images.pro-at.com/200606/b/a_novo.gif" alt='' width='600' height='357' /><em style='display:block; text-align: right'>Cliquez pour agrandir</em></a></center>
a titre d'exemple, on voit bien que l'extremite basse de la value area de mai a servi de resistance (segment jaune)
Commentaire
-
Bonjour jmc
Je t'en pris, ce n'est qu'une simple participation au travail de tous les acteurs de cette file.<img src='http://www.pro-at.com/style/images/icones/icon_smile_tongue.gif' border='0' alt='' title='' align='middle' />
Cordialement
Commentaire
-
Retour sur la moyenne mobile EPMA
Smallcaps90, je reviens te solliciter, j'ai retranscrit textuellement ton programme sur l'indicateur EPMA_10 (quand même après l'avoir compris !); mais mille fois hélas, l'indicateur reste contamment à zéro (bouton "tester"), ainsi bien sur, que la courbe associée.
Visiblement quelque chose m'échappe !
Un petit coup de main serait le bienvenu. <img src='http://www.pro-at.com/style/images/icones/icon_smile_dead.gif' border='0' alt='' title='' align='middle' />
Cordialement
Commentaire
-
Bonsoir Smallcaps90
J'ai trouvé mon erreur due à ma grande ignorance : la courbe résultat doit être désignée par "Courbe1" et non par "EPMA", c'est aussi bête que cela. Mais n'est-ce pas grace à ses erreurs que l'on progresse ? Il faut dire que dans mon cas la route est longue....
Etant d'un naturel têtu et laborieux, je commence par étudier chacune des 78 pages du forum.
Encore merci smallcaps90 et à bientôt.
Cordialement<img src='http://www.pro-at.com/style/images/icones/icon_smile_big.gif' border='0' alt='' title='' align='middle' />
Commentaire
-
Bonjour glave79,
Il n'est pas nécessaire que la courbe de l'indicateur soit désignée par "Courbe1" pour quelle apparaisse sur le graphe.
Le programme définit la variable EPMA et la fenêtre Propriétés de la règle comporte bien EPMA dans le champ "Nom" de la courbe1, avec Simple dans le champ "Affichage"...Par conséquent si tu as bien coché la case "Affichage sur les cours", la courbe de l'EPMA doit apparaître sur les cours...
Pour ce qui concerne les 78 pages de la file, il est vrai qu'il n'est pas très facile d'y retrouver qq chose vu que la fonction "Rechercher" n'accède pas à la page où se trouve le sujet qui t'intéresse...Néanmoins tu peux demander à Longway de t'envoyer son tableau Excel qui résout ce problème. Michka et jlr ont réalisé des documents Word reprenant l'intégralité de la file également. Cà aide bien! Merci à eux ...
Cordialement.
Commentaire
-
Merci smallcaps90,
J'ai enfin compris, qu'il est nécessire de conserver la cohérence entre l'appellation de la courbe, déclarée dans l'onglet "Propriétés", et celle utilisée dans le corps du programme, chose que je n'avais pas faîte ! (dur, dur).
Je suis bien évidemment preneur de tout programme qui établit une synthèse des 78 pages du forum (j'en suis actuellement à la 4ème !) et j'en remercie à l'avance les auteurs, qui voudront bien me le faire parvenir (ordi.tel@free.fr).
Cordialement.
glave79
Commentaire
-
Bonjour
Visuellement la Hull semble être intéressante ... ici appliquée sur le CAC avec un réglage de 10
<center><img src='http://images.pro-at.com/200606/b/cac4.png' alt='' /></center>
MAIS qu'en est il numériquement ... pourrait-on en faire un système de trading ??
Les outils utilisés :
Programme de la Hull avec segment de couleur :
<font color="blue">//====
//HULL
//====
//Moyenne de Hull
//V1.0 du 29/06/2005
//V2.0 du 16/05/2006
//
M_HULL = PONDERE(2*PONDERE(CLOTURE,P1/2)-
PONDERE(CLOTURE,P1),RACINE(P1))
//Tracé des segments croissants en vert
//des segments décroissants en rouge pour M_HULL
//1- Initialisations
SI RANGHISTO=2
ALORS
SI M_HULL>=M_HULL(1)
ALORS
V(0)=1
R(0)=0
SINON
V(0)=0
R(0)=1
FINSI
FINSI
//3- Détermination de la tendance
SI RANGHISTO>2
ALORS
SI M_HULL(1)>M_HULL
ALORS
R=1
V=0
FINSI
SI M_HULL(1)<M_HULL
ALORS
V=1
R=0
FINSI
SI M_HULL(1)=M_HULL
ALORS
SI V(1)=1 ALORS V=V(1)
SI R(1)=1 ALORS R=R(1)
FINSI
//Traitement des tracés
//
//Segments verts
//
SI V=1 ET V(1)=0
ALORS
SI A=0
ALORS
M_HULL_V1(1)=M_HULL(1)
M_HULL_V1=M_HULL
SINON
M_HULL_V2(1)=M_HULL(1)
M_HULL_V2=M_HULL
FINSI
FINSI
SI V=1 ET V(1)=1
ALORS
SI A=0 ALORS M_HULL_V1=M_HULL
SI A=1 ALORS M_HULL_V2=M_HULL
FINSI
SI V=0 ET V(1)=1
ALORS
SI A=0 ALORS M_HULL_V1(1)=M_HULL(1)
SI A=1 ALORS M_HULL_V2(1)=M_HULL(1)
A=NON(A)
FINSI
//Segments rouges
//
SI R=1 ET R(1)=0
ALORS
SI B=0
ALORS
M_HULL_R1(1)=M_HULL(1)
M_HULL_R1=M_HULL
SINON
M_HULL_R2(1)=M_HULL(1)
M_HULL_R2=M_HULL
FINSI
FINSI
SI R=1 ET R(1)=1
ALORS
SI B=0 ALORS M_HULL_R1=M_HULL
SI B=1 ALORS M_HULL_R2=M_HULL
FINSI
SI R=0 ET R(1)=1
ALORS
SI B=0 ALORS M_HULL_R1(1)=M_HULL(1)
SI B=1 ALORS M_HULL_R2(1)=M_HULL(1)
B=NON(B)
FINSI
FINSI
<center><img src='http://images.pro-at.com/200606/b/hull.png' alt='' /></center>
</font id="blue">Programme de détection d'inversion de sens de la HULL :
<font color="blue">//==============
//CONV_CONC_HULL
//==============
//Recherche des zones convexes/concaves et ascendantes/descendantes
//sur une moyenne de Hull
//le 30/06/2005
//
M(0)=HULL.M_HULL
CONVEXE = (M-2*M(1)+M(2)>=0) //Approximation de la dérivée seconde
CONCAVE = NON(CONVEXE)
ASCENDANT = (M>M(1))
DESCENDANT = NON(ASCENDANT)
HAUSSE_DEBUT = CONVEXE ET ASCENDANT
HAUSSE_FIN = CONCAVE ET ASCENDANT
BAISSE_DEBUT = -(CONCAVE ET DESCENDANT)
BAISSE_FIN = -(CONVEXE ET DESCENDANT)</font id="blue">
<center><img src='http://images.pro-at.com/200606/b/ss.png' alt='' /></center>
</font id="blue">Le programme de test :
Voici la structure des répertoires :
<center><img src='http://images.pro-at.com/200606/b/test.png' alt='' /></center>
</font id="blue">Programme "Trading system HULL" :
<font color="blue">//=================
// Trading System 2
//=================
// Similaire à "Trading System" avec en plus utilisation de la fenêtre
// d'affichage des règles pour un rapport de backtest (voir règle "Trad Gains 2")
//Système basé sur la Concavité de la moyenne de HULL
ACHAT=HULL.M_HULL_V1(2)=0 ET HULL.M_HULL_V1(1)<>0 ET HULL.M_HULL_V1<>0
OU
HULL.M_HULL_V2(2)=0 ET HULL.M_HULL_V2(1)<>0 ET HULL.M_HULL_V2<>0
VENTE=HULL.M_HULL_R1(2)=0 ET HULL.M_HULL_R1(1)<>0 ET HULL.M_HULL_R1<>0
OU
HULL.M_HULL_R2(2)=0 ET HULL.M_HULL_R2(1)<>0 ET HULL.M_HULL_R2<>0
//Signal Achat/Vente : 1 = Achat, 0 = Neutre, -1 = Vente
SIGNAL = Achat - Vente</font id="blue">
<center><img src='http://images.pro-at.com/200606/b/test1.png' alt='' /></center>
Le programme "Trad AchatVente HULL"
<font color="blue">// Position Acheteuse ou Vendeuse
ACHATVENTE = GAINS2.POS</font id="blue">
<center><img src='http://images.pro-at.com/200606/b/ha.png' alt='' /></center>
Le programme "Trad AV sur cours HULL"
<font color="blue">//==================
//TradAV sur cours 2
//==================
// Signal d'achat/Vente sur les cours (flèches)
Si SIGNAL = 1 Alors FACHAT = -1 // Achat : flèche haut en dessous des cours
Si SIGNAL = -1 Alors FVENTE = 1 // Vente : flèche bas au dessus des cours
Si GAINS2.SIGNALSTOP = 2 Alors FACHAT = 1 // Achat par Stop loss Vente
Si GAINS2.SIGNALSTOP = -2 Alors FVENTE = -1 // Vente par Stop loss Achat
COURBE_UP1=HULL.M_HULL_V1
COURBE_UP2=HULL.M_HULL_V2
COURBE_DN1=HULL.M_HULL_R1
COURBE_DN2=HULL.M_HULL_R2[/blue]
<center><img src='http://images.pro-at.com/200606/b/vente.png' alt='' /></center>
Le programme "Trad Gains HULL"
<font color="blue">// Calcul de la courbe des gains du Signal d'Achat/Vente
// et des statistiques sur les opérations dans la fenêtre d'Affichage (rapport de backtest)
// P1 = 0 : Opération au cours de Cloture du jour du signal
// P1 = 1 : Opération au cours d'Ouverture du jour suivant le signal
// P1 = 2 : Opération au cours moyen du jour suivant le signal
// P2 : Stop de protection à -P2% de perte
// P2 = 0 : Pas de stop de protection
// P3 = 1 : Affichage de chaque opération d'Achat/Vente dans la fenêtre d'affichage des règles
GAINS = GAINS(1)
GAINSREEL = GAINSREEL(1)
BUYANDHOLD = BUYANDHOLD(1)
Pos = Pos(1)
SIGNALSTOP=SIGNAL
// Affichage des statistiques sur les opérations
Si RANGHISTO=FINHISTO Alors
Afficher ""
Afficher "======== Statistiques sur les opérations d'Achat/Vente SUR HULL "
Afficher ""
Afficher "Nombre d'opérations : " & Trade &
" Gagnantes : " & Win & " (" & ARRONDI(Win/Trade*100,2) & "%)" &
" Perdantes : " & Lost & " (" & ARRONDI(Lost/Trade*100,2) & "%)"
Afficher ""
Afficher "Total des gains : " & ARRONDI(GAINSREEL,2) &
" Des opérations gagnantes : " & ARRONDI(SomWin,2) &
" Des opérations perdantes : " & ARRONDI(SomLost,2)
Afficher "Moyenne des gains : " & ARRONDI(GAINSREEL/Trade,2) &
" Des opérations gagnantes : " & ARRONDI(SomWin/Win,2) &
" Des opérations perdantes : " & ARRONDI(SomLost/Lost,2)
Afficher ""
Afficher "Meilleur opération gagnante : " & ARRONDI(MaxWin,2) &
" Plus petite opération gagnante : " & ARRONDI(MinWin,2)
Afficher "Plus grande opération perdante : " & ARRONDI(MaxLost,2) &
" Plus petite opération perdante : " & ARRONDI(MinLost,2)
Afficher ""
Afficher "Maximum d'opérations gagnantes consécutives : " & ARRONDI(MaxNbConsWin,2) &
" Gain total : " & ARRONDI(MaxConsWin,2)
Afficher "Maximum d'opérations perdantes consécutives : " & ARRONDI(MaxNbConsLost,2) &
" Perte totale : " & ARRONDI(MaxConsLost,2)
Afficher ""
Afficher "Perte maximale atteinte en intraday (MaxIntraDrawDown) : " & ARRONDI(MaxIntraDrawDown,2) &
" (le " & DateMaxIntra$ & ")"
Afficher ""
Afficher "===================================================="
Afficher ""
FinSi
// Calcul cours de l'opération
Si P1=0 Alors
CoursOper = Cloture // Opération au cours de Cloture si P1=0
Sinon
Si RANGHISTO=FINHISTO Alors Stop
Si P1=1 Alors CoursOper = Ouverture(-1) // Opération au cours d'ouverture du jour suivant si P1=1
Sinon CoursOper = (Haut(-1) + Bas(-1) + Cloture(-1)) / 3 // Opération au cours moyen du jour suivant si P1=2
FinSi
Si RANGHISTO = 1 Alors // Début historique
Cours0 = CoursOper
Pos = SIGNALSTOP
CoursDebOper = CoursOper
Stop
FinSi
// Stop de protection
Si P2>0 ET Pos<>0 ET SIGNALSTOP=0 Alors
Si Pos>0 Alors Perte = (CoursDebOper-Bas)/CoursDebOper
Sinon Perte = (Haut-CoursDebOper)/CoursDebOper
Si Perte >= P2% Alors
SIGNALSTOP = -2 * Pos
CoursOper = CoursDebOper * (1-Pos*P2%)
Si CoursOper>Haut Alors CoursOper = Haut
Si CoursOper<Bas Alors CoursOper = Bas
Finsi
FinSi
// Calcul de la courbe des Gains
PlusValue = (CoursOper - CoursDebOper) * Pos
GAINS = GAINSREEL + PlusValue
BUYANDHOLD = CoursOper - Cours0
// Calcul du MaxIntraDrawDown
Si Pos<>0 Alors
Si Pos>0 Alors Perte = Bas-CoursDebOper
Sinon Perte = CoursDebOper-Haut
Si Perte>0 Alors Perte = 0
PerteTotale = (GAINSREEL-MaxGains)+Perte
Si PerteTotale<MaxIntraDrawDown Alors
MaxIntraDrawDown = PerteTotale
DateMaxIntra$ = DateHisto$
FinSi
FinSi
// Calcul des statistiques de fin d'opération
Si Pos<>SIGNALSTOP ET SIGNALSTOP<>0 ET Pos<>0 Alors
Trade = Trade+1
Si GAINS>MaxGains Alors MaxGains = GAINS
Si PlusValue>0 Alors
Win = Win+1
SomWin = SomWin+PlusValue
Si Win=1 Alors MinWin = PlusValue
Si PlusValue<MinWin Alors MinWin = PlusValue
Si PlusValue>MaxWin Alors MaxWin = PlusValue
ConsWin = ConsWin+PlusValue
Si ConsWin>MaxConsWin Alors MaxConsWin = ConsWin
NbConsWin = NbConsWin+1
Si NbConsWin>MaxNbConsWin Alors MaxNbConsWin = NbConsWin
ConsLost = 0
NbConsLost = 0
Sinon
Lost = Lost+1
SomLost = SomLost+PlusValue
Si Lost=1 Alors MinLost = PlusValue
Si PlusValue>MinLost Alors MinLost = PlusValue
Si PlusValue<MaxLost Alors MaxLost = PlusValue
ConsLost = ConsLost+PlusValue
Si ConsLost<MaxConsLost Alors MaxConsLost = ConsLost
NbConsLost = NbConsLost+1
Si NbConsLost>MaxNbConsLost Alors MaxNbConsLost = NbConsLost
ConsWin = 0
NbConsWin = 0
FinSi
FinSi
// Affichage des opérations si P3=1
Si P3=1 ET Pos<>SIGNALSTOP ET SIGNALSTOP<>0 ET Pos<>0 Alors
Si Pos>0 Alors Operation$="ACHAT" Sinon Operation$="VENTE"
DateFinOper$ = DateHisto$
Afficher Operation$ & " " &
DateDebOper$ & " " & CTXT$(CoursDebOper,2) & " " &
DateFinOper$ & " " & CTXT$(CoursOper,2) & " " &
CTXT$((CoursOper-CoursDebOper)/CoursDebOper*Pos*100,2) & "%"
FinSi
// Début d'une nouvelle opération (ou seulement fin de la précédente)
Si Pos<>SIGNALSTOP ET SIGNALSTOP<>0 Alors
GAINSREEL = GAINS
Si ABSOLU(SIGNALSTOP)=1 ALors // Début d'une nouvelle opération
Pos = SIGNALSTOP
CoursDebOper = CoursOper
DateDebOper$ = DateHisto$
Sinon
Pos = 0 // Arrêt de l'opération à cause d'un stop loss
FinSi
Finsi
<center><img src='http://images.pro-at.com/200606/b/fin.png' alt='' /></center>
RESULTAT DES COURSES A SUIVRE ...
Commentaire
-
La HULL suite ...
Reprenons notre graph de départ sur lequel on la HULL 10 sur le CAC Daily :
<center><img src='http://images.pro-at.com/200606/b/cac5.png' alt='' /></center>
Si on fait un backtest avec notre oeil <img src='http://www.pro-at.com/style/images/icones/icon_smile_blush.gif' border='0' alt='' title='' align='middle' /> ... on va avoir un signal de vente (ou achat) sur la barre où est indiquée la flèche et donc, on passe Acheteur (ou vendeur) à l'open de la barre suivante (Soit Barre +1).
Pour faire cela, il faut juste modifier le programme "Trading system HULL" donner ci-dessus par le programme suivant :
<font color="blue">//=================
// Trading System 2
//=================
// Similaire à "Trading System" avec en plus utilisation de la fenêtre
// d'affichage des règles pour un rapport de backtest (voir règle "Trad Gains 2")
//1er système (voleur d'une barre)
//Système basé sur la concavité de la moyenne de HULL
ACHAT=HULL.M_HULL_V1(1)=0 ET HULL.M_HULL_V1<>0
OU
HULL.M_HULL_V2(1)=0 ET HULL.M_HULL_V2<>0
VENTE=HULL.M_HULL_R1(1)=0 ET HULL.M_HULL_R1<>0
OU
HULL.M_HULL_R2(1)=0 ET HULL.M_HULL_R2<>0
// Signal Achat/Vente : 1 = Achat, 0 = Neutre, -1 = Vente
SIGNAL = Achat - Vente</font id="blue">
Si on backtest dans ces conditions nous avons les résultats suivants depuis 1991 :
<font color="blue">======== Statistiques sur les opérations d'Achat/Vente SUR HULL
Nombre d'opérations : 741 Gagnantes : 483 (65,18%) Perdantes : 258 (34,82%)
Total des gains : 34344,92 Des opérations gagnantes : 42990,5 Des opérations perdantes : -8645,58
Moyenne des gains : 46,35 Des opérations gagnantes : 89,01 Des opérations perdantes : -33,51
Meilleur opération gagnante : 996,39 Plus petite opération gagnante : 0,29
Plus grande opération perdante : -232,33 Plus petite opération perdante : -0,2
Maximum d'opérations gagnantes consécutives : 11 Gain total : 1700,38
Maximum d'opérations perdantes consécutives : 6 Perte totale : -481,98
Perte maximale atteinte en intraday (MaxIntraDrawDown) : -596,17 (le 13/04/2000)</font id="blue">
Le résultat est tout aussi bon sur les actions ... vous pouvez le vérifier en cliquant sur le menu "Règle" puis sur "Fenêtre d'affichage" pour avoir les résultat du backtest et le détail des opérations.
seulement il y a un Hic .. cette visualisation triche sur la réalitée.
En fait on détecte le retournement de la HULL non pas sur la flèche mais sur le cours de cloture de la barre d'après (barre +1 par rapport à la flèche) et donc on ne peut rentrer en position qu'à l'ouverture de la barre +2 (toujours par rapport à la flèche) comme indiqué ci-dessous :
<center><img src='http://images.pro-at.com/200606/b/cac6.png' alt='' /></center>
En fait le signal de retournement représenté par la flèche est décalé d'une barre comme dans le programme d'origine que je vous ai fourni dans les outils ci-dessus et voici les conséquences sur le graph INGENICO
<center><img src='http://images.pro-at.com/200606/b/d%e9cal%e9.png' alt='' /></center>
Et là cela change tout dans le résultat car ce lag d'une barre supplémentaire (en entrée ... mais aussi en sortie ) nous en met plein les gencives.
Voici la comparaison des résultats du backtetst avec INGENICO en daily :
Backtest "avec l'oeil" :
<font color="blue">======== Statistiques sur les opérations d'Achat/Vente SUR HULL
Nombre d'opérations : 247 Gagnantes : 167 (67,61%) Perdantes : 80 (32,39%)
Total des gains : 139,7 Des opérations gagnantes : 169,34 Des opérations perdantes : -29,64
Moyenne des gains : 0,57 Des opérations gagnantes : 1,01 Des opérations perdantes : -0,37
Meilleur opération gagnante : 6,21 Plus petite opération gagnante : 0,01
Plus grande opération perdante : -2,21 Plus petite opération perdante : 0
Maximum d'opérations gagnantes consécutives : 12 Gain total : 16,85
Maximum d'opérations perdantes consécutives : 6 Perte totale : -5,69
Perte maximale atteinte en intraday (MaxIntraDrawDown) : -10,92 (le 17/05/2001)</font id="blue">
Backtest en condition réelle (on rentre à l'open après la close de détection de l'inversion de la HULL) :
<font color="blue">======== Statistiques sur les opérations d'Achat/Vente SUR HULL
Nombre d'opérations : 247 Gagnantes : 101 (40,89%) Perdantes : 146 (59,11%)
Total des gains : 5,43 Des opérations gagnantes : 90,54 Des opérations perdantes : -85,11
Moyenne des gains : 0,02 Des opérations gagnantes : 0,9 Des opérations perdantes : -0,58
Meilleur opération gagnante : 5,5 Plus petite opération gagnante : 0,01
Plus grande opération perdante : -4 Plus petite opération perdante : 0
Maximum d'opérations gagnantes consécutives : 5 Gain total : 8,84
Maximum d'opérations perdantes consécutives : 8 Perte totale : -6,07
Perte maximale atteinte en intraday (MaxIntraDrawDown) : -16,27 (le 24/09/2001)</font id="blue">
Si vous regardez d'autres titres, on passe très souvent ... directement en négatif .. et tout cela pour un retard d'entrée en position d'une barre.
La question à laquelle je n'ai pas de réponse ... comment peut t-on regagner au minimum cette barre :
- Rajouter un indicateur complémentaire .. lesquels?
- Anticiper le retournement .. comment ?
- C'est un système Stop and Reverse .. est ce la bonne utilisation?
- Faut il l'utiliser autrement d'une autre façon (ex : uniquement en période de tendance ..
Voili voilo.
Bien évidemment, ce post n'a été possible qu'avec les compétences de Smallcaps <img src='http://www.pro-at.com/style/images/icones/icon_hippy.gif' border='0' alt='' title='' align='middle' /> ...
FOKI
Commentaire
-
Bonjour FOKI,
Bonne idée d'étendre le travail collaboratif ici même sur le sujet après nos nombreux contacts en PV.
"Prediction is difficult, especially of the future!..." affirmait Niels Bohr, néanmoins, l'anticipation potentielle des points de retournements de la moyenne de Hull pourrait s'envisager de plusieurs façons.
Je propose dans un premier temps la solution suivante : à l'image de ce que j'avais fait sur le "Slope Volatility Predictor", on pourrait chercher la position des points d'inflexion sur la moyenne de Hull.
Points d'inflexion?... Oui, les points d'infexion de la Hull caractérisent un infléchissement du trend en cours, à qq barres près évidemment compte tenu du lag inhérent à tout type de moyenne, la Hull malgré ses qualités intéressantes de lissage n'échappant pas à ce lag même si celui-ci est inférieur à celui d'autres types de moyennes pour une valeur identique du recul de calcul.
Les points d'inflexion de la Hull en fait nous les avons déjà (à une barre près) avec l'indicateur "Conv_Conc_Hull", lorsqu'il passe de HAUSSE_DEBUT à HAUSSE_FIN ou de BAISSE_DEBUT à BAISSE_FIN et inversement.
Voyons néanmoins ce que donnerait cette autre idée qui avait été utilisée dans le "Slope Volatility Predictor" et qui consistait à interpoler la courbe étudiée par des splines cubiques, grâce à quoi on disposait immédiatement de la valeur de la dérivée première à la courbe interpolée et de celle de sa dérivée seconde à chaque période.
Si on opère de même ici, le programme : "Hull_Pics_Creux" suivant programme un indicateur qui permet de trouver immédiatement non seulement les pics et les creux de la moyenne de Hull aux points d'annulation de l'indicateur mais aussi les points d'inflexion de la Hull aux points de retournements de l'indicateur lui-même, c'est à dire à ses pics et ses creux.
Programme :
//===============
//HULL_PICS_CREUX
//===============
//Détermination des pics et creux de la moyenne de Hull du prog HULL
//par interpolation à l'aide de splines cubiques naturelles et
//approximation de la vitesse de variation de la moyenne de Hull.
//smallcaps.90 le 23/05/2006
//
//Moyenne de Hull
//
MOY_HULL(0)=HULL.M_HULL
SI RANGHISTO=FINHISTO //Après calcul global de la moyenne(?)
ALORS
POUR FINHISTO COURS
SI (RANGHISTO>1) ET (RANGHISTO<FINHISTO)
ALORS
ALPHA(0)=3*(MOY_HULL(-1)-2*MOY_HULL(0)+MOY_HULL(1))
FINSI
FINPOUR
POUR FINHISTO COURS
SI RANGHISTO=1
ALORS
L(0)=1
U(0)=0
Z(0)=0
FINSI
SI (RANGHISTO>1) ET (RANGHISTO<FINHISTO)
ALORS
L(0)=4-U(1)
U(0)=1/L(0)
Z(0)=(ALPHA(0)-Z(1))/L(0)
FINSI
SI RANGHISTO=FINHISTO
ALORS
L(0)=1
Z(0)=0
C(0)=Z(0)
FINSI
FINPOUR
POUR FINHISTO COURS
SI RANGHISTO=1
ALORS
J=-FINHISTO+RANGHISTO+1
FINSI
SI RANGHISTO<=FINHISTO //rétropropagation
ALORS
C(J)=Z(J)-U(J)*C(J-1)
B(J)=MOY_HULL(J-1)-MOY_HULL(J)-(C(J-1)+2*C(J))/3
D(J)=(C(J-1)-C(J))/3
J=J+2
FINSI
FINPOUR
POUR FINHISTO COURS //Dérivées première et seconde
SI RANGHISTO<FINHISTO
ALORS
FPRIME(0)=B(0)
FSECONDE(0)=2*C(0)
FINSI
SI RANGHISTO=FINHISTO
ALORS
FPRIME(0)=B(1)+2*C(1)+3*D(1)
FSECONDE(0)=2*C(1)+6*D(1)
FINSI
FINPOUR
FINSI
//Traitement de la dérivée par triple lissage de son momentum
SI RANGHISTO=FINHISTO
ALORS
POUR FINHISTO COURS
MomP(0)=FPRIME-FPRIME(P5)
//MomS(0) = FSECONDE-FSECONDE(P5)
//Triple lissage exponentiel du momentum de la dérivée première
//
M1(0)=EXPOSUIV(M1,MomP,P1)
M2(0)=EXPOSUIV(M2,M1,P2)
M3(0)=EXPOSUIV(M3,M2,P3)
ABSMomP=ABSOLU(MomP)
M4(0)=EXPOSUIV(M4,ABSMomP,P1)
M5(0)=EXPOSUIV(M5,M4,P2)
M6(0)=EXPOSUIV(M6,M5,P3)
HULL_PICS_CREUX=100*(M3/M6)
DERPREMIERE=FPRIME
DERSECONDE(0)=FSECONDE
M_DERPREM=PONDERE(2*PONDERE(DERPREMIERE,P1/2)-
PONDERE(DERPREMIERE,P1),RACINE(P1))
//M_DERSEC=PONDERE(2*PONDERE(DERSECONDE,P1/2)-
//PONDERE(DERSECONDE,P1),RACINE(P1))
//-----------------Extremas de HULL_PICS_CREUX
//
SI M_DERPREM(2)<M_DERPREM(1) et M_DERPREM(1)>M_DERPREM(0)
ALORS
SOMMETS_HAUTS(1) = 1
FLECHE_BLEUE(1)=(SOMMETS_HAUTS(1)*M_DERPREM(1))*(M_DERPREM(1)>0)
*(CONV_CONC_HULL.HAUSSE_DEBUT(1)<>0 OU CONV_CONC_HULL.HAUSSE_FIN(1)<>0)
FINSI
SI M_DERPREM(2)>M_DERPREM(1) et M_DERPREM(1)<M_DERPREM(0)
ALORS
SOMMETS_BAS(1) = 1
FLECHE_ROUGE(1)= SOMMETS_BAS(1)*M_DERPREM(1)*(M_DERPREM(1)<0)
*(CONV_CONC_HULL.BAISSE_DEBUT(1)<>0 OU CONV_CONC_HULL.BAISSE_FIN(1)<>0)
FINSI
FINPOUR
FINSI
//fin du code
Propriétés :
<center><img src='http://images.pro-at.com/200606/b/prop_pic_et_creux.gif' alt='' /></center>
Pour ce qui est du CAC40 :
<center><img src='http://images.pro-at.com/200606/b/cac40_1.gif' alt='' /></center>
Les flèches bleues et rouges repèrent les extremas de l'indicateur. Les pics (flèches bleues) ne seront validés que s'ils ont lieu pour une valeur positive de l'indicateur qui rappelons-le ne représente pas autre chose que la valeur de la pente de la Hull, donc de sa dérivée première. A une valeur positive de l'indicateur correspond un trend haussier sur la Hull.
De même les flèches rouges retenues ne valident que les creux pour lesquels la pente de la Hull est négative (trends baissiers).
Si l'on s'appuie par exemple sur le petit trend haussier du CAC40 de fin avril 2006, on constate bien qu'aux points 1 et 3 l'indicateur "Hull_Pics_Creux" s'annule et la Hull admet un pic en 1 et un creux en 3.
Si maintenant on s'intéresse au pic de l'indicateur repèré 2 sur le graphe, il lui correspond sur la Hull un point d'inflexion où la courbure de la Hull change de convexe en concave. Le point correspondant sur : "Conv_Conc_Hull" est encore en période HAUSSE_DEBUT (vert foncé) mais après la période suivante il passe en HAUSSE_FIN (vert clair).
Le point des cours correspondant au point 2 d'inflexion de la Hull se situe 4 périodes avant le pic 3.
Ce qui anticipe confortablement le point de fin du trend haussier et peut permettre de se préparer à sortir dans une position plus avantageuse qu'au point 3.
Malheureusement, il existe des cas pour lesquels l'anticipation de la fin d'un trend par recherche des points d'inflexion de la Hull, s'avère être trop ... anticipée. Effectivement, tous les trends n'ont pas la régularité de celle de l'exemple ci-dessus. Regardez Total avec une Hull 20 périodes courant mars et avril 2006 par exemple :
<center><img src='http://images.pro-at.com/200606/b/total_trend2.gif' alt='' /></center>
Le trend haussier qui s'y est développé est formé d'une succession de 4 sous-trends haussiers ayant chacun son point d'inflexion (4 points d'inflexions utiles repèrés par les 4 flèches bleues de l'indicateur en zone positive).
A l'évidence, se préparer à sortir après le point 1 ou le point 2 serait prématuré. La position idéale se situerait plutôt après le point 3, légèrement avant le point 4.
Pour information chaque tiret rouge, repèré de 1 à 4 sur les cours, correspond au niveau que devrait prendre la clôture à la future période pour que la Hull présente un point de retournement à la prochaine période justement (le programme de recherche de ces valeurs sera communiqué dans un prochain post car le sujet qu'il traite constitue un assez gros pavé à lui seul)...
Les clôtures futures des points 1 et 2 ont peu de chances d'êtres atteintes à moins de gaps importants à venir...Par contre le niveau qui correspond au point 3 est tout à fait atteignable vu la proximité plus étroite qu'il a avec les cours. Un indicateur montrant l'écart qui existe entre HUll et clôtures futures de 1 à 4 visualise bien le fait que l'écart diminue sensiblement pour le point d'inflexion 3.
<center><img src='http://images.pro-at.com/200606/b/total2_trend1.gif' alt='' /></center>
Bien entendu nous sommes dans le plausible donc dans le flou en faisant cette constatation, mais voici néanmoins une information supplémentaire qui pourrait s'avérer précieuse pour prendre ou non en compte un point d'inflexion sur l'indicateur sous les cours et donc tenter d'anticiper une possible fin du trend...tout ceci sans aucune garantie bien sûr...
Comment valider ou invalider un tel niveau possible?
Reste également à voir ce que donnerait un backtest avec ces nouvelles infos....
N'hésitez pas à vous exprimer sur le sujet...tous les avis sont les bienvenus!
Cordialement.
Commentaire
-
Bonjour Smallcaps
Je viens de mettre ton prog et cela fonctionne chez moi .. j'ai toutefois eu un petit soucis car tu fais référence dans ton programme à "CONV_CONC_HULL" et moi jamais nommé mon programme "Convexe_Concave" ... évidemment, il ne connaissait pas ce programme.
J'ai donc corrigé le nom de mon programme dans mon post de présentation , il faut bien mettre comme indiqué maintenant soit :
<center><img src='http://images.pro-at.com/200606/b/ss1.png' alt='' /></center>
FOKI
Commentaire
-
hello: peut on faire des stats (ou un backtest) sur le portefeuille?
Exemple: admettons que j'ai depuis le 15/11/2003 la valeur Sphinx dans mon portefeuille.
Depuis cette date j'ai fait avec elle de nombreux aller retour (le nombre de titres n'étant jamais identique), je souhaiterai connaitre :
1) le nombre d'opérations réalisées depuis une date à définir (1/1/2004 ) puis une autre date (01/06/2005) par exemple.
2) les gains (ou pertes réalisées) avec cette valeur depuis la date choisie
3) le PRU des titres que j'ai actuellement en portefeuille depuis une date choisie
4) et pour ceux qui ont plusieurs comptes avec la valeur Sphinx, peut on globaliser le tout sur tous les portefeuilles?
Commentaire
Commentaire