ProRealTime
Pour partager sur le trading automatique, nos algorithmes, nos backtests
Répondre • Page 1 sur 1

Code sous 3 timeframe

par dav » 18 janv. 2021 20:01

J'aimerais bien écrire un code approchant ma facon manuelle de trader le cac 40.
Mon approche est relativement simple et s'appuie sur 3 timeframes: 5, 15 et 30 min
Elle consiste a rentrer en position lorsque les macd se croise dans le meme sens sur les 3 graphes, tant en long qu'en short.
Je suis pas programmeur mais j'ai fait au mieux, et j'obtiens ce message:
programme.PNG
programme.PNG (17.28 Kio) Vu 714 fois
J'imagine que pour certains d'entre vous c'est trois fois rien, mais ca dépasse mes petites compétences :lol2:

Ci joint le code:

// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé

// Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position avant l'heure spécifiée
noEntryBeforeTime = 090000
timeEnterBefore = time >= noEntryBeforeTime

// Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position après l'heure spécifiée
noEntryAfterTime = 090100
timeEnterAfter = time < noEntryAfterTime

// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0

TIMEFRAME(30 minutes)

// Conditions pour ouvrir une position acheteuse
indicator1 = MACDline[7,13,5](close)
indicator2 = MACDSignal[7,13,5](close)
c1 = (indicator1 CROSSES OVER indicator2)

IF c1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
BUY 1 CONTRACT AT MARKET
ENDIF

// Conditions pour fermer une position acheteuse
indicator3 = rsi[10](close)
c2 = (indicator3 CROSSES OVER 79)
indicator4 = BollingerUp[20](close)
c3 = (close CROSSES OVER indicator4)

IF c2 OR c3 THEN
SELL AT MARKET
ENDIF

// Conditions pour ouvrir une position en vente à découvert
indicator5 = MACDline[7,13,5](close)
indicator6 = MACDSignal[7,13,5](close)
c4 = (indicator5 CROSSES UNDER indicator6)

IF c4 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF

// Conditions pour fermer une position en vente à découvert
indicator7 = rsi[10](close)
c5 = (indicator7 CROSSES UNDER 29)
indicator8 = BollingerDown[20](close)
c6 = (close CROSSES UNDER indicator8)

IF c5 OR c6 THEN
EXITSHORT AT MARKET
ENDIF

TIMEFRAME(15 minutes)

// Conditions pour ouvrir une position acheteuse
indicator1 = MACDline[7,13,5](close)
indicator2 = MACDSignal[7,13,5](close)
c1 = (indicator1 CROSSES OVER indicator2)

IF c1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
BUY 1 CONTRACT AT MARKET
ENDIF

// Conditions pour fermer une position acheteuse
indicator3 = rsi[10](close)
c2 = (indicator3 CROSSES OVER 79)
indicator4 = BollingerUp[20](close)
c3 = (close CROSSES OVER indicator4)

IF c2 OR c3 THEN
SELL AT MARKET
ENDIF

// Conditions pour ouvrir une position en vente à découvert
indicator5 = MACDline[7,13,5](close)
indicator6 = MACDSignal[7,13,5](close)
c4 = (indicator5 CROSSES UNDER indicator6)

IF c4 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF

// Conditions pour fermer une position en vente à découvert
indicator7 = rsi[10](close)
c5 = (indicator7 CROSSES UNDER 29)
indicator8 = BollingerDown[20](close)
c6 = (close CROSSES UNDER indicator8)

IF c5 OR c6 THEN
EXITSHORT AT MARKET
ENDIF

TIMEFRAME(5 minutes)

// Conditions pour ouvrir une position acheteuse
indicator1 = MACDline[7,13,5](close)
indicator2 = MACDSignal[7,13,5](close)
c1 = (indicator1 CROSSES OVER indicator2)

IF c1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
BUY 1 CONTRACT AT MARKET
ENDIF

// Conditions pour fermer une position acheteuse
indicator3 = rsi[10](close)
c2 = (indicator3 CROSSES OVER 79)
indicator4 = BollingerUp[20](close)
c3 = (close CROSSES OVER indicator4)

IF c2 OR c3 THEN
SELL AT MARKET
ENDIF

// Conditions pour ouvrir une position en vente à découvert
indicator5 = MACDline[7,13,5](close)
indicator6 = MACDSignal[7,13,5](close)
c4 = (indicator5 CROSSES UNDER indicator6)

IF c4 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF

// Conditions pour fermer une position en vente à découvert
indicator7 = rsi[10](close)
c5 = (indicator7 CROSSES UNDER 29)
indicator8 = BollingerDown[20](close)
c6 = (close CROSSES UNDER indicator8)

IF c5 OR c6 THEN
EXITSHORT AT MARKET
ENDIF



// Stops et objectifs
SET STOP pLOSS 10
SET TARGET pPROFIT 30

Quelqu'un aurait il la bonté de me donner un coup de pouce ? :merci:

Merci à l'avance :mercichinois:

car je suis bien incapable de corriger le programme :joker:

Re: Code sous 3 timeframe

