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"
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"
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])
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.
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.