Problématiques de codage

Viewing 15 posts - 1 through 15 (of 15 total)
  • #227344

    Bonjour la communauté PRC,

    J’essaie de créer une fonction qui lorsque un évènements A se produit, alors la variable COO prend la valeur que la variable CO possède à ce moment précis (pour garder la donnée en mémoire)

    Problème : en écrivant COO=CO, au lieu de donner la valeur de CO à COO, il enregistre que COO sera toujours équivalent à CO

    En cherchant dans les connecteurs logiques proposés par PRT je n’arrive pas à trouver un moyen de faire passer les valeurs d’une variable à une autre…
    J’en appel aux vétérans de la grande guerre du code!

    Ensemble nous vaincrons les machines et surmonterons toutes les courbes !

    Merci par avance 🙂

    #227349

    Bonjour

     

    ma proposition est d’introduire un test logique

    if (evenement est VRAI) then

    COO = CO

    Endif

     

    La variable COO ne sera ainsi réactualisé que lors du passage à vrai

    Si l’évènement se reproduit et que vous ne voulez faire l’actualisation que sur la première occurence alors il faut specififier que c’est la première occurence de la série

    if (evenement est VRAI) and (evenement[1] est Faux) then

    COO = CO

    Endif

    J’espère avoir pu vous aider

    Bonnes stratégies et bons trades à tous

    1 user thanked author for this post.
    #227373

    Bonjour Pbourse et merci pour ta réponse,

    Le problème de mon cas de figure c’est que si je met une égalité avec deux variables ex: “CO = COO”, au lieu de comprendre Valeur de “CO = Valeur de COO”, le logiciel à l’air de comprendre littéralement “Variable CO = Variable COO”

    Il n’y a pas de configuration du style CO = Value COO ou bien des symboles pour isoler la valeur de la variable et non la variable comme CO = |COO] par exemple ?

    Ce que je voudrais faire c’est prendre la valeur d’une variable au moment de son déclenchement et me servir de cette donnée pour modifier le comportement de ma stratégie sur ce signal donné.

    Je n’ai toujours pas réussi à trouver encore si c’est possible. De la même manière je me demande s’il est possible de créer une table de valeur avec une variable créer, est-ce possible de créer une variable puis d’utiliser “variable[1], variable[2]” ?

    Merci par avance la communauté

    #227377

    Si tu écris “CO = COO” dans une partie du code qui est lu à chaque lecture du code alors Co sera toujours égale à COO et c’est logique.

    Si tu écris “CO = COO” suite à un test : “If évènements A se produit then” alors Co prendra la valeur de COO au moment où l’évènement A se produit, et si ensuite COO prend un autre valeur, CO restera égale à la valeur d’avant de COO…
    Si tu veux t’en persuader, il suffit de faire :
    If évènements A then
    CO = COO
    COO = 0
    Endif

    Return Co, COO
    Et tu verras que CO et COO sont différents…

    Mais, il faut comprendre que le code ne prend en compte que les valeurs de clôtures (au moment où la bougie se clôture) et donc toutes les valeurs intermédiaires que prend ta variable en attendant la clôture de la bougie ne sont pas accessible dans la même timeframe… Il faut s placer dans un timeframe plus petite pour y avoir accès.

    Timeframe (5 minutes,default)
    If evenement A then
    co = COO
    endif

    Timeframe (60 minutes,default)
    COO = …

    Dans ce cas là co pourra prendre une valeur intermédiaire que prend COO au court de la bougie 1h

    1 user thanked author for this post.
    #227385

    Merci beaucoup pour ta réponse LucasBest,

    Je pense que j’aurais dû être plus précis dès le début compte à la finalité de la manœuvre : créer une table des valeurs maximales que mon cours va suivre et permettre à ma stratégie d’établir une moyenne au fur et à mesure pour s’adapter.

    En m’inspirant de ta méthode j’ai lancé le programme suivant :

    CO=0 // J’ai d’abord mis une valeur nulle avant de procéder au changement car il me demandait une valeur pour CO sinon il ne voulait pas initialiser le test
    IF evenement THEN // mémorisation de la position de CO au moment de l’évènement
    CO1=CO
    ELSIF (CO*CO)-(CO1*CO1)>0 THEN  // création d’une table de valeurs pour analyse
    CO2=CO1
    ENDIF

    GRAPHONPRICE CO // je n’arrive pas à utlliser RETURN comme tu le fais, ça me met une erreur bizarrement, y a t’il un contexte spécifique pour l’utiliser ?
    GRAPHONPRICE CO1
    GRAPHONPRICE CO2

    J’ai obtenu une CO qui varie mais rien ne se passe sur CO1 et CO2

    Cela dit entre temps j’ai découvert un post sur le forum ici : Disponibilité des variables de tableau dans ProRealTime – exemples et discussions : Forum Support ProBuilder – ProRealTime (prorealcode.com)

    Il aborde la fonction “Array” souvent utilisée en codage et qui permet de créer des tables de valeurs utilisables pour adapter nos stratégies aux évènements qui ont eu lieu dans la stratégie pour s’adapter
    En fin de compte il y a un symbole $ qui permet, un peu de la même façon que dans excel, de verrouiller des valeurs, ou encore de lire la valeur d’une variable au lieu de n’observer que la variable en tant que telle

    cette fonction va me permettre clairement de passer à un autre niveau d’adaptabilité de ma stratégie, j’espère que cet article pourra également vous être utile si vous ne connaissez pas encore cette possibilité la communauté =)

    Au plaisir de vous lire

    #227402

    L’instruction “Return” ne s’applique qu’aux indicateurs (onglet Probuilder) et ne peut être utilisé dans une stratégie (Probacktest)

    Les variables ne peuvent prendre qu’une valeur à chaque bougie (valeur calculée à la clôture de la bougie)
    On peut accéder aux valeurs précédentes (des bougies précédentes) à l’aide des crochets : variable[1] fait référence ) la valeur de la variable à la clôture de la bougie précédente. Si le code ne modifie pas la valeur de la variable lors de la dernière lecture du code la variable conserve la valeur de la variable de la bougie précédente (les variables ne sont pas remises à zéro à chaque bougie). Par contre, à moins de déclarer une “première” valeur pour une variable avec “ONCE variable = 57”, toute variables débute avec la valeur 0.

    Les tableaux sont différents, car les valeurs de chaque case du tableaux ne sont pas liées à un numéro de bougie. On peut remplir un tableau de n cases à chaque nouvelle bougie si l’on veut… Ce sont des tableaux à une seule dimension pour l’instant. Donc une ligne ou un colonne de valeur.

    #227403

    Merci LucasBest pour ta réponse,

    Effectivement c’est beaucoup plus clair, j’ai fais des tests avec la fonction index pour créer des tables de valeur, ça a fonctionné

    Il suffit donc d’annoncer une variable M1 précédée de $ comme $M1 pour la variable mémoire de départ et d’ajouter [myindex] pour faire appel à un index “myindex” ensuite on capture la valeur souhaitée, on termine avec myindex=myindex+1 pour faire avancer l’index à la colonne suivante, prête à mémoriser une nouvelle donnée.

    Ensuite on peut donner à une variable la valeur de la précédente valeur du tableau en faisant par exemple CO=$CO1[Lastset($CO1)]
    ou CO=$CO1[1] si on veut la valeur de la première valeur mémorisée

    Pour afficher la valeur sur le graphique principal et contrôler le résultat il n’y a qu’à utiliser la fonction GRAPHONPRICE M1=$M1 pour afficher les valeurs de l’index sous forme de courbe si j’ai compris

     

    IF évènement THEN

    $M1[myindex] = CO[0}

    myindex=myindex+1

    CO1= $CO1[LastSet($CO1)]

     

    On peut créer autant d’index que l’on souhaite si j’ai compris je pourrais très bien faire comme suit ?

    $M1[myindex1] = CO1[0}
    $M1[myindex2] = CO2[0} …

     

    ça ouvre beaucoup de possibilités en tout cas, je pense que c’est un gros must, j’ai hâte d’intégrer ça dans ma stratégie =)

    #227406

    Attention : “ou CO=$CO1[1] si on veut la valeur de la première valeur mémorisée”

    => La 1ère valeur mémorisée est normalement $CO1[0] (non pas $CO1[1])

    Même si cela peut se faire : “CO1= $CO1[LastSet($CO1)]”

    => pour ne pas semer de doute et de confusion, mieux vaut utiliser des noms différents pour les variables et les tableaux

    1 user thanked author for this post.
    #227441

    Merci beaucoup pour ta réponse LucasBest,

    J’ai réussi à faire marcher un index avec le code suivant

    IF … THEN
    $CO1[myindex] = CO
    myindex=myindex+1
    CO1= $CO1[LastSet($CO1)]
    ENDIF

    Cependant quand j’essaie d’utiliser une deuxième un deuxième index :

    IF … THEN
    $CU1[myindex2] = CU
    myindex2=myindex2+1
    CU1= $CU1[LastSet($CU1)]
    ENDIF

    La valeur $CU1 utilise le même index que $CO1 tandis que j’ai tenté d’appeler ces deux index différemment respectivement Myindex2 et Myindex
    Lorsque je pose la courbe GRAPHONPRICE CU1 j’ai les même valeurs que CO1

    Dois-je en déduire qu’on ne peut utiliser qu’un seul index ?

    #227442

    Correction

    Je capture bien deux données différentes, je ne sais pas pourquoi je n’avais pas de signal pendant un moment, un de mes déclencheur ne devait pas être déclenché par la courbe que j’analysais

    #227443

    Ce que tu appelles l’index, ce n’est rien d’autre qu’une variable, tu peux en utiliser une ou plusieurs pour gérer le même tableau, voir aucune si ça n’est pas indispensable.

    Si tu ne veux pas “gérer” dans ton code une variable qui pointe sur le dernier élément du tableau, c’est possible en utilisant l’instruction : LastSet($NomduTableau) qui renvoi vers le dernier élément entrer dans le tableau ou -1 s’il est vide.

    Donc pour enregistrer un nouvel élément dans un tableau : (Ne pas oublier le “+1”!)
    $NomduTableau1[LastSet($NomduTableau1)+1] = valeurdelavariable

    Pour lire le dernier élément d’un tableau : (sans “+1”!)
    variable = $NomduTableau1[LastSet($NomduTableau1)]

    1 user thanked author for this post.
    #227444

    Pour être plus juste, il faut d’abord faire un petit test avant de lire le dernier élément :

    If LastSet($NomduTableau1) >=0 then
    variable = $NomduTableau1[LastSet($NomduTableau1)]
    Endif

    #227786

    Bonjour,

    J’espère que vous allez bien la communauté PRT,

    J’ai un petit soucis pour tracer mes bandes de Bollinger dans mes stratégies,  dans les fonctions nous n’avons que les bandes + et bandes – et pas de paramètres pour régler l’écart type ou pour la centrer sur HULL par exemple comme nous pouvons le faire sur le graphique en dehors de la programmation, c’est dommage car la pertinence des bandes de Bollinger proposée dans les indicateurs de graphique (hors stratégie) est au top, j’aimerais arriver au même résultat dans mon code

    Quelqu’un saurait comment intégrer cela?

    Merci par avance

    #227788

    En cherchant j’ai trouvé cette base

    // Bollinger Enveloppe
    MoyEnv = Average[perEnv](close)
    ETypeEnv = STD[perEnv](close)
    ligneSup = MoyEnv + nbStdEnv * ETypeEnv
    ligneInf = MoyEnv – nbStdEnv * ETypeEnv

    Cela dit j’ai essayé et n’ai pas réussi à retrouver les paramètres que j’ai sur mon graphique
    Ci-joint le screen pour mieux comprendre ma problématique :

    En violet j’ai le bandes de bollinger proposées parmi les indicateurs d’un graphique standard, avec un écart type de 2 et positionné sur une moyenne mobile de Hull [487]
    En rouge j’ai tenté de faire la même chose en posant :

    hullS=HullAverage[487](open)
    Bollmax=BollingerUp[487](HullAverage[487])
    Bollmin=Bollingerdown[487](HullAverage[487])

    Cela dit je n’obtiens pas du tout la même chose, dans le premier cas tout est pertinent et le graphique vient correctement “attraper” les zones de sorties du graphique du cours et correctement centré autour de Hull
    Dans le deuxième les écartes ne sont plus du tout aussi pertinents…

    #227830

    Autre petite question :

    Est-ce possible de se placer à l’échelle de la seconde et de superposer une courbe à l’echelle du mois qui utiliserait les unités comme des jours au lieu des secondes, pour observer sur deux échelles parfaitement indépendantes ?

Viewing 15 posts - 1 through 15 (of 15 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login