semplice correzione indicatore ADX

Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
    Posts
  • #107617 quote
    carlo__
    Participant
    Average

    Buongiorno

     

    chiedo scusa ma sono alle primissime armi con la programmazione

     

    Sto provando a modificare un ADX ma ricevo l’errore “un parametro di tipo positivo è atteso con average”

     

    Di seguito il codice, dove sbaglio?:

     

    // Calcolo ADXC
    
    a = DIplus[14](close)
    b = DIminus[14](close)
    d = ((a - b) / (a + b))
    e = ABS(d)
    
    ADXC = 100*Average[e](close)
    
    return ADXC
    #107640 quote
    robertogozzi
    Moderator
    Master

    Il fatto che ci sia ABS() lo interpreta come un possibile elemento negativo, anche se ABS lo convertirebbe comunque in positivo! Credo sia un errore della piattaforma.

    Scrivi alla riga 7 x=e ed alla riga 8 utilizza x al posto di e (non l’ho provato).

    #107662 quote
    carlo__
    Participant
    Average

    Al primo tentativo di codifcare qualcosa di mio incappo in un errore della piattaforma 😀

     

    Cmq niente da fare la soluzione proposta ritorna lo stesso errore.

     

    // Calcolo ADXC
     
    a = DIplus[14](close)
    b = DIminus[14](close)
    d = ((a - b) / (a + b))
    e = ABS(d)
    x = e
     
    ADXC = 100*Average[x](close)
     
    return ADXC
    #107663 quote
    coscar
    Participant
    Senior

    Prova ad inserire cosi:

    If e>1 then
    X=e
    else
    X=1
    endif
    
    #107670 quote
    robertogozzi
    Moderator
    Master

    Devi modificare il codice così:

    // Calcolo ADXC
     
    a = DIplus[14](close)
    b = DIminus[14](close)
    d = round(((a - b) / (a + b)))
    e = max(1,ABS(d))
     
    ADXC = 100 * Average[e](close)
    return ADXC

    alla 6 ho aggiunto ROUND per essere sicuro che non ci siano decimali (una media non può avere periodi con decimali) ed alla riga 7 (ma si potrebbe mettere anche alla 6) ho aggiunto MAX per fare in modo che il periodo non possa essere < 1.

    Puoi trasformare l’indicatore (nella versione originale, o modificata se vuoi) in stratregia e vedere i valori delle variabili, candela per candela, nell’apposito riquadro di ProBackTest:

    // Calcolo ADXC
     
    a = DIplus[14](close)
    b = DIminus[14](close)
    d = ((a - b) / (a + b))
    e = ABS(d)
    ADXC = 100 * Average[e](close)
    //return ADXC
    buy at -close limit
    graph a
    graph b
    graph d
    graph e
    graph adxc
    x-5.jpg x-5.jpg
    #107674 quote
    carlo__
    Participant
    Average

    Grazie, adesso funziona ma non riporta i valori dell’indicatore ADX predefinito della piattaforma.

    Riporto il calcolo dell’ADX da Wikipedia: ADX = 100 volte la media mobile esponenziale del valore assoluto di [(+DI) – (-DI)] diviso da [(+DI) + (-DI)]

     

    Dove sbaglio? Ho allegato una immagine di confronto fra il mio e quello predefinito

    Cattura-2.jpg Cattura-2.jpg
    #107677 quote
    robertogozzi
    Moderator
    Master
    #107678 quote
    carlo__
    Participant
    Average

    ok grazie provo a correggere con le formule che mi ha indicato

     

    C’è un modo per modificare o guardare dentro il codice degli indicatori predefiniti della piattaforma?

    #107687 quote
    robertogozzi
    Moderator
    Master

    No, non è possibile.

    Tuttavia usano le formule classiche, io mi sono costruito, per prova, varie medie, stocastico, Rsi, Atr, Bollinger ed altri e ho trovato una corrispondenza precisa.

    #107694 quote
    robertogozzi
    Moderator
    Master

    Allora, ho rifatto la prova ed ho cambiato la formula, in particolare:

    • la tua riga 8 originale, tra parentesi tonde non vuole e, ma i periodi, 14, mentre e va messo tra le tonde, alla fine, al posto di CLOSE (era questa riga all’origine dell’errore)
    • PRT usa la media di wilder, non quella semplice e neppure quella esponenziale
    // Calcolo ADXC
    Tipo = 3                   //3=Wilder's MA (https://www.prorealcode.com/documentation/average/)
    p    = 14                  //14 periodi
    a    = DIplus[p](close)
    b    = DIminus[p](close)
    d    = abs((a - b) / (a + b))
    ADXC = 100 * Average[p,Tipo](d)
    return ADXC
    carlo__ thanked this post
Viewing 10 posts - 1 through 10 (of 10 total)
  • You must be logged in to reply to this topic.

semplice correzione indicatore ADX


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
author-avatar
carlo__ @carlo__ Participant
Summary

This topic contains 9 replies,
has 3 voices, and was last updated by robertogozzi
6 years, 6 months ago.

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 09/15/2019
Status: Active
Attachments: 2 files
Logo Logo
Loading...