Horaires de trading

Viewing 15 posts - 1 through 15 (of 25 total)
  • Author
    Posts
  • #95403 quote
    Lorenzodb22
    Participant
    Junior

    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….

    #95431 quote
    fifi743
    Participant
    Master

    bonjour,

    pour les horaires le code ci joint ,mais le spread pas possible pour l’instant

    cordialement

    ONCE MorningS = 90000
    ONCE MorningE = 123000
    ONCE AfternoonS = 130000
    ONCE AfternoonE = 173000
    // Limitation bons jours et bonnes heures
    IF (DayTrading = 1) AND ((Time >= MorningS AND Time <= MorningE) OR (Time >= AfternoonS AND Time <= AfternoonE)) THEN
    trading = 1
    ELSE
    trading = 0
    ENDIF
    
    // Ni le lundi matin avant 09h30, ni le vendredi après-midi :
    IF ((CurrentDayOfWeek = 1) AND (time < 093000)) OR ((CurrentDayOfWeek = 5) AND (time >= 130000)) THEN
    trading = 0
    ENDIF
    #95443 quote
    SuperMike
    Participant
    Senior

    Hum… qui de :

    // Aucune création d’ordre avant 07H00
    DEFPARAM FLATBEFORE = 070000

    // Toutes les positions fermées à l’heure 23H00
    DEFPARAM FLATAFTER = 230000

    // Jours OFF Samedi
    daysForbiddenEntry = 6

    #95444 quote
    SuperMike
    Participant
    Senior

    Je 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.

    #95446 quote
    Nicolas
    Keymaster
    Master

    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.

    #95457 quote
    Lorenzodb22
    Participant
    Junior

    Il 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 ?

    #95458 quote
    Nicolas
    Keymaster
    Master

    Pas affecté en timeframe 1 minute, car on teste bien toutes les minutes le flatbefore/flatafter 🙂

    #95459 quote
    Lorenzodb22
    Participant
    Junior

    Gé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….

    #95461 quote
    Nicolas
    Keymaster
    Master

    L’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.

    fifi743 thanked this post
    #95516 quote
    SuperMike
    Participant
    Senior

    Hello 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 ?

    ONCE Morning = 010000
    ONCE Evening = 225000
    
    // Limitation bons jours et bonnes heures
    IF ((Time >= Morning) OR (Time <= Evening)) THEN
    trading = 1
    ELSE
    trading = 0
    ENDIF
     
    // Ni le lundi matin avant 09h30, ni le vendredi après-midi :
    IF ((CurrentDayOfWeek = 1) AND (time < Morning)) OR ((CurrentDayOfWeek = 5) AND (time >= Evening)) THEN
    trading = 0
    ENDIF
    
    IF (trading = 1) AND (Conditions du système)
    Buy n shares at market
    ENDIF
    
    IF (trading = 0)
    SELL n SHARES AT MARKET
    ENDIF

    Je 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.

    #95518 quote
    Nicolas
    Keymaster
    Master

    A la lecture du code cela semble être correct. Un simple test sour ProBacktest avec :

    GRAPH trading

    te 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 utilisateur

    FLATBEFORE

    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 utilisateur

    Donc 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 ?

    #95597 quote
    SuperMike
    Participant
    Senior

    Salut à 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 :

    // Cumul des positions désactivé
    DEFPARAM CumulateOrders = false
    
    Morning = 010000
    Evening = 220000
     
    // Limitation bons jours et bonnes heures
    IF ((CurrentTime > Morning) OR (CurrentTime < Evening)) THEN
    trading = 1
    ELSE
    trading = 0
    ENDIF
     
    // Ni le lundi matin avant Morning ni le vendredi après Evening :
    IF ((CurrentDayOfWeek = 1) AND (CurrentTime < Morning)) OR ((CurrentDayOfWeek = 5) AND (CurrentTime > Evening)) THEN
    trading = 0
    ENDIF
    
    IF (trading = 1) then
    BUY 1 CONTRACT AT MARKET
    ENDIF
     
    IF (trading = 0) then
    SELL 1 CONTRACT AT MARKET
    ENDIF
    
     
    GRAPH trading

    Donc 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 ?

    Capture-4.png Capture-4.png
    #95602 quote
    SuperMike
    Participant
    Senior

    Je 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…

     

    // Cumul des positions désactivé
    DEFPARAM CumulateOrders = false
    
    Morning = 010000
    Evening = 220000
     
    // Limitation bons jours et bonnes heures
    // Disparition du ELSE en deux IF
    IF ((CurrentTime > Morning) OR (CurrentTime < Evening)) THEN
    trading = 1
    ENDIF
    
    IF ((CurrentTime < Morning) OR (CurrentTime > Evening)) THEN
    trading = 0
    ENDIF
     
    // Ni le lundi matin avant Morning ni le vendredi après Evening :
    IF ((CurrentDayOfWeek = 1) AND (CurrentTime < Morning)) OR ((CurrentDayOfWeek = 5) AND (CurrentTime > Evening)) THEN
    trading = 0
    ENDIF
    
    IF (trading = 1) then
    BUY 1 CONTRACTS AT MARKET
    ENDIF
     
    IF (trading = 0) then
    SELL AT MARKET
    ENDIF
    
     
    //GRAPH CurrentTime
    
    GRAPH trading
    

    Avec 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.

    Capture-2-1.png Capture-2-1.png
    #95605 quote
    robertogozzi
    Moderator
    Master

    Supprimer (ou commenter) les lignes 12-15.

    Sur la ligne 9, utilisez AND au lieu de OR.

    Insérer cette ligne avant la ligne 9:

    trading = 0

    Supprimez 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.

    #95607 quote
    robertogozzi
    Moderator
    Master
Viewing 15 posts - 1 through 15 (of 25 total)
  • You must be logged in to reply to this topic.

Horaires de trading


ProOrder : Trading Automatique & Backtests

New Reply
Author
Summary

This topic contains 24 replies,
has 5 voices, and was last updated by SuperMike
6 years, 10 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 04/03/2019
Status: Active
Attachments: 2 files
Logo Logo
Loading...