Problème de condition avec le symbole différent

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

    Bonsoir,

    Je test une stratégie et je veux qu’elle ne se lance qu’une fois par jour.
    Alors oui il y a notamment:
    https://www.prorealcode.com/topic/code-une-question/

    Mais je veux pouvoir tester 2 fois par jour, 3 fois par jour etc…

    ...
    ONCE iteration    = 1
    iterationMax      = 2
    ONCE jour = dayofweek
    ...
    IF jour <> dayofweek THEN
    iteration = 1
    jour = dayofweek
    ENDIF
    
    ...
    
    IF timeAchat AND NOT ONMARKET AND ... AND iteration <= iterationMax THEN
    SELLSHORT 3 LOT AT MARKET
    set stop ploss 3
    iteration  = iteration + 1
    ENDIF
    
    GRAPH iteration
    GRAPH jour
    GRAPH dayofweek

    Pour plus de clarté je n’ai pas mis mon script en entier juste ce qui pause problème.
    Les GRAPH sont correct mais si je mets:

    IF jour <> dayofweek THEN 
    iteration = 0
    jour = dayofweek 
    ENDIF

    C’est à dire “0” pour iteration à chaque changement de journée, en fait le GRAPH m’indique qu’il est à 0 tout le temps…
    Dans l’exemple, iteration passe bien à 2 lors d’un achat, mais juste pour 1 bougie. Il revient aussitôt à 1 et donc, la condition ” iteration <= iterationMax” est à nouveau vrai alors qu’elle devrait être fausse jusqu’à 23h59.

    Vous l’avez compris, l’objectif est de pouvoir changer “interationMax” comme je veux afin d’avoir autant d’achat que je veux.

    Une idée svp ?

    #142680 quote
    Nicolas
    Keymaster
    Master

    Tu n’as pas supprimé “ONCE iteration    = 1″ en tête de ton code peut être ?

    #142683 quote
    imencity
    Participant
    Senior

    Mais le ONCE n’est effectué qu’une seule fois non ?

    ou à chaque chargement du code ?

    je croyais que c’était valable que pour le premier lancement du script et que pour les bougies suivantes ce n’était pas exécuté.

    #142689 quote
    OLG
    Participant
    Junior

    Si j’ai bien compris tu veux que ton système ne place qu’un seul ordre par jour ?

    Si c’est ca alors tu peux simplifier ton code :

    ONCE jour = 100 //utile uniquement pour que le jour où tu le lances il s'execute une fois
     
    IF timeAchat AND NOT ONMARKET AND ... AND jour <> dayofweek THEN
    jour = dayofweek
    SELLSHORT 3 LOT AT MARKET
    set stop ploss 3
    ENDIF
     
    GRAPH jour
    GRAPH dayofweek

    Et pour répondre à ta question, oui le code ONCE n’est exécuté qu’a la première itération de chaque lancement (si tu arrêtes et relances il se ré execute une fois)

    #142692 quote
    imencity
    Participant
    Senior

    oui je veux 1 ordre par jour, OU 2 ordres par jours, OU 3…

    d’où la variable « iteration ».

    Le ONCE n’est bien exécuté qu’à la toute première bougie ?

    et ensuite il devrait être égale 2 tous le temps sauf en cas de changement de journée ? J’ai l’impression que le symbole « <> » ne fonctionne pas en fait.

    #142714 quote
    OLG
    Participant
    Junior

    Ok je n’avais pas compris, ton code me semble bon après une rapide itération de tête (même si pas optimisé), ce qui me fait dire que l’erreur vient du code que tu as supprimé pour plus de clarté.

    Pour être le plus clair possible, le ONCE est exécuté à la première itération de ton code. Ton code est itéré (exécuté) à chaque clôture de bougie. Et ce sur l’historique que tu as sélectionné dans le cas d’un BackTest ou d’un indicateur.

    #142727 quote
    Nicolas
    Keymaster
    Master

    ONCE est en effet utilisé qu’une seule fois à la première lecture du code (1ère bougie). J’ai fait la remarque car je ne savais pas si le problème était à la première itération ou sur toutes les autres également ? Comme le stipule OLG, il y a sans doute autre chose à creuser dans le code complet ?

    DayOfWeek = tu devrais remplacer avec OpenDayOfWeek.

    Pour le reset de variables au début d’une journée, j’ai l’habitude d’utiliser plutôt ceci :

    if day<>day[1] OR intradaybarindex= 0 then //2 précautions ! 
     var = 0 //reset 
    endif
    #142734 quote
    imencity
    Participant
    Senior

    Merci de vos réponses.

    Je confirme que le problème vient, pour une raison que j’ignore, de:

    IF jour <> dayofweek THEN
    iteration = 1
    jour = dayofweek
    ENDIF

    Car si je mets:

    IF jour <> dayofweek THEN
    iteration = 2
    jour = dayofweek
    ENDIF

    Alors le graph me mets en 2 à après chaque fin de position.
    ET:
    Le problème est résolu en adoptant ta solution, Nicolas. Ce code fonctionne parfaitement, en remplacement du mien, sans rien toucher d’autre.

    if day<>day[1] OR intradaybarindex= 0 then //2 précautions !
    iteration = 1 //reset
    endif

    A croire que <> ne fonctionne pas et que le contenu est exécuté à chaque bougie. Pourtant graph bougie est bien différent de graph DayOfWeek.

    Enfin bon c’est résolu, merci 😉

    #143017 quote
    Nicolas
    Keymaster
    Master

    Si tu GRAPH dayofweek, tu y verras peut être plus clair. As-tu essayé OpenDayOfWeek, comme je te le faisait remarquer plus haut ?

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

Problème de condition avec le symbole différent


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
imencity @imencity Participant
Summary

This topic contains 8 replies,
has 3 voices, and was last updated by Nicolas
5 years, 6 months ago.

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