Mémoire d'une variable

Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
    Posts
  • #125414 quote
    RogerRoger
    Participant
    Veteran

    Bonjour,

    Je souhaite savoir si PRC peut se souvenir d’une variable d’une itération à l’autre (d’une bougie à l’autre).

    Voici ce que je fais :

    defparam preloadbars=10000
    
    if barindex>=10000 then
    for i=1 to 10000 
    if condition then 
    count=count+1 
    endif 
    next
    endif

     

    Le temps de calcul est extrêmement long car à chaque barre je refais des calculs déjà fait avant, et je souhaite raccourcir en faisant :

    defparam preloadbars=10000
    
    //calcul du count pour les 10 000 barres préchargées
    if barindex=10000 then 
    for i=1 to 10000 
    if condition then 
    count=count+1 
    endif 
    next 
    endif
    
    //mise à jour de la valeur de count au fur et à mesure du backtest
    if barindex>10000 then 
    if condition then 
    count=count+1 
    endif 
    endif

    Est ce que de cette façon, PRC peut retenir la valeur de “count” et l’actualiser ?

    L’avantage est aussi que ça me permet d’avoir un historique plus long pour le calcul de count.

    Merci d’avance pour votre aide.

    #125417 quote
    NicolasNicolas
    Keymaster
    Legend

    Pourquoi ne pas faire une somme des booléens avec SUMMATION, pour éviter les boucles :

    count = summation[10000](condition)

     

    La variable count se remplira à chaque nouvelle bougie d’une nouvelle valeur et tu pourras donc accéder à toutes ses valeurs passés avec un offset entre crochet, exemple le count d’il y a 10 barres auparavant :

    var = count[10]
    Roger thanked this post
    #125429 quote
    RogerRoger
    Participant
    Veteran

    Merci beaucoup pour ta réponse Nicolas.

    J’ai volontairement simplifié le code pour plus de clarté.

    Ma condition ressemble en réalité à ça :

    defparam preloadbars=10000
    
    if barindex>=10000 then
    for i=1 to 10000 
    if open[i-1-x]/open[i-1]-1>0 then 
    count=count+1 
    endif 
    next
    endif

    Je cherche à calculer la performance en t+x d’une condition réalisée en t

    En gros je fais des calculs forward dans le passé, et je pense que la fonction summation est insuffisante dans ce cas, à moins que je me trompe ?

    #125438 quote
    NicolasNicolas
    Keymaster
    Legend

    Est-ce qu’il y a une raison particulière pour faire le test en avant ? et pourquoi pas l’inverse ? Tu cherches à connaître le futur pour recalculer le passé ou non ?

    #125439 quote
    RogerRoger
    Participant
    Veteran

    Tu as raison , il faut que j’inverse…et avec des summation ça devrait être bon

    Mon cerveau était bloqué sur ma manière de faire

    Je teste ça !

    Merci beaucoup

    #125444 quote
    RogerRoger
    Participant
    Veteran

    Bon en fait je bloque encore, il y a un problème de temps.

    Je vais préciser :

    Je souhaite regarder si ma condition dans le passé s’est avérée rentable en ayant pris position et en étant resté dans le marché pendant x barres.

    L’idée est d’ignorer cette condition si elle n’est pas assez rentable.

    defparam preloadbars=10000
    condition=close>close[10]
    x=5 // nb de barres ou je reste en position
    
    if barindex>=10000 then
     compteurOccurences=summation[10000](condition)
     compteurTradesRentables=compteurOccurences[x] .......

    Et là je retrouve mon problème de calcul de performance en forward.

    #125457 quote
    NicolasNicolas
    Keymaster
    Legend

    En résumé tu veux savoir si lorsque tu détectes ‘condition’, en rentrant au marché et en sortant 5 barres plus loin, cela est rentable ? Si oui, uniquement sur la dernière occurrence ou sur toutes celles rencontrées en faisant une moyenne ?

    #125459 quote
    RogerRoger
    Participant
    Veteran

    Oui c’est ça.

    Sur toutes celles rencontrées, en comptant le nombre de trades gagnant et de trades perdant.

    #125465 quote
    NicolasNicolas
    Keymaster
    Legend

    Ok, mais alors je ne comprends pas pourquoi tu veux faire une boucle dans le passé pour connaître ces résultats, puisque tu ne peux plus y intervenir … dans le passé 🙂

    Bref, si on comptabilise les résultats tout en laissant passer le temps, on peut y arriver :

    condition=close>close[10]
    x=5 // nb de barres ou je reste en position
    
    if condition and barindex-startbar>x then //si condition et aucun ordre en cours
     startbar=barindex
     startprice=close
    endif
    if barindex-startbar=x  then //gain ou perte après X bar  
     if close>startprice then 
      gain=gain+1 //gagné ! 
     else
      perte=perte+1 //perdu :(
     endif
    endif
    
    return gain coloured(0,255,0), perte coloured(255,0,0)

    Je pense que c’est l’idée, à tester en tant qu’indicateur pour voir si j’ai bien compris.

    #125472 quote
    RogerRoger
    Participant
    Veteran

    Merci je vais regarder et tester ça !

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

Stuck on this ProBuilder code?

Describe what this topic is trying to build, in plain English, and ProRealAI writes the ProRealTime™ indicator, screener or system for you.

Available in 7 languages
Try ProRealAI

Mémoire d'une variable


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
Roger @rgkp Participant
Summary

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

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 04/09/2020
Status: Active
Attachments: No files
ProRealCode ProRealCode
Loading...