Conversion d'indicateurs vers ProBuilder

Viewing 15 posts - 16 through 30 (of 30 total)
  • Author
    Posts
  • #35066 quote
    laurenzo
    Participant
    Average

    Je sèche sur la Parabolic weighted MA avec la boucle qui contient r 🙂

    #35116 quote
    laurenzo
    Participant
    Average

    Pas mal de petites fautes que je corrige dans les indicateurs que j’ai publié.

    #35122 quote
    laurenzo
    Participant
    Average

    Zero Lag Exponential Moving Average by John Ehlers

    // --- parameters
    Series = CustomClose
    // Period = 20
    // ---
    
    Period = MAX(Period, 1)
    
    alpha = 2 / (1 + Period)
    per = ROUND((Period - 1) / 2)
    
    IF BarIndex <= per THEN
        ZLEMA = Series
    ELSE
        ZLEMA = ZLEMA[1] + alpha * (2 * Series - Series[per] - ZLEMA[1])
    ENDIF
    
    RETURN ZLEMA
    
    #35132 quote
    laurenzo
    Participant
    Average

    Ahrens Moving Average

    
    
    //-----------------------//
    // Ahrens Moving Average //
    //-----------------------//
    
    // --- parameters
    Series = CustomClose
    // Period = 20
    // ---
    
    IF BarIndex < Period THEN
        AHMA = Series
    ELSE
        AHMA = AHMA[1] + ((Series - ((AHMA[1] + AHMA[Period]) / 2)) / Period)
    ENDIF
    
    RETURN AHMA
    
    #35136 quote
    laurenzo
    Participant
    Average

    Toujours du mal avec la Parabolic weighted MA! 🙂

    Du mal avec la boucle for et le r-k. C’est du repaint? Ou je rate un truc!

    #35240 quote
    laurenzo
    Participant
    Average

    Aujourd’hui tentative de convertir http://unicorn.us.com/trading/src/_filter2pole.txt

    J’ai tout bon sauf la fin… c’est balot 🙂

    
        for m = 1 to Fs begin {Fs=1 usually, except for small length}
            j = cascades-1;
            sig2 = sig1;    {prior previous value of input signal}
            sig1 = sig0;    {previous value of input signal}
            sig0 = p;       {current input value}
    
            {this is the 1-pass filter}
            bw2[j] = bw1[j];    {prior previous filter value}
            bw1[j] = bw0[j];    {previous filter value}
            bw0[j] = a0*sig0 + a1*sig1 + a2*sig2 + b1*bw1[j] + b2*bw2[j];
    
            {cascade additional filters if needed}
    
            while j > 0 begin
                k = j;  j = j - 1;
                bw2[j] = bw1[j]; {shift current filter values to prior values}
                bw1[j] = bw0[j];
                bw0[j] = a0*bw0[k] + a1*bw1[k] + a2*bw2[k] + b1*bw1[j] + b2*bw2[j];
            end;
        end;

     

    Converti en :

        // actual filtering starts here
        FOR m = 1 TO Fs DO
    
            j = cascades - 1
            sig2 = sig1
            sig1 = sig0
            sig0 = Series
    
            bw2[j] = bw1[j]
            bw1[j] = bw0[j]
            bw0[j] = a0 * sig0 + a1 * sig1 + a2 * sig2 + b1 * bw1[j] + b2 * bw2[j]
    
    
            WHILE j > 0 DO
                k = j
                j = j - 1
                bw2[j] = bw1[j]
                bw1[j] = bw0[j]
                bw0[j] = a0 * bw0[k] + a1 * bw1[k] + a2 * bw2[k] + b1 * bw1[j] + b2 * bw2[j]
            WEND
        NEXT
    

    Forcément ça me plante aux tableaux. Personne verrait une astuce pour convertir ça correctement? Je suis preneur 🙂

    #35251 quote
    Nicolas
    Keymaster
    Master

    Les variables qui s’incrementent en tableau dynamique, tu peux essayer de les renommer en leur donnant un nom distinct pour chacune d’elles.

    #35253 quote
    laurenzo
    Participant
    Average

    Les variables qui s’incrementent en tableau dynamique, tu peux essayer de les renommer en leur donnant un nom distinct pour chacune d’elles.

    Salut Nicolas!

    Je comprends pas trop comment faire. 🙁

    Tu pourrais me donner un exemple avec un bw pour voir?

    #35328 quote
    Nicolas
    Keymaster
    Master

    J’ai bien regardé et ça ne fonctionne pas ici, car tes variables bw0, bw1 et bw2 doivent toutes bien s’incrémenter avec j qui est dynamique … 🙁

    laurenzo thanked this post
    #35342 quote
    laurenzo
    Participant
    Average

    Merci pour ta réponse.

    Dommage 🙁

    #35489 quote
    laurenzo
    Participant
    Average

    One More Average

    // OMA - One More Average
    
    // --- parameters
    Series = CustomClose
    
    // Period = 20
    Adaptive = 1
    Sensibility = 1
    //--------
    
    Period = MAX(Period, 1)
    Sensibility = MAX(Sensibility, -1.5)
    
    Data = Average[1](Series)
    averagePeriod = Period
    
    IF BarIndex < Period THEN
        OMA = Series
    ELSE
    
        IF Adaptive = 1 AND averagePeriod > 1 THEN
            minPeriod = averagePeriod / 2.0
            maxPeriod = minPeriod * 5.0
            endPeriod = ROUND(maxPeriod)
            signal = ABS((Data - Data[endPeriod]))
            noise = 0.00000000001
            FOR k = 1 TO endPeriod DO
                noise = noise + ABS(Data - Data[k])
                averagePeriod = ROUND(((signal / noise) * (maxPeriod - minPeriod)) + minPeriod)
            NEXT
        ENDIF
    
        alpha = (2.0 + Sensibility) / (1.0 + Sensibility + averagePeriod)
    
        e1 = e1 + alpha * (Data - e1)
        e2 = e2 + alpha * (e1 - e2)
        v1 = 1.5 * e1 - 0.5 * e2
        e3 = e3 + alpha * (v1 - e3)
        e4 = e4 + alpha * (e3 - e4)
        v2 = 1.5 * e3 - 0.5 * e4
        e5 = e5 + alpha * (v2 - e5)
        e6 = e6 + alpha * (e5 - e6)
        OMA = 1.5 * e5 - 0.5 * e6
    
    ENDIF
    
    RETURN OMA
    

    Voici mon code,

    Vous auriez une idée de comment faire pour filtrer les valeurs proches de BarIndex = 0?

    Cela fait du méga bruit, c’est même pas la valeur du cours et c’est moche.

    J’attache un screen pour vous donner une idée!

    screen.png screen.png
    #35494 quote
    Nicolas
    Keymaster
    Master

    Merci Laurenzo, il y a déjà deux indicateurs utilisant la OMA dans la bibliothèque pour info:

    https://www.prorealcode.com/prorealtime-indicators/step-one-more-average/

    https://www.prorealcode.com/prorealtime-indicators/one-more-average-macd/

    #35528 quote
    laurenzo
    Participant
    Average

    Merci Nicolas,

    En fait l’idée c’était de savoir si quelqu’un avait une idée pour virer le bruit du début sur l’indicateur. 🙂

    #35629 quote
    laurenzo
    Participant
    Average

    Parabolic weighted MA

    // --- parameters
    Series = CustomClose
    // Period = 20
    //--------
    
    Period = MAX(Period, 1)
    
    SumW = Period * Period
    Sum = SumW * Series
    
    FOR i = 0 TO Period DO
         Weight = (Period - i) * (Period - i)
         SumW = SumW + Weight
         Sum = Sum + Weight * Series[i]
    NEXT
    
    RETURN Sum / SumW
    

    ça doit être sûrement ça!

    #35641 quote
    Nicolas
    Keymaster
    Master

    Le bruit que tu observes est à la ligne 18 de ton code. En général j’attends qu’il y est assez de barindex pour commencer à tracer les résultats des calculs, voir le code des indicateurs que je t’indique dans mon post précédent.

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

Conversion d'indicateurs vers ProBuilder


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
laurenzo @laurenzo Participant
Summary

This topic contains 29 replies,
has 2 voices, and was last updated by Nicolas
8 years, 9 months ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 05/08/2017
Status: Active
Attachments: 1 files
Logo Logo
Loading...