Problème 1 achat par jour avec TF

Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
    Posts
  • #142981 quote
    imencity
    Participant
    Senior

    Bonjour,

    Je reprends ma question d’ici:
    https://www.prorealcode.com/topic/probleme-de-condition-avec-le-symbole-different/
    Puisque j’ai identifié la cause et qui m’amène à une autre question…

    … et c’est encore un TF.

    Voici un code d’exemple:

    defparam cumulateorders=false
    
    timeAchat = TIME > 090000 AND TIME < 171500
    indicator1 = Average[7](close)
    indicator2 = Average[15](close)
    
    ONCE iteration    = 1
    iterationMax      = 1
    
    if day<>day[1] OR intradaybarindex= 0 then //2 précautions !
    iteration = 1 //reset
    endif
    
    CA1 = indicator1 CROSSES UNDER indicator2
    
    IF timeAchat AND NOT ONMARKET AND CA1 AND iteration <= iterationMax THEN
    iteration  = iteration + 1
    SELLSHORT 1 LOT AT MARKET
    set target Pprofit 4
    set stop ploss 2
    ENDIF
    

    Sur DAX en 10 secondes. On a bien une transaction par jour.

    Voici le même code avec TF M1:

    defparam cumulateorders=false
    TIMEFRAME(1 minute)
    
    timeAchat = TIME > 090000 AND TIME < 171500
    indicator1 = Average[7](close)
    indicator2 = Average[15](close)
    
    ONCE iteration    = 1
    iterationMax      = 1
    
    if day<>day[1] OR intradaybarindex= 0 then //2 précautions !
    iteration = 1 //reset
    endif
    
    CA1 = indicator1 CROSSES UNDER indicator2
    
    IF timeAchat AND NOT ONMARKET AND CA1 AND iteration <= iterationMax THEN
    iteration  = iteration + 1
    SELLSHORT 1 LOT AT MARKET
    set target Pprofit 4
    set stop ploss 2
    ENDIF
    

    Pourquoi as-t-on parfois plus de 10 transactions ?

    D’ailleurs sur le code sans TF qui fonctionne, je note un bug car le système indique 2,11 ordres par jours: mais il n’y en a QUE 2.
    D’où sort le “,11” ?

    Merci de vos réponses. J’ai vraiment du mal avec le TF… on dirait qu’il remet le ONCE à zéro à chaque itération…

    ordre-TF.jpg ordre-TF.jpg
    #143024 quote
    Nicolas
    Keymaster
    Master

    Pour le deuxième code, tu le lances dans quel TF ? Si tu veux qu’il fonctionne en TF 1-minute, et que le code ne comporte qu’une seule instruction TIMEFRAME, il est inutile de la déclarer. Il suffit simplement de lancer la stratégie dans le TF désiré qu’on choisit dans la liste déroulante des UT du graphique.

    #143027 quote
    imencity
    Participant
    Senior

    Oui il ne comporte pour l’instant qu’une instruction. C’est un TF M1 lancé sur du 10 sec.

    évidemment je pourrais enlever le TF mais ce n’est pas la réponse… normalement je ne devrais pas avoir d’autres résultats que le même sans TF. C’est là le problème.

    et je n’aborde pas le fait que les achats ventes sont totalement différentes dans d’autres test avec le meme type de tests 😉

    #143143 quote
    imencity
    Participant
    Senior

    Personne n’a de solution pour ce bug très gênant ?

    Cette partie est une portion de code d’une stratégie qui bug. J’ai réussi à isoler le problème qui est le TF sans trouver de solution…

    #143181 quote
    Nicolas
    Keymaster
    Master

    J’ai un peu de mal à suivre désolé .. 🙂

    J’essai de comprendre pourquoi le comportement est différent, la variable “iteration” ne devrait pas se reset à 1 dés qu’un ordre est passé (voir image jointe), je vais me renseigner.

    Par ailleurs cette version du code fonctionne: (utilisation de timeframe(default)) :

    defparam cumulateorders=false
    defparam preloadbars=0
    
    TIMEFRAME(1 minute)
    
    timeAchat = TIME > 090000 AND TIME < 171500
    indicator1 = Average[7](close)
    indicator2 = Average[15](close)
    
    //ONCE iteration    = 1
    iterationMax      = 1
    
    CA1 = indicator1 CROSSES UNDER indicator2
    
    timeframe(default)
    if day<>day[1] OR intradaybarindex= 0 then //2 précautions !
    iteration = 1 //reset
    endif
    IF timeAchat AND NOT ONMARKET AND CA1 AND iteration <= iterationMax THEN
    iteration  = iteration + 1
    SELLSHORT 1 LOT AT MARKET
    set target Pprofit 4
    set stop ploss 2
    ENDIF
    
    graph iteration
    graph day<>day[1] OR intradaybarindex= 0 coloured(255,0,0)
    defparam cumulateorders=false
    defparam preloadbars=0
    
    TIMEFRAME(1 minute)
    
    timeAchat = TIME > 090000 AND TIME < 171500
    indicator1 = Average[7](close)
    indicator2 = Average[15](close)
    
    //ONCE iteration    = 1
    iterationMax      = 1
    
    CA1 = indicator1 CROSSES UNDER indicator2
    
    if day<>day[1] OR intradaybarindex= 0 then //2 précautions !
    iteration = 1 //reset
    endif
    IF timeAchat AND NOT ONMARKET AND CA1 AND iteration <= iterationMax THEN
    iteration  = iteration + 1
    SELLSHORT 1 LOT AT MARKET
    set target Pprofit 4
    set stop ploss 2
    ENDIF
    
    graph iteration
    //graph day<>day[1] OR intradaybarindex= 0 coloured(255,0,0)
    EURUSD-10-seconds.png EURUSD-10-seconds.png
    #143197 quote
    imencity
    Participant
    Senior

    Merci Nicolas,

    oui je me doute que c’est bizarre et sur le multi TF je te raconte pas les écarts que j’ai pu observer.

    ca fait un moment que je tourne en rond sans avoir identifié le bug mais avec ce code très simple, on s’en rend mieux compte.

    j’attends ton retour.

    #143346 quote
    Nicolas
    Keymaster
    Master

    Non, en fait ça n’est pas un bug, mais le fonctionnement normal d’une variable dans PRT. J’aurai du identifier cela dés le début ^^ 🙄

    En effet, sur la bougie courante, les valeurs de variable ne sont pas historisées. Ici, les valeurs calculées dans la bougie M1 ne seront pas fixées tant que la bougie n’est pas clôturée, donc ta variable “iteration” ne s’incrémentera qu’une seule fois à la lecture du code (à la fin de la bougie du TF sur lequel tu as lancé le programme), puis se resettera.

    Il faut bien intégrer que : à chaque tick reçu, dans la bougie courante, les variables sont réinitialisées.

    Donc avec un code TF M1 et TF 10sec ; les variables dans le TF M1 (sans updateonclose), sont réinitialisées 6 fois (6 x 10 = 60 sec = 1 minute).

    Il y a 2 solutions:

    1. les calculs sont faits dans le TF default (comme dans la version “correct” que j’ai posté dans le précédent message)
    2. soit tu utilises des variables de type array, puisque celles-ci ne sont pas ré-initialiser dans la barre courante
    #143347 quote
    imencity
    Participant
    Senior

    Alors, honnêtement, je crois que je vrai prendre un dafalgan pour la tête 😉

    non pas que ton explication ne soit pas compréhensible, mais c’est tellement bourré (j’ai l’impression) de subtilité que pour un néophyte comme moi, c’est ces concepts sont difficiles à appréhender.

    J’ai bien remarqué une réinitialisation des variables puisqu’à chaque fois que iteration passait à 1, à la bougie suivante ça repassait à zéro.

    Ce qui pourrait être utile (mais ça existe peut-être déjà), c’est un post explicatif en deux parties par ex:
    – Ce qui est exécuté pendant la création d’une bougie c-a-d entre le open et le close (lecture du close en cours, opération mathématique à chaque tick…)
    – Ce qui est exécuté à l’open de la bougie suivante (les achats, les ventes, donc les mises à jours des variables…)

    Et pour finir donc quand tu dis: “chaque tick reçu, dans la bougie courante, les variables sont réinitialisées.” ça veut dire que le ONCE est exécuté à chaque fois ?

    #143349 quote
    Nicolas
    Keymaster
    Master

    Un bête exemple avec un indicateur :

    if close > last then 
     count=count+1
     last = close
    endif
    
    return count

    Si le prix en cours est supérieur au dernier prix enregistré dans la variable “last” alors on incrémente “count”. En live, si tu observes la bougie courante, tu verras que “count” ne s’incrémente pas. Puisque à chaque fois que le code est lu dans la bougie, tout est remis à zéro et c’est ce qui se passe exactement de la même façon dans ta stratégie.

    #143351 quote
    imencity
    Participant
    Senior

    Ok, je vais regarder cela et voir du côté des array comme tu me conseils.

    Merci de tes précieuses réponses.

Viewing 10 posts - 1 through 10 (of 10 total)
  • You must be logged in to reply to this topic.

Problème 1 achat par jour avec TF


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
imencity @imencity Participant
Summary

This topic contains 9 replies,
has 2 voices, and was last updated by imencity
5 years, 6 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 08/30/2020
Status: Active
Attachments: 2 files
Logo Logo
Loading...