Horaires de trading
Forums › ProRealTime forum Français › Support ProOrder › Horaires de trading
- This topic has 24 replies, 5 voices, and was last updated 5 years ago by SuperMike.
Tagged: flatafter, flatbefore
-
-
04/03/2019 at 12:34 PM #95403
Bonjour,
Je souhaite intégrer dans mon code des horaires de trading.
Par exemple pour le Dax, trading autorisé seulement pour les horaires suivant : 9h – 17h interdire la prise de position au delà
Pour la paire Eur/Usd : 3h – 18h interdire la prise de position au delà
etc etc
Ajouter à cela l’interdiction de prendre position si le spread est plus élevé que 1.4 par exemple
J’ai regardé sur le forum et je ne trouve pas ce que je cherche….
04/03/2019 at 7:35 PM #95431bonjour,
pour les horaires le code ci joint ,mais le spread pas possible pour l’instant
cordialement
123456789101112131415ONCE MorningS = 90000ONCE MorningE = 123000ONCE AfternoonS = 130000ONCE AfternoonE = 173000// Limitation bons jours et bonnes heuresIF (DayTrading = 1) AND ((Time >= MorningS AND Time <= MorningE) OR (Time >= AfternoonS AND Time <= AfternoonE)) THENtrading = 1ELSEtrading = 0ENDIF// Ni le lundi matin avant 09h30, ni le vendredi après-midi :IF ((CurrentDayOfWeek = 1) AND (time < 093000)) OR ((CurrentDayOfWeek = 5) AND (time >= 130000)) THENtrading = 0ENDIF04/04/2019 at 7:03 AM #9544304/04/2019 at 7:06 AM #95444Je tiens d’ailleurs à dire que je rencontre des problèmes d’ailleurs avec ceci, car clairement il n’y a aucune finesse, j’ai beau essayer de mettre des minutes, rien n’y fait ; seul les heures pleines fonctionnent.
Et pire, J’ai vu bon nombres d’ordre passer le timing limite, pour au final se clôturer le lundi suivant, donc overnight tout le weekend.
Cas typique à Noël, ou jours fériés ça part dans tous les sens.
04/04/2019 at 7:35 AM #95446Les horaires renseignées dans les instructions flatafter et flatbefore doivent pouvoir être testé par l’unité de temps utilisée par le code.
Par exemple, c’est à dire que 220500 (22h05 minutes), ne sera jamais testé sur un timeframe 1 heure, puisque le code est lu au Close uniquement.
04/04/2019 at 8:30 AM #95457Il semblerait que je ne soit pas affecté par le soucis de superMike étant donné que je ne trade qu’en 1 minute. Ainsi 220500 pourra par exemple être testé. Je me trompe ?
04/04/2019 at 8:34 AM #9545804/04/2019 at 8:45 AM #95459Génial !
Merci à tous pour vos réponses.
Cependant pourrais-je avoir une piste de code, il y en a deux dans ce topic je ne sais auquel me référencer….
04/04/2019 at 9:19 AM #95461L’exemple de fifi est correct, à adapter bien entendu à tes propres horaires.
Pour mémoire et pour préciser, si on utilise flatbefore ou flatafter, toutes les positions, y compris celles en attentes, seront fermées automatiquement à ces horaires.
1 user thanked author for this post.
04/05/2019 at 10:20 AM #95516Hello tout le monde,
J’aimerai être sûr de bien comprendre… donc pour n’avoir que des positions ouvertes durant la semaine à partir du lundi 01h00 jusqu’au vendredi 22h50 voici le code qu’il faudrait mettre en place ?
12345678910111213141516171819202122ONCE Morning = 010000ONCE Evening = 225000// Limitation bons jours et bonnes heuresIF ((Time >= Morning) OR (Time <= Evening)) THENtrading = 1ELSEtrading = 0ENDIF// Ni le lundi matin avant 09h30, ni le vendredi après-midi :IF ((CurrentDayOfWeek = 1) AND (time < Morning)) OR ((CurrentDayOfWeek = 5) AND (time >= Evening)) THENtrading = 0ENDIFIF (trading = 1) AND (Conditions du système)Buy n shares at marketENDIFIF (trading = 0)SELL n SHARES AT MARKETENDIFJe dis ça car je n’arrive pas à comprendre pourquoi FLATBEFORE et FLATAFTER m’engage sur le marché avec des positions qui restent en dehors du créneau horaire que j’ai donné. Cas typique durant Noël.
Nicolas ta remarque tient-elle toujours avec le code ci-dessus ?
Les horaires renseignées dans les instructions flatafter et flatbefore doivent pouvoir être testé par l’unité de temps utilisée par le code.
Par exemple, c’est à dire que 220500 (22h05 minutes), ne sera jamais testé sur un timeframe 1 heure, puisque le code est lu au Close uniquement.
04/05/2019 at 10:55 AM #95518A la lecture du code cela semble être correct. Un simple test sour ProBacktest avec :
1GRAPH tradingte permettra de vérifier quand le trading est autorisé ou non selon ces paramètres.
Pour FLATBEFORE et FLATAFTER, voilà ce que nous explique la documentation officielle PRT:
FLATAFTER
DefParam FlatAfter =HHMMSS
Annule n’importe quel ordre en attente, ferme n’importe quelle position ouverte et empêche l’ajout éventuel d’ordres additionnels après l’heure paramétrée (en heures, minutes et secondes) dans le fuseau horaire utilisateurFLATBEFORE
Defparam FlatBefore = HHMMSS
Annule n’importe quel ordre en attente, ferme n’importe quelle position ouverte et empêche l’ajout éventuel d’ordres additionnels avant l’heure paramétrée (en heures, minutes et secondes) dans le fuseau horaire utilisateurDonc ces instructions inhibent le trading en fonction des créneaux horaires renseignés. Le cas de Noël que tu évoques, je ne comprends pas bien ? Y-at-‘il un chandelier à cette date ? Les horaires des instructions sont-elles “vues” par le timeframe employé tel que je l’expliquais ?
04/06/2019 at 8:26 AM #95597Salut à tous,
Alors je suis en train de me faire exploser le crâne… je ne comprends plus rien à la situation pour être honnête…
Voici le code que je teste très exactement sur le SP500 en 1 heure :
12345678910111213141516171819202122232425262728// Cumul des positions désactivéDEFPARAM CumulateOrders = falseMorning = 010000Evening = 220000// Limitation bons jours et bonnes heuresIF ((CurrentTime > Morning) OR (CurrentTime < Evening)) THENtrading = 1ELSEtrading = 0ENDIF// Ni le lundi matin avant Morning ni le vendredi après Evening :IF ((CurrentDayOfWeek = 1) AND (CurrentTime < Morning)) OR ((CurrentDayOfWeek = 5) AND (CurrentTime > Evening)) THENtrading = 0ENDIFIF (trading = 1) thenBUY 1 CONTRACT AT MARKETENDIFIF (trading = 0) thenSELL 1 CONTRACT AT MARKETENDIFGRAPH tradingDonc logiquement, il ne devrait y avoir des positions qui au maximum n’ont que 20 barres environ, soit 20 heures par jour.
Et bien devinez quoi… non, c’est même pire, on va jusqu’à 114 barres, on fait clairement de l’overnight… et c’est là où je ne comprends rien, car le code semble pourtant limpide.Du coup en s’intéressant à une position en particulier (voir l’image ci-jointe) celle du 25 Mai 2015, avec 114 barres justement, on constate qu’elle se prolonge jusqu’au 29 Mai 23h00 (ouch)
C’est vraiment étrange… Des explications ?
04/06/2019 at 11:00 AM #95602Je tiens à apporter également de nouveaux éléments… le ELSE !
J’avais déjà remarqué ça mais le ELSE ne fonctionne tout simplement pas sur Prorealtime, il est préférable d’éclater un gros IF avec ELSE en plusieurs IF, ce qui est vraiment pas génial pour une lecture globale…
123456789101112131415161718192021222324252627282930313233// Cumul des positions désactivéDEFPARAM CumulateOrders = falseMorning = 010000Evening = 220000// Limitation bons jours et bonnes heures// Disparition du ELSE en deux IFIF ((CurrentTime > Morning) OR (CurrentTime < Evening)) THENtrading = 1ENDIFIF ((CurrentTime < Morning) OR (CurrentTime > Evening)) THENtrading = 0ENDIF// Ni le lundi matin avant Morning ni le vendredi après Evening :IF ((CurrentDayOfWeek = 1) AND (CurrentTime < Morning)) OR ((CurrentDayOfWeek = 5) AND (CurrentTime > Evening)) THENtrading = 0ENDIFIF (trading = 1) thenBUY 1 CONTRACTS AT MARKETENDIFIF (trading = 0) thenSELL AT MARKETENDIF//GRAPH CurrentTimeGRAPH tradingAvec le code sans le ELSE on voit clairement que sur l’image en pièce jointe les positions respectent déjà plus le script.
Mais ce n’est pas tout hélas, Nicolas je te parlais de Noël et autres jours fériés, on le voit très clairement ici… le tableau présent dans l’image avec les nombres de barres.
Le lundi 25 Mai 2015, jour férié en France, l’ordre est resté sur 41 heures, il a donc dépassé les 23h00 du lundi initialement prévu dans le script, aucune logique…
Le mercredi 24 Décembre 2014, Noël férié le 25, même chose, l’ordre a dépassé la journée, pour clôturer le 26 à 23h00, soit 41 heures aussi.
Etc… il y’a un problème de clôture dans le script sans doute, mais il y’a surtout un problème du côté de Prorealtime et l’interprétation des jours. Dès qu’on touche un férié, ou une séance un peu “bizarre” ou disons écourté ou autre, le système plante.
Je suis désolé d’insister là-dessus, mais c’est une base fiable qu’il nous faut, les Backtests se plantent, et pire… si on lance un script avec des conditions pareilles bonjour les dégâts dans certaine situation.
04/06/2019 at 11:47 AM #95605Supprimer (ou commenter) les lignes 12-15.
Sur la ligne 9, utilisez AND au lieu de OR.
Insérer cette ligne avant la ligne 9:
1trading = 0Supprimez les lignes 18-19 (ou les commenter), car ils ne font rien du tout. Vous avez déjà établi aux lignes 9 à 11 qu’aucune opération ne doit être effectuée avant et après une certaine heure, quel que soit le jour.
04/06/2019 at 11:51 AM #95607Je faisais référence au message https://www.prorealcode.com/topic/horaires-de-trading/#post-95597
-
AuthorPosts
Find exclusive trading pro-tools on