par Toinoupa » 18 janv. 2021 20:51

Bonsoir,
As tu essayé d’attribuer des ensembles de variables différents pour chaque timeframe, car par exemple ta variable c1 est utilisé dans différentes unités de temps ?. Par exemple a1,a2,a3 pour UT15, b1, b2 b3 pour unité ut30, etc.

Re: Code sous 3 timeframe

par dav » 18 janv. 2021 21:57

Bonsoir Toinoupa
J'ai essayé mais j'ai toujours le meme message d'erreur
Merci quand meme

Re: Code sous 3 timeframe

par dav » 18 janv. 2021 22:44

A priori c'est le numero d'indicateur qu'il faut modifier, et là ca semble fonctionner

Re: Code sous 3 timeframe

par dav » 19 janv. 2021 00:02

Les résultats semblent encourageants.
macd.PNG
macd.PNG (36.16 Kio) Vu 671 fois
Ce qui est étrange, c'est que je prends mon sl à 3 reprises à l'ouverture
Ouverture 9h00 fermeture 9h00 !

J'ai aussi essayé le robot sur le dax et c'est systématique à chaque perte !

Il y a surement un détail qui m'échappe

Cela vous est il dejà arrivé ??
Se prendre son sl ou ouvrant une position c'est pas normal :lol2:

Re: Code sous 3 timeframe

par Sgad » 19 janv. 2021 14:20

volatilité ++ à l'open, un SL aussi court risque de se faire toucher régulièrement ?
J'imagine que tu as observé la Bougie concernée pour déterminer ce qui s'est produit ?

Re: Code sous 3 timeframe

par dav » 19 janv. 2021 14:26

volatilité avec 10 pts en 0 s sur le cac à 9h j'ai du mal à y croire.
C'est quasiment impossible, et les gaps sont tres rares à 9h.

En 0 s ! c'est ca qui m'interpelle

Re: Code sous 3 timeframe

par Tomate74 » 23 janv. 2021 01:17

Bonsoir dav,

Il me semble qu'il te donne l heure de ta Bougie. Si tu execute en M1, il t affichera toujours des minutes "rondes" même si ton ordres est clôturé à 090005 par exemple. Il faut que tu exécutes en une seconde pour avoir l heure précise de clôture. Tu n a presque plus d historique mais ça te permettra de vérifier sur deux ou trois jours.

Sinon J ai pas regardé ton prog car c est tard, et je viens de passer la soirée sur un des miens sur lequel je bute... Je tâcherai d y jeter un oeil.
J ai commencé tout ça il y a trois semaines et mes compétences sont limitées mais je trouve ça passionnant.

Re: Code sous 3 timeframe

par AlainC » 25 janv. 2021 12:45

Le programme fait juste ce que tu lui demandes de faire. Je ne sais pas exactement quelle est ton intention, mais il y a des choses que je trouve bizarres :
1) Tu dis que tu veux entrer en position quand les MACDS croisent en même temps sur les 3 UTs, mais dans le code tu entres en position dès que le macd de l'ut croise. Donc, si à 9 heures, le macd 30 minutes croise, on ouvre une position. Si le macd M15 croise, on ouvre une autre position, idem en M5.
Si tu veux cumuler les conditions, tu dois les renommer différemment pour ne pas avoir C1 à la fois en ut 30, 15 et 5 (par exemple C1Achat30, C1Achat15 et C1Achat5 au lieu de C1), supprimer les instructions d'entrée en position dans les ut 30 et 15 et; dans l'ut 5, cumuler les critères d'entrée (par exemple, "IF C1Achat30 and C1achat15 and C1Achat5 ...")
2) Les conditions de sortie se basent sur le rsi et les BB, mais ne sont pas évaluées à l'entrée en position. Donc, si elles sont vraies à la prise de position, on sort immédiatement.
Il faudrait ajouter aux conditions d'entrée les conditions de sortie inversées, pour ne pas sortir immédiatement. Alternative : Placer les instructions de sortie avant les instructions d'entrée, pour sortir au plutôt 5 minutes après l'entrée. Tout dépend de ton intention.

Re: Code sous 3 timeframe

par souchy99 » 25 janv. 2021 12:56

RRRAAAAAHHHHHHH AlainC tu m'a devancé, le temps de créer mon compte et tu était la bien joué !
Yes ton code ne respecte pas tes spécifications, il va entrer sans se préoccuper des autres ut.

Pareil pour le no check des conditions de sorties ça peux créer une boucle de positions qui s'ouvrent et se ferment sans discontinuer sur la même Bougie. Quoique tu à mis du cross, donc c'est uniquement au niveau du cross que la condition est remplie.

Une autre hypothèse pourrait être celle du spread, cela m'arrive sur HFT tu place ton entry et sl en fonction du Bid, sauf que l'ask est à quelques points de ton SL il serait donc judicieux d'ajouter un filtre de spread.

Re: Code sous 3 timeframe

par ChristelleP » 25 janv. 2021 15:07

Souchy, avant de participer sur le forum, il faut se présenter ci-dessous :
presentation-des-membres.html

