Programmation trading automatique avec PRTBand

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

    Bonjour,

    j’ai un indicateur (sur DAX) que j’aimerai pouvoir intégrer dans un trade automatique mais je n’arrive pas à programmer le code, si quelqu’un pouvait m’aider par avance merci. De plus j’aimerai aussi y intégrer un SL/TP automatique.

    Ci après le code actuel de l’indicateur à intégrer :

    a = PRTBandsShortTerm
    if a>a[1] and a[1]<a[2] and trend<=0 then //la ligne fait un crochet de bas en haut
    trend=1
    r=0
    g=255
    elsif a<a[1] and a[1]>a[2] and trend>=0 then //la ligne fait un crochet du haut vers le bas
    trend=-1
    r=255
    g=0
    endif
    signal = trend<>trend[1] //tendance s'inverseif signal and trend>0 then
    drawarrowup(barindex,prtbandsdown) coloured(r,g,0)
    elsif signal and trend<0 then
    drawarrowdown(barindex,prtbandsup) coloured(r,g,0)
    
    endif
    return
    #211727 quote
    plbourse
    Participant
    New

    Bonjour

    Pouvez-vous donner une copie d’écran comment l’indicateur se présente.

    La lecture succinte de votre code semble dessiner des objects mais pas indiquer des valeurs. Une possibilité, si j’ai bien compris semble être de retourner une valeur appelée sortie +1, 0 ou -1

    • initialiser sortie à 0 avant la ligne signal = trend<>trend[1]… il manque pour moi un if
    • +1 lorsque on est dans la ligne drawarrowup(barindex,prtbandsdown) coloured(r,g,0), juste rajouter sortie = 1
    • -1 lorsque on est dans la ligne drawarrowdown(barindex,prtbandsup) coloured(r,g,0)
    • et retourner en dernière ligne signal

     

    le code des dernières lignes serait donc

    ===========================

    Signal = 0

    if signal = trend<>trend[1]  then

    //tendance s’inverseif signal and trend>0
    // drawarrowup(barindex,prtbandsdown) coloured(r,g,0)… on peut pas dessiner en même temps

    sortie = 1
    elsif signal and trend<0 then

    //drawarrowdown(barindex,prtbandsup) coloured(r,g,0)

    sortie = -1

    endif
    return sortie

    Si vous avez appelé votre indicateur MonSignal il faut l’afficher pour vérification dans une nouvelle fenêtre en dessous des cours

    Dans votre Backtest ou dans votre Code pour proorder, il suffit d’appeler via l’instruction call par exemple

    Decision = call “MonSignal”

    et ensuite prendre les décisions

    if Decision = 1 and Not onMarket then

    Buy 1 share at market

    elsif Decision = -1 and Not onMarket then

    Sellshort 1 share at Market

     

    J’esoère que j’aurai pu vous être utile

    #211737 quote
    RICOU
    Participant
    New

    Bonjour et merci pour votre aide,

    je vais essayer d’être plus précis:

    ci joint le code épuré sans objet ni couleur à intégrer,

    a = PRTBandsShortTerm
    if a>a[1] and a[1]<a[2] and trend<=0 then trend=1

    => passer à l’achat en positionnant SL et TP

    elsif a<a[1] and a[1]>a[2] and trend>=0 then trend=-1

    => passer à l’achat en positionnant SL et TP

    endif

     

    Par contre je ne sais absolument pas coder, si vous pouviez m’écrire la totalité du code vous seriez au Top, par avance merci.

    #211760 quote
    Nicolas
    Keymaster
    Master

    Ci-dessous le code qui permet de passer à l’achat dés que la ligne du PRTBands Short term monte et de passer à la vente dés qu’elle descend:

    defparam cumulateorders=false
    
    a = PRTBandsShortTerm
    if a>a[1] and a[1]<a[2] and trend<=0 then
    trend=1 
    buy 1 contract at market 
    set target pprofit 100
    set stop ploss 30
    elsif a<a[1] and a[1]>a[2] and trend>=0 then 
    trend=-1
    sellshort 1 contract at market
    set target pprofit 100
    set stop ploss 30
    endif
    
    plbourse thanked this post
    #211814 quote
    RICOU
    Participant
    New

    Merci beaucoup pour votre aide.

    #211856 quote
    RICOU
    Participant
    New

    Tout fonctionne bien et je vous en remercie, en revanche j’aimerai quelques derniers réglages.

    En effet, étant donné que j’utilise ce code en UT très courtes 30 secondes, il se peut que durant ces 30 secondes rien ne se passe (ni TP, ni SL) et à ce moment là il faudrait rajouter une condition “remise à zéro/reset” à la fin de la bougie précédente pour redémarrer la nouvelle.

    Par avance merci,

    #211857 quote
    Nicolas
    Keymaster
    Master

    Désolé je n’ai pas saisi, si à l’issue d’une bougie, un ordre est en cours il faut en sortir ?

    #211865 quote
    RICOU
    Participant
    New

    Oui, si possible. C’est à dire que l’UT étant très courte, en fonction des mouvements haut/bas il y a des dysfonctionnement, donc j’ai pensé qu’en ré initialisant la bougie à sa clôture, on repart “propre” pour la suivante. Je ne sais pas si ça a du sens….je ne suis pas vraiment spécialiste.

    #211873 quote
    Nicolas
    Keymaster
    Master

    Le robot va ouvrir un ordre d’achat dés que la ligne passe du rouge au vert et vice versa pour une vente. Cette condition est testée à fin de bougie (donc ici une seule fois toutes les 20 secondes). C’est peut être ce comportement que tu voudrais modifier ? C’est à dire agir durant la bougie de 20 secondes si la couleur change ?

    #211875 quote
    RICOU
    Participant
    New

    Oui c’est ça.

    #211929 quote
    RICOU
    Participant
    New

    Bonjour, je me permets de vous relancer pour le problème ci dessus, avez vous une idée de solution?

    #212057 quote
    Nicolas
    Keymaster
    Master

    Très bien, dans ce cas, il faudra lancer le code ci-dessous sur une unité de temps plus petite que celle déclarée  à la ligne 3 (à modifier à convenance).

    Il faut bien sûr s’attendre à ce qu’il y ai plusieurs ordres qui s’ouvrent et se ferment durant le même chandelier de 20 secondes selon le changement de couleur qui s’opérera durant la bougie.

    defparam cumulateorders=false
    
    timeframe(20 secondes)
    a = PRTBandsShortTerm
    
    timeframe(default)
    if a>a[1] and a[1]<a[2] and trend<=0 then
    trend=1 
    buy 1 contract at market 
    set target pprofit 100
    set stop ploss 30
    elsif a<a[1] and a[1]>a[2] and trend>=0 then 
    trend=-1
    sellshort 1 contract at market
    set target pprofit 100
    set stop ploss 30
    endif
    #212101 quote
    RICOU
    Participant
    New

    Merci pour votre réponse, je vais regarder ça de plus près et mettre en test.

    De plus, j’ai vu sur le forum que vous aviez travaillé aussi sur “des moyennes ATR” :

    cet indicateur me semble très judicieux, mais je ne comprends pas bien comment l’intégrer dans ma stratégie, c’est à dire comment déclencher une prise de position aussi lorsque cette moyenne ATR atteint un certain niveau et quel niveau ?Merci beaucoup

    #212102 quote
    RICOU
    Participant
    New

    voir la PJ svp

    INDI.jpg INDI.jpg
    #212200 quote
    Nicolas
    Keymaster
    Master

    Il faudra ajouter la condition à tester à la ligne 7 pour les achats et 12 pour les ventes.

    Puisque cette moyenne évolue différemment selon l’unité de temps et le sous jacent, on ne peut pas vraiment définir de seuil universel, à voir .. ?

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

Programmation trading automatique avec PRTBand


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
RICOU @ricou Participant
Summary

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

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