Bonjour,
Je pense ne pas bien comprendre la declaration de tableau.
Le code ci-dessous ne lance aucun Trade et je suspecte mon utilisation du remplissage d’un tableau dans une boucle FOR.
Sans la ligne “deltaEMA = 0”, on me demande de declarer la variable “deltaEMA” alors que c’est mon tableau.
Du coup je pense que je ne declare pas ce tableau correctement car aucun Trade se lance avec ce code.
Quelqu’un peut m’aider? Merci a tous.
emaLength = 50
curvatureLength =7
volumeThreshold = 15
curvatureThreshold = 5
// Calcul EMA
ema = ExponentialAverage[emaLength](close) // Current EMA value
// Stockage des valeurs de EMA pour calcul de la coubure
IF BarIndex >= curvatureLength THEN
deltaEMA = 0
// Remplissage du tabeau avec les valeurs EMA selon la longueur de courbre
FOR i = 0 TO curvatureLength – 1 DO
$deltaEMA[i] = ExponentialAverage[BarIndex – i](emaLength) – ExponentialAverage[BarIndex – i – 1](emaLength)
NEXT
// Calcul courbure
curvature = ($deltaEMA[0] + $deltaEMA[1] + $deltaEMA[2] + $deltaEMA[3] + $deltaEMA[4] + $deltaEMA[5] + $deltaEMA[6]) / curvatureLength
// Calcul derivee seconde simplifiee
IF curvatureLength >= 2 THEN
secondDifference = deltaEMA[0] – deltaEMA[1]
ENDIF
// Calcul de courbure en fonction de derivee seconde.
IF Abs(secondDifference) > 0 THEN
curvature = curvature / Abs(secondDifference)
ELSE
curvature = 0
ENDIF
ENDIF
IF (intradayTradingActive) THEN
IF (curvature > curvatureThreshold AND volumeCheck > volumeThreshold) THEN
BUY AT MARKET
SET STOP LOSS 8
ENDIF
ENDIF
Certaines variables sont manquantes, postez le fichier ITF s’il vous plaît.
Oui, je pense vraiment que c’est une erreur dans la boucle FOR, justement là où tu utilises l’expression :
BarIndex - i
Ajoutez cette ligne à la fin de votre code, afin que vous puissiez voir quelle est la valeur de l’expression pour comprendre si c’est une valeur correcte ou incorrecte :
graph BarIndex - i
Bonjour
graph BarIndex - i
Renvoie bien une valeur mais lorsque je l’utilise dans la fonction EMA cela renvoie 0.
FOR i = 0 TO curvatureLength - 1 DO $deltaEMA[i] = ema[BarIndex - i] - ema[BarIndex - i - 1]
En fait, je voudrais que dès que le nombre de période de mon graph est supérieur à Curvaturelength (nombre de période nécessaire pour calculer la courbure),
pour chacune des périodes suivantes, les 7 dernières différence de EMA (dans le cas ou Curvature length = 7 ) soient stockées dans un tableau et utilisées dans le calcul de “Curvature”.
Quelle serait la syntaxe correcte de la boucle FOR pour effectuer cette opération?
Merci
J’ai changé :
- ligne 18
- ligne 19
- lignes 21-23
- ligne 28
- ligne 33
DEFPARAM CUMULATEORDERS=FALSE
DEFPARAM FlatAfter = 172900
DEFPARAM PreLoadBars = 0
intradayStart = 090000
intradayEnd = 173000
intradayTradingActive=(Time > intradayStart AND Time < intradayEnd)
emaLength = 50
ExitPeriod = 100
curvatureLength =7
volumeThreshold = 15
curvatureThreshold = 99
volatilityMultiplier = 0
// Calculate current EMA
ema = ExponentialAverage[emaLength](close) // Current EMA value
ema20 = ExponentialAverage[20](close)
emaExit = ExponentialAverage[ExitPeriod](close)
// Tableau de stockage
IF BarIndex >= (curvatureLength + max(emaLength,ExitPeriod)) THEN
deltaEMA = 0
// Remplissage du tableau avec les valeurs de EMA utilisees pour le calcul de courbure
FOR i = curvatureLength - 1 DOWNTO 0
$deltaEMA[i] = ExponentialAverage[emaLength](close[i]) - ExponentialAverage[emaLength](close[i+1])
NEXT
// Calcul simplifie de la courbure
curvature = ($deltaEMA[0] + $deltaEMA[1] + $deltaEMA[2] + $deltaEMA[3] + $deltaEMA[4] + $deltaEMA[5] + $deltaEMA[6]) / curvatureLength
// Afinement du calcul de courbure avec derive 2nd
IF curvatureLength >= 2 THEN
secondDifference = $deltaEMA[0] - $deltaEMA[1] // Simplified second derivative
ENDIF
IF Abs(secondDifference) > 0 THEN
curvature = curvature / Abs(secondDifference) // Normalize curvature based on change
ELSE
//curvature = 0 // Prevent division by zero
ENDIF
ENDIF
// Buy Logic
volumeCheck = Volume // Current volume check
IF (intradayTradingActive) THEN
IF (curvature > curvatureThreshold AND volumeCheck > volumeThreshold) THEN
BUY AT MARKET
SET STOP LOSS 8
ENDIF
ENDIF
graph curvature
Merci, j’ai compris mon erreur.
J’ai un autre code utilisant une boucle FOR et un tableau pour lequel j’ai un problème.
Cette fois, la stratégie est de calculer, à chaque période, la courbe polynomiale du 2nd degré qui fit les 7 périodes précédentes de la courbe EMA.
Une fois l’équation de la courbe trouvée, je calcule le rayon de courbure de celle-ci et déclenche un achat en fonction d’un rayon limite.
Pourrais-tu regarder ce code?
Merci
Essayez d’ajouter ces lignes à la fin et vous verrez que RadiusOfCurvature a une valeur très élevée, c’est donc TOUJOURS > curvatureThreshold.
Vérifiez vos calculs, d’un point de vue formel le code me semble correct.
graph RadiusOfCurvature
graph firstDerivative
graph secondDerivative
graph a
graph b
graph c