Re: Code sous 3 timeframe

par moscard » 30 janv. 2021 19:40

Bonjour dav,
Merci d'avoir posté ton code et expliqué ta méthode, les deux précédents ont déjà répondu à tes questions, je ne vais donc pas en rajouter.
Néanmoins, ton approche m'a intrigué, je me suis donc permis de prendre ton bout de code et le modifier, afin qu'il fonctionne et en le faisant prendre une position entre 9:00 et 17:30 (entre 9:00 et 9:01, ce n'est pas réaliste).
Le résultat m'a dans un premier temps bluffé, sans optimisation, on obtient 66% de trades gagnants et un profit factor de 2.
Toutefois après un peu plus d'analyse, je me suis rendu compte que c'est en fait essentiellement la gestion du point de sortie qui génère le bénéfice. Le croisement des 3 macd (3 ut) seul arrive péniblement à 50% de trades gagnants dont à peine plus que le hasard. La gestion du point de sortie basée sur le rsi et les BB est plus prometteuse, je vais peut-être l'essayer.

Pour mieux comprendre mon approche sur les systèmes de trading automatiques, voici quelques explications
Un système de trading est construit comme suit :
1) Les filtres -> par analogie au trading manuel, il s'agit de la mise en place (set up).
Dans ton cas il n'y a qu'un filtre temporel (heures de trading). Le·s filtre·s ont pour objectif de limiter le nombre de trades aux zones ou périodes dans lesquelles la stratégie fonctionne le mieux.

2) Le déclencheur -> le point d'entrée. Dans ton cas il s'agit du croisement simultanés des macd de 3 ut.
Perso, je reste d'avis que ce déclencheur avec les filtres doit avoir au moins 65% de trades gagnants. Ce n'est donc pas le cas avec ce triple croisement de macd.

3) Gestion du point de sortie, dans ton cas rsi ou BB. et bien sûr le SL (trop faible dans ton cas pour le DAX).
La gestion du point de sortie permet de minimiser les pertes et maximiser les gains. Il peut aussi augmenter artificiellement la probabilité de trades gagnants. Je me méfie toutefois des systèmes qui ne génèrent du gain que par la gestion du point de sortie. Pour plus d'info le livre de Van Tharp sur le sujet "battre le hasard".

Pour tester le déclencheur, je code le déclencheur et les filtres, puis je pose un point de sortie symétrique, par expérience +/- 2*atr. De cette façon j'obtiens la probabilité du déclencheur.
Je n'avais jamais essayé le macd sur 3 ut différentes et cela m'a intrigué, mais finalement je suis déçu.

En clair, bien que je n'aie pas essayé, si tu enlèves le macd des trois ut. Tu entres au hasard à la hausse ou à la baisse puis tu appliques ta gestion du point de sortie basée sur le rsi et les BB dans les trois ut et avec un SL de 3*atr(5min), tu devrais obtenir à peu près les mêmes résultats, soit environ 66% de trades gagnants et un profit factor approchant 2.

Re: Code sous 3 timeframe

par moscard » 31 janv. 2021 09:21

J'ai donc essayé le rsi+BB comme point de sortie sur un de mes systèmes. Ben s'est moins bon qu'une sortie asymétrique (STOP + TARGET), désolé, l'idée était bonne.
Pour info, j'ai passé pas mal de temps à chercher des points de sortie optimisés, SuperTrend, sar, rsi et autres, mais en day trading sur les index, je n'ai pour l'instant trouvé rien de mieux qu'un stop asymétrique fonction de la volatilité. Seul le pétrole fait un peu mieux avec un stop trainant.
Il n'en va probablement pas de même en journalier (swing trading), mais le capital de départ et le risque ne sont clairement pas les mêmes.

Sujets similaires
Logiciel pour du trading automatique muti-timeframe ?
Fichier(s) joint(s) par bobbyO » 04 sept. 2015 18:33 (15 Réponses)
Multi TimeFrame Ichimoku
par fxbravo » 27 mai 2016 14:41 (0 Réponses)
Multi Timeframe sur ProOrder
par fxbravo » 05 févr. 2018 12:08 (10 Réponses)
Multi-timeframe Prorealtime
par Benoist Rousseau » 07 juil. 2018 11:16 (14 Réponses)
Le daily meilleur timeframe pour trader chaque soir ?
par Euraed » 18 janv. 2019 12:50 (2 Réponses)
UpdateOnClose de la fonction TIMEFRAME
par z0om » 29 janv. 2019 19:57 (1 Réponses)
Droite de tendance multi timeframe
par jeanroger411 » 08 mars 2020 01:09 (2 Réponses)
Code couleur qui change à chaque MàJ d'un sujet
Fichier(s) joint(s) par Saimonnn » 19 oct. 2012 21:23 (4 Réponses)
code PRT > RSBoll/Seuil backtest
par newworld » 16 juin 2013 17:57 (4 Réponses)
Le dress code de Wall Street
par ladefense92800 » 05 sept. 2013 17:04 (13 Réponses)