Renvoyer un terme “TEXTE” suivant indicateur et compter les termes “TEXTE”

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #150571 quote
    Kanamax
    Participant
    Junior

    Bonjour,

    J’aimerais savoir coder sur ProRealTime la stratégie suivante :
    Premièrement, j’aimerais qu’en fonction de l’information chiffrée donnée par un indicateur, le code puisse renvoyer les termes « ACHAT », « VENTE » ou « NEUTRE ».
    Exemple sur le RSI(14), si le RSI est > 55 renvoyer le mot « ACHAT », si < 45 renvoyer le mot « VENTE », si 45 < RSI < 55 renvoyer le mot « NEUTRE ».
    Le but est de faire cela sur plusieurs indicateurs.
    Deuxièmement, j’aimerais que le code puisse compter le nombre de mot « ACHAT », de « VENTE » et de « NEUTRE » puis de définir un ordre d’achat si le nombre de mots « ACHAT » est supérieur au nombre de mot « VENTE » et inversement.
    L’ordre de sortie sera défini suivant un autre critère.

    Pouvez-vous me renseigner si ce style de logique est possible sous ProRealTime ? Et si oui m’indiquer les lignes de codes adéquates ?

    Vous remerciant par avance de l’intérêt que vous porterez à mon questionnement.

    #150616 quote
    Nicolas
    Keymaster
    Master

    En renvoyant des chiffres à la place des lettres, on obtient le même résultat, identifier le status d’une variable et ainsi pouvoir compter les occurrences.

    //si le RSI est > 55 renvoyer le mot « ACHAT », si < 45 renvoyer le mot « VENTE », si 45 < RSI < 55 renvoyer le mot « NEUTRE ».
    
    defparam cumulateorders=false
    
    i = rsi[14]
    if i >55 then 
     achat = achat + 1
    elsif i<45 then 
     vente = vente +1
    endif 
    
    if achat crosses over vente then //evenement achat plus important que vente 
     buy at market
     //reinitialisation des compteurs:  
     achat = 0
     vente = 0
    endif 
    
    if vente crosses over achat then //evenement vente plus important que achat
     sellshort at market
     //reinitialisation des compteurs:
     achat = 0
     vente = 0
    endif
    
    graph achat coloured(0,255,0)
    graph vente coloured(255,0,0)
    #150671 quote
    Kanamax
    Participant
    Junior

    Bonjour,

    Merci beaucoup pour votre réponse, je vais tester ce code et me familiariser avec, puis rajouter des indicateurs.

    Très Cordialement.

    #150843 quote
    Kanamax
    Participant
    Junior

    Bonjour,

    Je reviens vers vous après plusieurs essais. J’ai rajouté plusieurs variables afin de voir si le code “comptait” correctement les “ACHAT” et les “VENTE”.

    • Dans le cas d’un “crosses over” entre “ACHAT” et “VENTE” (voir extrait ci dessous) le code semble additionner les variables sans les remettre à zéro et ne prend aucune position, voir graph des variables (graph achat coloured(0,255,0)
      graph vente coloured(255,0,0). (idem à la vente)
    if achat crosses over vente then //evenement achat plus important que vente 
     buy at market
     //reinitialisation des compteurs:  
     achat = 0
     vente = 0
    endif

     

    • Dans le cas d’un “>” entre “ACHAT” et “VENTE” (voir extrait ci dessous) le code compte le même nombre de variables “ACHAT” que de “VENTE”, mais les remet à zéro. Les positions prises dans le graph de position ne coincident pas avec le graph des variables (graph achat coloured(0,255,0) graph vente coloured(255,0,0). (idem à la vente)
    if achat > vente then //evenement achat plus important que vente
    BUY 1 CONTRACTS AT MARKET
    //reinitialisation des compteurs:
    achat = 0
    vente = 0
    endif

     

    Je vous mets le code complet ci-dessous a toute fin utile.
    // Conditions des indicateurs
    
    defparam cumulateorders=false
    
    i = rsi[14](close)
    if i>55 then
    achat = achat +1
    elsif i<45 then
    vente = vente +1
    endif
    
    j = MACDline[12,26,9](close)
    if j>0 then
    achat = achat +1
    elsif j<0 then
    vente = vente +1
    endif
    
    k = CCI[14](close)
    if k>45 then
    achat = achat +1
    elsif k<0 then
    vente = vente +1
    endif
    
    l = Stochastic[9,6](close)
    if l>50 then
    achat = achat +1
    elsif l<50 then
    vente = vente +1
    endif
    
    m = Williams[14](close)
    if m>-50 then
    achat = achat +1
    elsif m<-50 then
    vente = vente +1
    endif
    
    
    // Conditions pour ouvrir une position acheteuse
    if achat > vente then //evenement achat plus important que vente
    BUY 1 CONTRACTS AT MARKET
    //reinitialisation des compteurs:
    achat = 0
    vente = 0
    endif
    
    // Conditions pour fermer une position acheteuse
    if close CROSSES UNDER Average[5](close) then
    SELL AT MARKET
    ENDIF
    
    // Conditions pour ouvrir une position en vente à découvert
    if vente > achat then //evenement vente plus important que achat
    SELLSHORT 1 CONTRACTS AT MARKET
    //reinitialisation des compteurs:
    achat = 0
    vente = 0
    endif
    
    // Conditions pour fermer une position en vente à découvert
    if close CROSSES OVER Average[5](close) then
    SELL AT MARKET
    ENDIF
    
    // Stops et objectifs
    SET STOP pLOSS 100
    
    graph achat coloured(0,255,0)
    graph vente coloured(255,0,0)
    

    Merci d’avance pour votre réponse.

    Cordialement.

    #150927 quote
    Nicolas
    Keymaster
    Master

    Il faut vérifier que nous ne sommes pas déjà au marché pour réinitialiser les variables achat et vente, sinon, elles seront constamment remises à 0:

    // Conditions pour ouvrir une position acheteuse
    if not longonmarket and achat > vente then //evenement achat plus important que vente
     BUY 1 CONTRACTS AT MARKET
     //reinitialisation des compteurs:
     achat = 0
     vente = 0
    endif

    et

    // Conditions pour ouvrir une position en vente à découvert
    if not shortonmarket and vente > achat then //evenement vente plus important que achat
     SELLSHORT 1 CONTRACTS AT MARKET
     //reinitialisation des compteurs:
     achat = 0
     vente = 0
    endif

    Mais il y aura malgré cela un problème, c’est que les compteurs peuvent mettre des lustres à se croiser, voir le GRAPH des variables.

    compteur-achat-et-vente.png compteur-achat-et-vente.png
    #151160 quote
    Kanamax
    Participant
    Junior

    Bonjour,

    Je me suis permis d’expliquer plus précisément ce que je souhaite coder ci-dessous sur la base du code actuel qui ne remplis pas exactement ce que je recherche.

    Idée de départ :

    Stratégie basée sur 5 indicateurs remontant chacun soit une variable « ACHAT » soit une variable « VENTE » en fonction de leur paramétrage (voir cde plus bas)

    Scan du marché à chaque incrément de temps choisi (t)

     

    Stratégie :

    A t0 :

    1. Compter le nombre de variable « ACHAT » et « VENTE » en fonction des critères définis dans les 5 indicateurs de départ.
    2. Si le nombre de variable « ACHAT » est > au nombre de variable « VENTE » alors rentrer en POSITION ACHETEUSE.

    Attention, la somme des variables doit toujours être égale à 5 (ce qui n’est pas le cas dans le code actuel et je ne sais pas pourquoi ?).

     

    A t0+1 :

    1. Remettre à zéro les compteurs « ACHAT » et « VENTE ».
    2. Toujours à t0+1 et une fois les compteurs remis à zéro, compter le nombre de variable « ACHAT » et « VENTE » en fonction des critères définis dans les 5 indicateurs.
    3. Si le nombre de variable « ACHAT » est TOUJOURS > au nombre de variable « VENTE » alors RESTER en POSITION ACHETEUSE.

    Puis rester en POSITION ACHETEUSE tant que le nombre de variable « ACHAT » > « VENTE ».

    Attention, la somme des variables doit toujours être égale à 5 (ce qui n’est pas le cas dans le code actuel et je ne sais pas pourquoi ?).

     

    A t0+n :

    1. Si le nombre de variable « ACHAT » devient < au nombre de variable « VENTE » alors SORTIE DE POSITION ACHETEUSE.
    2. Attention, la somme des variables doit toujours être égale à 5 (ce qui n’est pas le cas dans le code actuel et je ne sais pas pourquoi ?).

    … Puis inversement en position SHORT.

    Cette stratégie peut-être aussi représentée graphiquement comme dans l’image attachée, ou avec un exemple aléatoire comme dans l’image attachée également.

     

    En effet, le code actuel ci-dessous ne calcul pas ou ne remet pas à zéro correctement les compteurs car la somme des compteurs est parfois supérieure ou inférieure à 5 (nbre d’indicateur) alors qu’il devrait toujours y être égale.

    Le code actuel rentre en position acheteuse à t0 et sort du marché immédiatement à t0+1 alors qui devrait y rester suivant les indicateurs.

    Merci pour votre support.

    Bien Cordialement

     

    Code actuel:

    // Conditions des indicateurs
    
    defparam cumulateorders=false
    
    i = rsi[14](close)
    if i>55 then
    achat = achat +1
    elsif i<45 then
    vente = vente +1
    endif
    
    j = MACDline[12,26,9](close)
    if j>0 then
    achat = achat +1
    elsif j<0 then
    vente = vente +1
    endif
    
    k = CCI[14](close)
    if k>45 then
    achat = achat +1
    elsif k<0 then
    vente = vente +1
    endif
    
    l = Stochastic[9,6](close)
    if l>50 then
    achat = achat +1
    elsif l<50 then
    vente = vente +1
    endif
    
    m = Williams[14](close)
    if m>-50 then
    achat = achat +1
    elsif m<-50 then
    vente = vente +1
    endif
    
    // Conditions pour ouvrir une position acheteuse
    if not longonmarket and achat > vente then //evenement achat plus important que vente
    BUY 1 CONTRACTS AT MARKET
    //reinitialisation des compteurs:
    achat = 0
    vente = 0
    endif
    
    // Conditions pour fermer une position acheteuse
    if achat < vente then
    SELL AT MARKET
    ENDIF
    
    // Conditions pour ouvrir une position en vente à découvert
    if not longonmarket and vente > achat then //evenement vente plus important que achat
    SELLSHORT 1 CONTRACTS AT MARKET
    //reinitialisation des compteurs:
    achat = 0
    vente = 0
    endif
    
    // Conditions pour fermer une position en vente à découvert
    if vente < achat then
    SELL AT MARKET
    ENDIF
    
    // Stops et objectifs
    SET STOP pLOSS 200
    
    graph achat coloured(0,255,0)
    graph vente coloured(255,0,0)
    
    Capture-3.jpg Capture-3.jpg
Viewing 6 posts - 1 through 6 (of 6 total)
  • You must be logged in to reply to this topic.

Renvoyer un terme “TEXTE” suivant indicateur et compter les termes “TEXTE”


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
Kanamax @kanamax Participant
Summary

This topic contains 5 replies,
has 2 voices, and was last updated by Kanamax
5 years, 3 months ago.

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