Declaration Tableau et boucle For
Forums › ProRealTime forum Français › Support ProBuilder › Declaration Tableau et boucle For
- This topic has 7 replies, 2 voices, and was last updated 2 days ago by robertogozzi.
-
-
11/09/2024 at 10:40 AM #240165
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
ENDIFIF (intradayTradingActive) THEN
IF (curvature > curvatureThreshold AND volumeCheck > volumeThreshold) THEN
BUY AT MARKET
SET STOP LOSS 8
ENDIF
ENDIF11/09/2024 at 12:08 PM #240166Certaines variables sont manquantes, postez le fichier ITF s’il vous plaît.
11/09/2024 at 12:34 PM #24017111/09/2024 at 6:59 PM #240179Oui, je pense vraiment que c’est une erreur dans la boucle FOR, justement là où tu utilises l’expression :
1BarIndex - iAjoutez 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 :
1graph BarIndex - i11/10/2024 at 12:15 PM #240198Bonjour
1graph BarIndex - iRenvoie bien une valeur mais lorsque je l’utilise dans la fonction EMA cela renvoie 0.
1FOR 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
11/10/2024 at 5:03 PM #240218J’ai changé :
- ligne 18
- ligne 19
- lignes 21-23
- ligne 28
- ligne 33
1234567891011121314151617181920212223242526272829303132333435363738394041424344DEFPARAM CUMULATEORDERS=FALSEDEFPARAM FlatAfter = 172900DEFPARAM PreLoadBars = 0intradayStart = 090000intradayEnd = 173000intradayTradingActive=(Time > intradayStart AND Time < intradayEnd)emaLength = 50ExitPeriod = 100curvatureLength =7volumeThreshold = 15curvatureThreshold = 99volatilityMultiplier = 0// Calculate current EMAema = ExponentialAverage[emaLength](close) // Current EMA valueema20 = ExponentialAverage[20](close)emaExit = ExponentialAverage[ExitPeriod](close)// Tableau de stockageIF BarIndex >= (curvatureLength + max(emaLength,ExitPeriod)) THENdeltaEMA = 0// Remplissage du tableau avec les valeurs de EMA utilisees pour le calcul de courbureFOR i = curvatureLength - 1 DOWNTO 0$deltaEMA[i] = ExponentialAverage[emaLength](close[i]) - ExponentialAverage[emaLength](close[i+1])NEXT// Calcul simplifie de la courburecurvature = ($deltaEMA[0] + $deltaEMA[1] + $deltaEMA[2] + $deltaEMA[3] + $deltaEMA[4] + $deltaEMA[5] + $deltaEMA[6]) / curvatureLength// Afinement du calcul de courbure avec derive 2ndIF curvatureLength >= 2 THENsecondDifference = $deltaEMA[0] - $deltaEMA[1] // Simplified second derivativeENDIFIF Abs(secondDifference) > 0 THENcurvature = curvature / Abs(secondDifference) // Normalize curvature based on changeELSE//curvature = 0 // Prevent division by zeroENDIFENDIF// Buy LogicvolumeCheck = Volume // Current volume checkIF (intradayTradingActive) THENIF (curvature > curvatureThreshold AND volumeCheck > volumeThreshold) THENBUY AT MARKETSET STOP LOSS 8ENDIFENDIFgraph curvature1 user thanked author for this post.
11/11/2024 at 11:05 PM #240253Merci, 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
11/13/2024 at 6:00 PM #240323Essayez 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.123456graph RadiusOfCurvaturegraph firstDerivativegraph secondDerivativegraph agraph bgraph c -
AuthorPosts
Find exclusive trading pro-tools on