Accumulation PnL: variable PL non incrémentée en ProBuilder

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
    Posts
  • #262211 quote
    Bernard13
    Participant
    Senior

    Bonjour,

    Pouvez-vous m’aider car je patauge lamentablement sur les lignes identiques 15 et 34.: PL= PL + delta

    Pourquoi le code de ces lignes ne renvoie pas l’accumulation des Pertes et Profits ?

    Ci-dessous Code et Graph.

    Je vous remercie par avance.


    X= BarIndex
    ONCE PL= 0
    
    
    Mfast= ExponentialAverage[3](TotalPrice)
    Mslow= ExponentialAverage[21](TotalPrice)
    
    
    //----- Signal
    IF Mfast CROSSES OVER Mslow THEN
    i= i + 1
    
    
    $Lime[i]= Close
    Exec= $Lime[i] // for DrawText("#Exec#, X, ... ) otherwise, an error occurs
    delta= ($Red[i][1] - $Lime[i])
    
    
    PL= PL + delta // Accumulated profit and loss
    
    
    DrawPoint(X, Mfast, 2) Coloured("Lime")
    DrawText("#i# #Exec# #delta# #PL#", X, Mfast-2*TR, Dialog, Bold, 14) Coloured("Lime")
    
    
    // Debug
    PRINT i
    PRINT Exec
    PRINT delta
    PRINT PL
    //
    
    
    ELSIF Mfast CROSSES UNDER Mslow THEN
    i= i + 1
    
    
    $Red[i]= Close
    Exec= $Red[i] // for DrawText("#Exec#, X, ... ) otherwise, an error occurs
    delta= ($Red[i] - $Lime[i][1])
    
    
    PL= PL + delta // Accumulated profit and loss
    
    
    DrawPoint(X, Mfast, 2) Coloured("Red")
    DrawText("#i# #Exec# #delta# #PL#", X, Mfast+2*TR, Dialog, Bold, 14) Coloured("Red")
    
    
    // Debug
    PRINT i
    PRINT Exec
    PRINT delta
    PRINT PL
    //
    
    
    ENDIF
    
    
    RETURN Mfast AS "Mfast", Mslow AS "Mslow"
    
    
    
    PL-EURUSD.png PL-EURUSD.png
    #262214 quote
    Nicolas
    Keymaster
    Legend

    Beaucoup de problèmes dans ce code, généré par IA ?

    Voici une version plus complète et simple:

    x = barindex
    once PL = 0
    Mfast = ExponentialAverage[3](TotalPrice)
    Mslow = ExponentialAverage[21](TotalPrice)
    
    delta = 0
    
    IF Mfast CROSSES OVER Mslow THEN
       green=close
    ELSIF Mfast CROSSES UNDER Mslow THEN
       red=close
    endif
    
    
    //----- Signal
    if green>0 and red>0 then
       IF Mfast CROSSES OVER Mslow THEN
          // Sortie Short + Entrée Long
          // P&L du Short = red (prix d'entrée short) - close (prix de sortie short)
          green = close
          IF red > 0 THEN
             delta = red - close
             PL = PL + delta
          ENDIF
          DrawPoint(x, Mfast, 2) Coloured("Lime")
          DrawText("#delta# #PL#", x, Mfast - 2*TR, Dialog, Bold, 14) Coloured("Lime")
          
       ELSIF Mfast CROSSES UNDER Mslow THEN
          // Sortie Long + Entrée Short
          // P&L du Long = close (prix de sortie long) - green (prix d'entrée long)
          red = close
          IF green > 0 THEN
             delta = close - green
             PL = PL + delta
             
          ENDIF
          DrawPoint(x, Mfast, 2) Coloured("Red")
          DrawText("#delta# #PL#", x, Mfast + 2*TR, Dialog, Bold, 14) Coloured("Red")
          
       ELSE
          green = green[1]
          red   = red[1]
          PL    = PL[1]
       ENDIF
    endif
    
    RETURN Mfast AS "Mfast", Mslow AS "Mslow"
    


    robertogozzi, Bernard13 and Iván González thanked this post
    calcul-de-pnl-croisement-moyennes-mobiles.png calcul-de-pnl-croisement-moyennes-mobiles.png
    #262216 quote
    robertogozzi
    Moderator
    Master

    Commencez par initialiser TOUTES les données, y compris les tableaux (uniquement le premier élément) :

    ONCE PL       = 0
    ONCE delta    = 0
    ONCE myRed    = 0
    ONCE myLime   = 0
    ONCE $Lime[0] = 0  
    ONCE $Red[0]  = 0
    

    Deuxièmement, avec les tableaux, vous ne pouvez pas utiliser l’index pour accéder aux données historiques, car les tableaux ne sont pas historisés. Si vous devez utiliser une valeur précédente d’un tableau, vous devez assigner la valeur de l’élément actuel à une variable, puis utiliser cette variable pour accéder aux données historiques des bougies précédentes, par exemple (vous devez le faire pour chaque tableau dont vous souhaitez consulter l’historique).

    Placez ces lignes à la fin, juste avant la RETURN. Cette valeur deviendra la valeur historique (la précédente) dans la barre suivante :

    myRed  = $Red[i]
    myLime = $Lime[i]
    RETURN Mfast AS "Mfast", Mslow AS "Mslow"
    

    Lorsque vous devez faire référence à une valeur historique (dans votre cas, la valeur précédente) d’un tableau, utilisez la variable avec l’index de la barre précédente :

    delta= (myRed[1] - $Lime[i])
    delta= ($Red[i] - myLime[1])
    
    Nicolas, Bernard13 and Iván González thanked this post
    #262218 quote
    Bernard13
    Participant
    Senior

    Merci Nicolas et Roberto !

    Non, Nicolas, je n’ai pas utilisé l’IA pour ces quelques lignes … Le code présenté a juste été créé à des fins pédagiogiques

    “C”est en forgeant qu’on devient forgeron !” (Pour les débutants: Avant-dernier bouton sans bulle pour insérer une citation. 😀 )

    A l’occasion, j’ai remarqué aussi que la copie d’un code original PRT entraine un doublement des lignes vides, ce qui entraine un renumérotage du code original. Mes lignes 15 et 34 sont devenues 29 et 43 à la copie. Peu pratique si le code est très long.

    Je me lance – pour le fun – dans le codage d’un backtest. Des points précis de l’historique seront récupérés, d’où mon idée de stockage en tableaux. Ces variables me serviront aussi à calculer des stats, taux de réussite,RRR, RunUp et MaxDrawDown..

    Merci encore pour vos rapides et précises contributions.



    robertogozzi, Nicolas and Iván González thanked this post
    #262229 quote
    Nicolas
    Keymaster
    Legend

    Félicitations Bernard, je te souhaite bonne continuation et de la réussite dans tes prochains codes. Et n’hésite pas à nous solliciter si besoin.

    Bernard13 thanked this post
Viewing 5 posts - 1 through 5 (of 5 total)
  • You must be logged in to reply to this topic.

Accumulation PnL: variable PL non incrémentée en ProBuilder


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
Bernard13 @bernard13 Participant
Summary

This topic contains 4 replies,
has 3 voices, and was last updated by Nicolas
3 weeks, 6 days ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 06/26/2026
Status: Active
Attachments: 2 files
Logo Logo
Loading...