Declaration Tableau et boucle For

Viewing 8 posts - 1 through 8 (of 8 total)
  • Author
    Posts
  • #240165 quote
    Mielcz571
    Participant
    New

    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

    #240166 quote
    robertogozzi
    Moderator
    Master

    Certaines variables sont manquantes, postez le fichier ITF s’il vous plaît.

    #240171 quote
    Mielcz571
    Participant
    New

    Merci pour votre retour.

    Ci-joint le fichier  .itf

    #240179 quote
    robertogozzi
    Moderator
    Master

    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
    #240198 quote
    Mielcz571
    Participant
    New

    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

    #240218 quote
    robertogozzi
    Moderator
    Master

    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
    Iván González thanked this post
    #240253 quote
    Mielcz571
    Participant
    New

    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

    #240323 quote
    robertogozzi
    Moderator
    Master

    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
Viewing 8 posts - 1 through 8 (of 8 total)
  • You must be logged in to reply to this topic.

Declaration Tableau et boucle For


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
Mielcz571 @mielcz571 Participant
Summary

This topic contains 7 replies,
has 2 voices, and was last updated by robertogozzi
1 year, 2 months ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 11/09/2024
Status: Active
Attachments: 3 files
Logo Logo
Loading...