Condition et TimeFrame

Viewing 15 posts - 1 through 15 (of 17 total)
  • Author
    Posts
  • #206784 quote
    rwanderer
    Participant
    New

    Bonjour Nicolas, bonjour à tous,

    Ccomment est-il possible d’écrire :

    Si mon UT est de 1 mn, j’affiche :

    TimeFrame (1 hour)
    TimeFrame ( 10 minute)
    TimeFrame ( 5 minute)
    TimeFrame (1 minute)

    Si mon UT est de 10 mn, j’affiche uniquement :

    TimeFrame (1 hour)
    TimeFrame ( 10 minute)
    TimeFrame ( 5 minute)
    TimeFrame (1 minute)

     

    En gros, comment émettre une condition sur la variable TimeFrame à afficher en fonction de l’unité de temps ?

    #206788 quote
    Nicolas
    Keymaster
    Master

    On ne peut pas conditionner l’instruction TIMEFRAME, c’est à dire l’inclure dans un bloc IF/ENDIF.

    Par contre, pour ce que tu souhaites faire, tu peux conditionner ce qui se passe sous chaque instruction TIMEFRAME selon ce que l’instruction GetTimeframe te renvoi (la quantité de secondes du TF).

    rwanderer thanked this post
    #206790 quote
    rwanderer
    Participant
    New

    Merci Nicolas,

     

    Seulement si je conditionne un GetTimeFrame sous une TimeFrame (10 minute) par exemple et que je souhaite passer le graph dans une UT 1H, celà ne risque t’il pas de faire planter l’indicateur ?
    Le but est que le code s’adapte à mon UT.

    #206804 quote
    rwanderer
    Participant
    New

    On ne peut pas conditionner l’instruction TIMEFRAME, c’est à dire l’inclure dans un bloc IF/ENDIF.

    Par contre, pour ce que tu souhaites faire, tu peux conditionner ce qui se passe sous chaque instruction TIMEFRAME selon ce que l’instruction GetTimeframe te renvoi (la quantité de secondes du TF).

    je bute, pourrais-tu me montrer un exemple concret stp ?

    #206822 quote
    Nicolas
    Keymaster
    Master

    Seulement si je conditionne un GetTimeFrame sous une TimeFrame (10 minute) par exemple et que je souhaite passer le graph dans une UT 1H, celà ne risque t’il pas de faire planter l’indicateur ?

    En effet, j’ai répondu trop vite, le fait d’utiliser l’indicateur sur un timeframe plus grand fera stopper l’indicateur avec la fenêtre d’erreur, même avec ma solution.

    Toutefois, sauf erreur de ma part (à tester), on peut faire un CALL d’un indicateur “esclave” qui se calcule dans un autre timeframe (et donc avec son code dessous une instruction TIMEFRAME), tout en n’utilisant aucune instruction TIMEFRAME dans l’indicateur “maître”. Donc on pourrait conditionner ces CALL selon le résultat du GETTIMEFRAME, j’espère avoir été clair 🙂

    #206825 quote
    Nicolas
    Keymaster
    Master

    La discussion porte sur la façon de créer un indicateur qui affiche des informations pour plusieurs unités de temps différentes, en fonction de l’unité de temps (UT) sélectionnée par l’utilisateur. La solution proposée consiste à utiliser l’instruction GetTimeframe pour récupérer la quantité de secondes de l’UT sélectionnée, puis à utiliser cette valeur dans des instructions if pour afficher les informations souhaitées pour chaque UT. Cependant, il a été noté que cela ne fonctionnera pas si l’UT sélectionnée est plus grande que celle pour laquelle l’indicateur a été conçu, car cela entraînera une erreur. Une autre solution proposée est de créer plusieurs indicateurs “esclaves”, chacun conçu pour fonctionner avec un UT différent, puis de les appeler à l’aide de l’instruction CALL dans l’indicateur principal, en fonction de l’UT sélectionnée par l’utilisateur. Cela permettrait de s’assurer que l’indicateur fonctionne correctement pour chaque UT sélectionnée, mais nécessiterait la création de plusieurs indicateurs distincts.

    (résumé généré par ChatGPT).

    #206831 quote
    rwanderer
    Participant
    New

    Bonjour Nicolas (et ChatGPT 🙂 ),

    J’ai anticipé hier la solution que tu propose par le biais d’un CALL depuis un autre indicateur.
    Je n’ai pas d’erreur généré mais la donnée retourné ne correspond pas.

    Dans cet exemple je cherche à récuperer dans un tableau le nombre de minute en UT5 et UT1.
    Voici une synthèse de mon code (le code est trop long sinon) pour illustrer ma tentative :

    Indicateur principal :

    UT = gettimeframe/60
    
    
    //TimeFrame (5 minute)
    
    IF UT<=5 then
    myVUT5M200,ignored  = CALL "MonCallUTF"[1,1]
    //// ******* Colonne 12 *********//
    DrawRectangle(Dr+(BoxLarge*11)-AjustBox,Ha-BoxHaut,Dr+(BoxLarge*10)-AjustBox,Ha) anchor(TopLeft) coloured(400,200,200,100) borderColor(50,10,10,80) // Boîte 2
    DrawText("5 MN",Dr+(BoxLarge*10)+(BoxLarge/2)-AjustBox, Ha-(BoxHaut/2), dialog, standard,14)anchor(TopLeft)
    
    DrawRectangle(Dr+(BoxLarge*11)-AjustBox,Ha-(BoxHaut*2),Dr+(BoxLarge*10)-AjustBox,Ha-BoxHaut) anchor(TopLeft) coloured(400,200,200,100) borderColor(50,10,10,80) //
    DrawText("#myVUT5M200#",Dr+(BoxLarge*10)+(BoxLarge/2)-AjustBox, Ha-BoxHaut-(BoxHaut/2), dialog, standard,14)anchor(TopLeft)
    ELSE
    AjustBox = BoxLarge*11
    ENDIF
     
    IF UT<=1 then
    ignored,myVUT1M200 = CALL "MonCallUTF"[1,1]
    //// ******* Colonne 13 *********//
    DrawRectangle(Dr+(BoxLarge*12)-AjustBox,Ha-BoxHaut,Dr+(BoxLarge*11)-AjustBox,Ha) anchor(TopLeft) coloured(400,200,200,100) borderColor(50,10,10,80) // Boîte 2
    DrawText("1 MN",Dr+(BoxLarge*11)+(BoxLarge/2)-AjustBox, Ha-(BoxHaut/2), dialog, standard,14)anchor(TopLeft)
    
    DrawRectangle(Dr+(BoxLarge*12)-AjustBox,Ha-(BoxHaut*2),Dr+(BoxLarge*11)-AjustBox,Ha-BoxHaut) anchor(TopLeft) coloured(400,200,200,100) borderColor(50,10,10,80) //
    DrawText("#myVUT1M200#",Dr+(BoxLarge*11)+(BoxLarge/2)-AjustBox, Ha-BoxHaut-(BoxHaut/2), dialog, standard,14)anchor(TopLeft)
    
    ELSE
    AjustBox = BoxLarge*12
    ENDIF
    
    TIMEFRAME(default)
    
    Return

    Ici mon indicateur appelé via CALL (MonCallUTF) :

    timeframe(5 minute)
    a = gettimeframe/60
     
    timeframe(1 minute)
    b = gettimeframe/60
    
     
    return a as "5SM200",b as "1SM200"

    Je devrais retourner les valeur “5” en UT5 et “1” en UT1 mais voici ce que j’obtiens dans mon tableau (les valeurs de l’unité par défaut soit 1 min) :

    Capture-du-2023-01-05-15-09-05.png Capture-du-2023-01-05-15-09-05.png
    #206837 quote
    Nicolas
    Keymaster
    Master

    Ci-joint le résultat avec un code plus simple:

    UT = gettimeframe/60
    
    IF UT<=5 then
     a,ignored  = CALL "#dev2"
    ENDIF
     
    IF UT<=1 then
     ignored,b = CALL "#dev2"
    ENDIF
    
    Return a,b

    Dans le cas du graphique courant en 5-minutes, le résultat est a=5 et b=0

    hors dans un graphique 1-minutes, tes 2 conditions sont vrais, puisque UT est à la fois inférieur à 5 et égal à 1, donc tu as a=1 et b=1

    Donc en résumé ça fonctionne, on peut conditionner les appels aux timeframes en utilisant des CALL qui eux comportent 1 ou plusieurs déclarations de timeframes, même inférieur à celui du graphique courant.

    gettimeframe-prorealtime.png gettimeframe-prorealtime.png
    #206851 quote
    rwanderer
    Participant
    New

    Nicolas,

    Dans ton exemple, ne devrais-tu pas retourner :
    a = 5 (normal tu es en UT5mn => OK)
    b = 1 (et non pas 0 => NOK).

    Je suis en UT 1mn et j’ai repris ton exemple, j’obtiens de nouveau a = 1, b = 1 (au lieu du 5 désiré).

    Capture-du-2023-01-05-19-45-57.png Capture-du-2023-01-05-19-45-57.png
    #206869 quote
    Nicolas
    Keymaster
    Master

    Dans ton exemple, ne devrais-tu pas retourner : a = 5 (normal tu es en UT5mn => OK) b = 1 (et non pas 0 => NOK).

    Non puisque b n’est jamais renseigné à cause de ta condition: UT<=1, or ici UT = 5

    Je suis en UT 1mn et j’ai repris ton exemple, j’obtiens de nouveau a = 1, b = 1 (au lieu du 5 désiré).

    Tu as raison, je viens de reprendre mes notes de l’époque et je me souviens maintenant, que le conditionnement des timeframes ne fonctionnera pas non plus dans un CALL. MAIS, la bonne nouvelle c’est qu’on s’affranchit tout de même de l’erreur de la plateforme sur l’impossibilité d’obtenir les données d’une UT hors d’atteinte (le 1-min sur un graphique 10-minutes par exemple). Donc en résumé, les IF/ENDIF pour conditionner les CALL, on oublie, reste à gérer comment on tu organiseras les données retournées pour ton code maître. Il y a quelques indicateurs dans la marketeplace qui utilise ce principe, l’exemple le plus concret je pense est le suivant: https://market.prorealcode.com/product/graphic-patterns-scanner-v11/

    Bonne continuation.

    #206898 quote
    rwanderer
    Participant
    New

    Merci Nicolas,

    On retrouve également le même principe sur cet indicateur : https://market.prorealcode.com/product/ultimate-trend-dashboard/
    Il est donc possible de conditionner les données de TimeFrame différente en fonction de l’UT dans laquelle on se trouve ! Mais comment ?
    J’ai l’impression que la solution se touche du bout du doigt mais quel casse-tête…

    Reflexion : outre la fonction CALL et à l’instar de la fonction IMPORT en VBA, est-il possible d’importer un “code complet” ?

    #206911 quote
    Nicolas
    Keymaster
    Master

    Dans ces indicateurs, je pense que l’auteur fait la même chose que dans mon dernier exemple, sauf que si la valeur appelé par le CALL retourne 0 et bien il affiche rien du tout, voilà.

    Donc c’est cette solution qui fonctionne 🙂

    #206916 quote
    rwanderer
    Participant
    New

    Nicolas, ce n’est malheureusement pas la solution. Si je suis ton exemple et pour imager mon propos, j’ajoute une 3ème donnée à retourner :

     

    UT = gettimeframe/60
    
    IF UT<=10 then
     a,ignored,ignored  = CALL "#dev2"
    ENDIF
    
    IF UT<=5 then
     ignored,b,ignored  = CALL "#dev2"
    ENDIF
     
    IF UT<=1 then
     ignored, ignored,c = CALL "#dev2"
    ENDIF
     
    Return a,b,c

    Tu es en UT5min, tu devrais donc retourner :

    a = 10
    b= 5
    c=0

    Or dans ton exemple, on retourne :
    a=5
    b=5
    c=0

    Il ne génére pas d’erreur mais ne prend pas en compte le TimeFrame pour autant dans l’esclave, il génere la donnée via le Timeframe par défaut au final…

    #207162 quote
    Nicolas
    Keymaster
    Master

    Il ne génére pas d’erreur mais ne prend pas en compte le TimeFrame pour autant dans l’esclave,

    Oui j’ai répondu à cela dans mon dernier message:

    que le conditionnement des timeframes ne fonctionnera pas non plus dans un CALL

    Donc quoiqu’il arrive, pas de IF/ENDIF autour d’un CALL qui appelle un indicateur qui a dans code l’instruction TIMEFRAME.

    #222449 quote
    Griv
    Participant
    New

    Il n’y a donc pas de solution? , cela m’intéresse aussi de conditionner un timeframe a une condition.. quelqu’un a t il une source ?

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

Condition et TimeFrame


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
rwanderer @rwanderer Participant
Summary

This topic contains 16 replies,
has 4 voices, and was last updated by Nicolas
2 years, 5 months ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 01/04/2023
Status: Active
Attachments: 4 files
Logo Logo
Loading...