stratégie avec intelligence artificielle sur le Dow Jones en 10 Minutes
Forums › ProRealTime forum Français › Support ProOrder › stratégie avec intelligence artificielle sur le Dow Jones en 10 Minutes
- This topic has 26 replies, 5 voices, and was last updated 10 months ago by JC_Bywan.
-
-
05/24/2019 at 8:34 AM #99249
Projet d’intelligence artificielle sur le Dow Jones en bougie de 10 minutes, il faudra bien vous régler sur 10 minutes ! J’ai tenté d’inculquer la réflexion et l’expérience du trader associé à des statistiques
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186defparam cumulateorders=falsedefparam preloadbars = 500n=1perte=500xx=69rem yy=30yy=30J=350pz=3py=12x=169if (dayofweek=6 or dayofweek=7) or (time<091500 or time>203000) or (time>153000 AND time<160500)or (time>194500 AND time<195500) thenjournee=0elsejournee=1endifif (highest[288](close)-close)>(close/80) or (highest[144](close)-close)>(close/85) thensensvente=1elsesensvente=1endifif (close-highest[288](close))>(close/80) or (close-highest[144](close))>(close/85) thensensachat=0elsesensachat=1endifif close>(highest[30](close)*0.99911) thenachatextrem=0elseachatextrem=1endifif close<(lowest[36](close)*1.00041) thenventeextrem=0elseventeextrem=1endifcloture=((highest[117](close)+lowest[117](close))/2)if close<(cloture-50) thencloturevente=0elsecloturevente=1endifif time<140000 and close>(cloture) thenclotureachat=1elseclotureachat=1endifstopventetemps=0elsestopventetemps=1endifif (open[4]<close[4] and open[3]<close[3] and open[2]<close[2] and open[1]>close[1]) thenstopachattemps=1elsestopachattemps=1endifratio=4.6gain2=(highest[14](close)-low)if gain2<0 thengain=(gain2*-1)/ratioelsegain=gain2/ratioendifif gain>=22 thengain=78endifif gain<=2.7 thengain=2.8endifif gain>=2.8 and gain<=9.4 thengain=94endifSET TARGET PROFIT gainSET STOP LOSS pertenombre=12couleur=7descente=0for z=1 to nombre doif open[z]>close[z] thendescente=descente+1endifnextif descente>=couleur thenachatbougie=0elseachatbougie=1endifmontee=0for y=1 to nombre doif open[y]<close[y] thenmontee=montee+1endifnextif montee>=couleur thenventebougie=0elseventebougie=1endifnombre2=7couleur2=6descente2=0for z2=1 to nombre2 doif open[z2]>close[z2] thendescente2=descente2+1endifnextif descente2>=couleur2 thenachatbougie2=0elseachatbougie2=1endifmontee2=0for y2=1 to nombre2 doif open[y2]<close[y2] thenmontee2=montee2+1endifnextif montee2>=couleur2 thenventebougie2=0elseventebougie2=1endifif open>highest[14](close) or open>(close[24]*1.014) thenachathaut=0elseachathaut=1endifif open<lowest[17](close) or open<(close[24]/1.0028) thenventebas=0elseventebas=1endifp=10q=8plusHaut = HIGHEST[p](HIGH)plusBas = LOWEST[p](LOW)oscillateur = (CLOSE - plusBas) / (plusHaut - plusBas) * 100K = AVERAGE[q,6](oscillateur)periode=34innere = 2*weightedaverage[ round( Periode/2 ) ](close)-weightedaverage[Periode](close)MM=weightedaverage[round(sqrt(periode))](innere)if (close>close[50]*1.02) or (close>close[6]*1.002) or (onmarket and (tradeprice-close)>z) or ventebougie=0 or ventebougie2=0 or close<BollingerDown[20](close)+2 or ventebas=0 or cloturevente=0 or venteextrem=0 or sensvente=0 thenstopventecalcul=0elsestopventecalcul=1endifif (close[50]>close*1.04) or (close[6]>close*1.005) or (onmarket and (tradeprice-close)<z) or achatbougie=0 or achatbougie2=0 or close>BollingerUp[20](close)+18 or achathaut=0 or clotureachat=0 or achatextrem=0 or sensachat=0 thenstopachatcalcul=0elsestopachatcalcul=1endifi1=average[3](close)c1=i1>i1[6]if stopachattemps=1 and c1 and journee=1 and k<xx and mm[1]<mm and stopachatcalcul=1 thenbuy n shares at marketendifi2=average[3](close)i3=average[5](close)c2=i2 crosses under (I3-50)if c2 and ((tradeprice-close)<pz) and (time>091000 and time<212000) thensell at marketendifperiode2=18innere2 = 2*weightedaverage[ round( Periode2/2 ) ](close)-weightedaverage[Periode2](close)MM2=weightedaverage[round(sqrt(periode2))](innere2)c3=i1<i1[6]if c3 and journee=1 and k>yy and mm2[2]>mm2 and stopventecalcul=1 and stopventetemps=1 thensellshort n shares at marketendifc4=i2 crosses OVER (i3-10)if c4 and (tradeprice-close)>pY and (time>091000 and time<212000) then//if (i1[6]-i1)<15 thenexitshort at marketendifif longonmarket and (BarIndex-TRADEINDEX)>j thensell at marketendifif shortonmarket and (BarIndex-TRADEINDEX)>j thenexitshort at marketendifif longonmarket and (BarIndex-TRADEINDEX)>x and (close-tradeprice)>5 thensell at marketendifif shortonmarket and (BarIndex-TRADEINDEX)>x and (tradeprice-close)>5 thenexitshort at marketendif1 user thanked author for this post.
05/24/2019 at 8:38 AM #99313Merci beaucoup pour le partage. J’ai volontairement basculé ton post vers le forum, j’aimerai en savoir plus sur le cheminement de l’élaboration de la stratégie, qui a vraiment piqué mon intérêt, merci.
J’ai tenté d’inculquer la réflexion et l’expérience du trader associé à des statistiques
1 user thanked author for this post.
05/24/2019 at 11:36 AM #9934905/24/2019 at 12:00 PM #99354Il manque une ligne entre 47 et 48, n'est-ce pas?
05/24/2019 at 5:23 PM #99385Bonjour à tous et merci pour votre intérêt partagé
En effet, il manque bien quelques lignes, une erreur de copier/coller, voici la version complète
Le cheminement est ultra complexe, je suis trader depuis 20 ans et j’ai souhaité transcrire ma façon de trader en algorithme
C’est en testant pendant longtemps que l’on voit qu’il fait des erreurs que l’on n’aurait pas faites et donc ensuite il faut trouver le moyen d’apprendre à l’algorithme à ne plus reproduire ces erreurs.
Cet algorithme, j’ai mis 10 mois pour le construire et il évoluera encore et encore.
L’intelligence artificielle m’intéresse et j’y travaille régulièrement.
Biensûr, il y a une faille, dans ce code par exemple, si on perd 550 points, celà fait une grosse perte mais il aura gagné bien + avant.
En général, les variations sont inférieures mais rien ne nous empêche de prévoir une perte supérieure mais dans ce cas on peut se retrouver coincé un moment et perdre + d’argent que de prendre une perte de 550 points et de repartir.
A votre disposition pour échanger et bon week-end à vous tous.
Yann.
Intelligence Artificielle en 10 min sur le Dow Jones123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185defparam cumulateorders=falsedefparam preloadbars = 500n=1perte=550xx=69yy=30J=350pz=3py=12x=169if (dayofweek=6 or dayofweek=7) or (time<091500 or time>203000) or (time>153000 AND time<160500)or (time>194500 AND time<195500) thenjournee=0elsejournee=1endifif (highest[288](close)-close)>(close/80) or (highest[144](close)-close)>(close/85) thensensvente=1elsesensvente=1endifif (close-highest[288](close))>(close/80) or (close-highest[144](close))>(close/85) thensensachat=0elsesensachat=1endifif close>(highest[30](close)*0.99911) thenachatextrem=0elseachatextrem=1endifif close<(lowest[36](close)*1.00041) thenventeextrem=0elseventeextrem=1endifcloture=((highest[117](close)+lowest[117](close))/2)if close<(cloture-50) thencloturevente=0elsecloturevente=1endifif time<140000 and close>(cloture) thenclotureachat=1elseclotureachat=1endifif (time>120000 and time<142500) or (time>100000 AND time<112000)or (time>175000 AND time<183000) or time>204000 or (open[4]>close[4] and open[3]>close[3] and open[2]>close[2] and open[1]<close[1]) thenstopventetemps=0elsestopventetemps=1endifif (open[4]<close[4] and open[3]<close[3] and open[2]<close[2] and open[1]>close[1]) thenstopachattemps=1elsestopachattemps=1endifratio=4.6gain2=(highest[14](close)-low)if gain2<0 thengain=(gain2*-1)/ratioelsegain=gain2/ratioendifif gain>=22 thengain=78endifif gain<=2.7 thengain=2.8endifif gain>=2.8 and gain<=9.4 thengain=94endifSET TARGET PROFIT gainSET STOP LOSS pertenombre=12couleur=7descente=0for z=1 to nombre doif open[z]>close[z] thendescente=descente+1endifnextif descente>=couleur thenachatbougie=0elseachatbougie=1endifmontee=0for y=1 to nombre doif open[y]<close[y] thenmontee=montee+1endifnextif montee>=couleur thenventebougie=0elseventebougie=1endifnombre2=7couleur2=6descente2=0for z2=1 to nombre2 doif open[z2]>close[z2] thendescente2=descente2+1endifnextif descente2>=couleur2 thenachatbougie2=0elseachatbougie2=1endifmontee2=0for y2=1 to nombre2 doif open[y2]<close[y2] thenmontee2=montee2+1endifnextif montee2>=couleur2 thenventebougie2=0elseventebougie2=1endifif open>highest[14](close) or open>(close[24]*1.014) thenachathaut=0elseachathaut=1endifif open<lowest[17](close) or open<(close[24]/1.0028) thenventebas=0elseventebas=1endifp=10q=8plusHaut = HIGHEST[p](HIGH)plusBas = LOWEST[p](LOW)oscillateur = (CLOSE - plusBas) / (plusHaut - plusBas) * 100K = AVERAGE[q,6](oscillateur)periode=34innere = 2*weightedaverage[ round( Periode/2 ) ](close)-weightedaverage[Periode](close)MM=weightedaverage[round(sqrt(periode))](innere)if (close>close[50]*1.02) or (close>close[6]*1.002) or (onmarket and (tradeprice-close)>z) or ventebougie=0 or ventebougie2=0 or close<BollingerDown[20](close)+2 or ventebas=0 or cloturevente=0 or venteextrem=0 or sensvente=0 thenstopventecalcul=0elsestopventecalcul=1endifif (close[50]>close*1.04) or (close[6]>close*1.005) or (onmarket and (tradeprice-close)<z) or achatbougie=0 or achatbougie2=0 or close>BollingerUp[20](close)+18 or achathaut=0 or clotureachat=0 or achatextrem=0 or sensachat=0 thenstopachatcalcul=0elsestopachatcalcul=1endifi1=average[3](close)c1=i1>i1[6]if stopachattemps=1 and c1 and journee=1 and k<xx and mm[1]<mm and stopachatcalcul=1 thenbuy n shares at marketendifi2=average[3](close)i3=average[5](close)c2=i2 crosses under (I3-50)if c2 and ((tradeprice-close)<pz) and (time>091000 and time<212000) thensell at marketendifperiode2=18innere2 = 2*weightedaverage[ round( Periode2/2 ) ](close)-weightedaverage[Periode2](close)MM2=weightedaverage[round(sqrt(periode2))](innere2)c3=i1<i1[6]if c3 and journee=1 and k>yy and mm2[2]>mm2 and stopventecalcul=1 and stopventetemps=1 thensellshort n shares at marketendifc4=i2 crosses OVER (i3-10)if c4 and (tradeprice-close)>pY and (time>091000 and time<212000) thenexitshort at marketendifif longonmarket and (BarIndex-TRADEINDEX)>j thensell at marketendifif shortonmarket and (BarIndex-TRADEINDEX)>j thenexitshort at marketendifif longonmarket and (BarIndex-TRADEINDEX)>x and (close-tradeprice)>5 thensell at marketendifif shortonmarket and (BarIndex-TRADEINDEX)>x and (tradeprice-close)>5 thenexitshort at marketendif1 user thanked author for this post.
05/24/2019 at 6:04 PM #9939005/24/2019 at 6:37 PM #99392Il faut regarder le post avant le votre ou se trouve la version complète
1 user thanked author for this post.
05/25/2019 at 1:35 PM #99425Hello,
en parcourant en diagonale votre code, je trouve pas mal de conditions qui sont mal codée (ligne 17,43,53), et mon backtest, contrairement au votre, termine en une perte totale du capital. Il faut dire que j’ai pris une plus longue période de backtest que vous.Du coup, votre code ressemble bcp à de la sur-optimisation,…
05/25/2019 at 5:02 PM #99435Bonjour Stefou102, ami belge ! j’habite à côté de Lille et j’ai de la famille Belge
Ta remarque est pertinente et en effet, les 3 conditions que tu évoques sont neutralisées car je les utilise ou pas,comme des interrupteurs
Quand je vois qu’elles sont bénéfiques je mets l’interrupteur sur 1 et quand elles ne le sont pas je mets l’interrupteur sur 0
Celà me permet de ne pas avoir à les retaper à chaque fois
Avec l’expérience, je me suis aperçu qu’il était préférable d’optimiser les algorithmes sur une période de 1 à 3 mois maximum car l’algorithme qui fonctionne bien toute l’année n’est pas efficient, je préfère les backtester sur 3 mois environ soit 10 000 bougies de 10 minutes
Il faut donc bien mettre sur la plateforme prorealtime 10 000 puis 10 minutes sur wall street mini 1€ Cfd Cash
Idéalement il faudrait aussi remplacer en lignes 142 et 147 , “z” par “pz” car “z” varie de 1 à 12 mais j’aime bien apporter un peu d’aléas dans le gain, mais pas dans la perte
Je reste à ta disposition pour tout complément d’information
05/27/2019 at 6:17 AM #9948105/27/2019 at 8:05 AM #99490Bonjour Turame,
En effet on n’obtient pas les mêmes résultats , je viens de refaire un backtest ce 27 mai à 9h00 que je joins.
Aussi, chaque backtest est différent en fonction du point de départ
Mais là je trouve qu’il y a beaucoup d’écart par rapport à celui que je viens de faire
Est ce bien la dernière version complète qui est affichée sur ce post en 2ème publication ?
05/27/2019 at 8:12 AM #99492Faut vérifier si on a les mêmes réglages horaires dans le fichier attaché
05/29/2019 at 6:07 AM #9963905/29/2019 at 6:10 AM #9964106/05/2019 at 5:45 PM #99999Bonjour Yannchev,
Merci pour ton partage. Effectivement, travailler sur la notion de répétition et de cycle est constructif (on retrouve dans ton code des nombres de Gann). Je
m’y intéresse aussi.
J’ai testé ton code sur le dax 30 en 10 mn, spread de 2 mais en fait le spread varie selon les horaires chez IG donc ce n’est pas totalement juste notamment pour la nuit ni la journée. Le résultat n’est pas positif sur 200 000 unités mais il est pertinent d’analyser dans le détail, de revoir peut-être le TP car dans plusieurs cas ton MFE est supérieur aux gains.
Le code est long, ne serait- ce pas possible de le simplifier aussi ?
Je reste à ta disposition pour échanger
-
AuthorPosts
Find exclusive trading pro-tools on