Identification de l’écart le plus petit sur les 50 dernières périodes

Viewing 15 posts - 1 through 15 (of 18 total)
  • Author
    Posts
  • #212573 quote
    finplus
    Participant
    Master
    /////////////////////////////////////KAMA 150
    
    Period = 150
    FastPeriod = 2
    SlowPeriod = 30
     
    Fastest = 2 / (FastPeriod + 1)
    Slowest = 2 / (SlowPeriod + 1)
    if barindex < Period+1 then
    Kama=close
    else
    Num = abs(close-close[Period])
    Den = summation[Period](abs(close-close[1]))
    ER = Num / Den
    Alpha = SQUARE(ER *(Fastest - Slowest )+ Slowest)
    KAMA = (Alpha * Close) + ((1 -Alpha)* Kama[1])
    endif
     
    
    /////////////////////////////////////////////////// Intervention Zone
    
    ///////////////////////////////////////////////////////////////////: Distance Cours KAMA
     
    xClose = (Open+High+Low+Close)/4
    Distance = (xclose- kama)
     
    
    moy = exponentialaverage[period]((distance))
    
    
    if Moy<Moy[1] and Moy[1]>Moy[2] and Moy[1]>0 then
    RetB5=RetB4
    RetB4=RetB3
    RetB3=RetB2
    RetB2=RetB1
    RetB1=Moy[1]
    RetBmoy=(RetB1+RetB2+RetB3+RetB4+RetB5)/5
    endif
    
    if Moy>Moy[1] and Moy[1]<Moy[2] and Moy[1]<0 then
    RetH5=RetH4
    RetH4=RetH3
    RetH3=RetH2
    RetH2=RetH1
    RetH1=Moy[1]
    RetHmoy=(RetH1+RetH2+RetH3+RetH4+RetH5)/5
    endif
    
    if abs(retBmoy-0) > abs(retHmoy-0) then
    limitUP = retBmoy
    elsif abs(retBmoy-0) < abs(retHmoy-0) then
    LimitUp = -RetHmoy
    endif
    
    if abs(RetHmoy-0) > abs(RetBmoy-0) then
    limitDn = RetHmoy
    elsif abs(RetHmoy-0) < abs(RetBmoy-0) then
    LimitDn = - RetBmoy
    endif
    
    if (xclose - kama > 0) then
    distplus = distance
    else
    distminus =-distance
    endif
     
    moyplus = average[150](distplus)*1.28
    moyminus = -average[150](distminus)*1.28
    
    
    Ecart = abs(retBmoy - retHmoy)
    Ecartmin = lowest[50](ecart)
    
    
    
    Return distance as "Distance", moy as "DM Moy", RetBmoy as "Moyenne 5 derniers retournements baissiers", RetHmoy as "Moyenne 5 derniers retournements haussiers",limitUp as "LimitUp", limitDn as "LimitDn",moyplus as "moyenne plus", moyminus as "moyenne minus", ecart as "ecart", ecartmin as "ecartmin"
    

    Bonsoir,

    je souhaiterai pouvoir identifier l’écart le plus petit entre les deux moyennes des 5 derniers retournements baissiers et haussiers sur les 50 dernières périodes. j’ai bien tenté une formule dans le code avec “Ecartmin” mais bon j’ai l’impression que le résultat laisse à désirer. Si quelqu’un peut voir où ça coince, merci pour l’aide apportée.

    #212588 quote
    Nicolas
    Keymaster
    Master

    J’ai modifié la dernière ligne du code pour n’avoir que :

    
    Return  ecartmin as "ecartmin"

    et selon moi le résultat est correct.

    finplus thanked this post
    #212616 quote
    finplus
    Participant
    Master

    Merci pour ce retour. Je mets dans le graphe joint deux courbes = les traits jaunes verticaux représentent l’écart  abs(retBmoy retHmoy) et la ligne noire est censée représenter le plus bas des 50 derniers écart. Sauf que cette ligne noire augmente en même temps que l’écart. Ce qui n’est pas normal puisque la ligne noire est censée se caler sur le plus petit des écarts (donc si l’écart s’accroit, en toute logique, la ligne noire ne devrait pas bouger.

    Capture-decran-2023-03-31-a-16.58.16.png Capture-decran-2023-03-31-a-16.58.16.png
    #212720 quote
    finplus
    Participant
    Master

    Bonjour,

    je me permets de remonter mon post.

    merci.

    #212722 quote
    JC_Bywan
    Moderator
    Master

    Ce qui n’est pas normal puisque la ligne noire est censée se caler sur le plus petit des écarts (donc si l’écart s’accroit, en toute logique, la ligne noire ne devrait pas bouger.

    Ce que tu décris comme “pas logique” serait le cas si tu avais voulu le plus petit des écarts “de tout l’historique”, or tu l’as toi-même décrit comme un minimum des 50 derniers, donc au contraire si ton écart ne fait qu’augmenter dès que l’ancien minimum passe en 51e position il sort de l’échantillon des 50 derniers et c’est le nouveau plus petit des 50 derniers qui prend la relève tout en étant plus haut que son prédécesseur, donc a priori rien d’anormal dans le graphe histogramme jaune & ligne noire.

    #212723 quote
    finplus
    Participant
    Master

    D’accord. Donc j’ai mal formulé ma demande. Quelle serait alors la formule pour identifier le plus petit des écarts de tout l’historique ?

    Merci.

    #212727 quote
    JC_Bywan
    Moderator
    Master

    Pour commencer à mesurer un ecartmin de tout l’historique dès qu’il y a eu aussi bien 5 retH que 5 ret B (sinon on resterait sur ecartmin=0), on pourrait initialiser puis mettre à jour le minimum ainsi par exemple:

    if RetBmoy<>0 and RetHmoy<>0 then
       once ecartmin=ecart
    endif
    ecartmin = min(ecart,ecartmin)
    #212728 quote
    finplus
    Participant
    Master

    Merci. Et pour cadrer le calcul sur un historique (par exemple les 50 dernières périodes) comment faire ?

    #212729 quote
    finplus
    Participant
    Master

    Et juste une question : comment interpréter la ligne 4 de ce code ? Que cela veut-il dire notamment  ” min(ecart,ecartmin)” ?

    Merci.

    #212730 quote
    JC_Bywan
    Moderator
    Master

    Pour faire sur 50, c’est comme tu avais déjà fait en ligne 72 de ton post #212573, c’était ok sans rien changer.

    Pour min(ecart,ecartmin) ça rend la variable ecartmin égale à la plus petite (min comme minimum) des 2 valeurs entre parenthèses, donc entre ecart et ecartmin (sa valeur juste avant cette ligne), autrement dit soit ecart est plus petit qu’ecartmin et ecartmin devient ecart, soit ecart est plus grand qu’ecartmin et ecartmin reste ecartmin

    MIN

    finplus thanked this post
    #212731 quote
    finplus
    Participant
    Master

    Merci pour ces informations. Je vais tester ce soir.

    Bon après-midi.

    #212752 quote
    finplus
    Participant
    Master

    /////////////////////////////////////KAMA 150

    Period = 150
    FastPeriod = 2
    SlowPeriod = 30

    Fastest = 2 / (FastPeriod + 1)
    Slowest = 2 / (SlowPeriod + 1)
    if barindex < Period+1 then
    Kama=close
    else
    Num = abs(close-close[Period])
    Den = summation[Period](abs(close-close[1]))
    ER = Num / Den
    Alpha = SQUARE(ER *(Fastest – Slowest )+ Slowest)
    KAMA = (Alpha * Close) + ((1 -Alpha)* Kama[1])
    endif

    /////////////////////////////////////////////////// Intervention Zone

    ///////////////////////////////////////////////////////////////////: Distance Cours KAMA

    xClose = (Open+High+Low+Close)/4
    Distance = (xclose- kama)

    moy = exponentialaverage[period]((distance))

    if Moy<Moy[1] and Moy[1]>Moy[2] and Moy[1]>0 then
    RetB5=RetB4
    RetB4=RetB3
    RetB3=RetB2
    RetB2=RetB1
    RetB1=Moy[1]
    RetBmoy=(RetB1+RetB2+RetB3+RetB4+RetB5)/5
    endif

    if Moy>Moy[1] and Moy[1]<Moy[2] and Moy[1]<0 then
    RetH5=RetH4
    RetH4=RetH3
    RetH3=RetH2
    RetH2=RetH1
    RetH1=Moy[1]
    RetHmoy=(RetH1+RetH2+RetH3+RetH4+RetH5)/5
    endif

    if abs(retBmoy-0) > abs(retHmoy-0) then
    limitUP = retBmoy
    elsif abs(retBmoy-0) < abs(retHmoy-0) then
    LimitUp = -RetHmoy
    endif

    if abs(RetHmoy-0) > abs(RetBmoy-0) then
    limitDn = RetHmoy
    elsif abs(RetHmoy-0) < abs(RetBmoy-0) then
    LimitDn = – RetBmoy
    endif

    if (xclose – kama > 0) then
    distplus = distance
    else
    distminus =-distance
    endif

    moyplus = average[150](distplus)*1.28
    moyminus = -average[150](distminus)*1.28

    Ecart = abs(retBmoy – retHmoy)

    if RetBmoy<>0 and RetHmoy<>0 then
    once ecartmin=ecart
    endif

    ecartmin = min(ecart,ecartmin)
    Ecartmini = lowest[50](ecartmin)

     

     

    Return distance as “Distance”, moy as “DM Moy”, RetBmoy as “Moyenne 5 derniers retournements baissiers”, RetHmoy as “Moyenne 5 derniers retournements haussiers”,limitUp as “LimitUp”, limitDn as “LimitDn”,moyplus as “moyenne plus”, moyminus as “moyenne minus”, ecart as “ecart”, ecartmini as “ecartmin”

     

    désolé, impossible d’intégrer le code correctement. Donc est-ce que la fin du code est correcte parce que graphiquement ce n’est pas ce que j’attendais. Merci.

    #212761 quote
    JC_Bywan
    Moderator
    Master

    Les 2 requêtes précédentes étaient: soit ecartmin sur l’historique (code fourni), soit ecartmin sur 50 périodes (ce que tu avais déjà fait).

    Là tu as créé une 3e chose différente, tu as fait un ecartminI sur 50 périodes de l’ecartmin sur l’historique, ça n’est plus la même chose que ce qui a été proposé à tes requêtes, donc normal que ça ne donne rien d’attendu. Soit la requête change à nouveau, soit tu dois choisir entre les 2 premières requêtes (ecartmin sur 50 périodes ou sur l’historique).

    finplus thanked this post
    #212762 quote
    finplus
    Participant
    Master

    Merci pour la réponse. Mais comment indique que cette ligne de code  :

    1
    2
    3
    4
    if RetBmoy<>0 and RetHmoy<>0 then
    once ecartmin=ecart
    endif
    ecartmin = min(ecart,ecartmin)

    doit être appliquée sur un historique défini (par exemple les 50 dernières périodes) ? Je ne comprends pas.

    #212766 quote
    JC_Bywan
    Moderator
    Master

    D’accord. Donc j’ai mal formulé ma demande. Quelle serait alors la formule pour identifier le plus petit des écarts de tout l’historique ?

    Merci.

    C’est cette question qui a débouché sur ce bout de 4 lignes de code en réponse à la requête modifiée de trouver une solution appliquée sur “tout” l’historique.

    Si tu veux sur 50, tu n’avais rien à changer à ton post de départ “Ecartmin = lowest[50](ecart)”, où tu croyais qu’il y avait une erreur de code mais que le code était bon c’était juste une erreur d’interprétation de la ligne noire sur histo jaune.

    Par extension si tu veux sur une autre valeur que 50, par exemple 100, tu gardes ta façon de faire avec lowest “Ecartmin = lowest[100](ecart)” mais pas besoin d’appliquer mon bout de code qui était fait non pas pour une portion d’historique mais uniquement pour tout l’historique.

Viewing 15 posts - 1 through 15 (of 18 total)
  • You must be logged in to reply to this topic.

Identification de l’écart le plus petit sur les 50 dernières périodes


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
finplus @finplus Participant
Summary

This topic contains 17 replies,
has 3 voices, and was last updated by finplus
2 years, 11 months ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 03/30/2023
Status: Active
Attachments: 1 files
Logo Logo
Loading...