semplice correzione indicatore ADX
Forums › ProRealTime forum Italiano › Supporto ProBuilder › semplice correzione indicatore ADX
- This topic has 9 replies, 3 voices, and was last updated 5 years ago by robertogozzi.
-
-
09/15/2019 at 10:12 PM #107617
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?:
codice12345678910// Calcolo ADXCa = DIplus[14](close)b = DIminus[14](close)d = ((a - b) / (a + b))e = ABS(d)ADXC = 100*Average[e](close)return ADXC09/16/2019 at 12:18 AM #107640Il 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).
09/16/2019 at 8:23 AM #107662Al primo tentativo di codifcare qualcosa di mio incappo in un errore della piattaforma 😀
Cmq niente da fare la soluzione proposta ritorna lo stesso errore.
1234567891011// Calcolo ADXCa = DIplus[14](close)b = DIminus[14](close)d = ((a - b) / (a + b))e = ABS(d)x = eADXC = 100*Average[x](close)return ADXC09/16/2019 at 8:29 AM #10766309/16/2019 at 9:04 AM #107670Devi modificare il codice così:
123456789// Calcolo ADXCa = DIplus[14](close)b = DIminus[14](close)d = round(((a - b) / (a + b)))e = max(1,ABS(d))ADXC = 100 * Average[e](close)return ADXCalla 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:
1234567891011121314// Calcolo ADXCa = DIplus[14](close)b = DIminus[14](close)d = ((a - b) / (a + b))e = ABS(d)ADXC = 100 * Average[e](close)//return ADXCbuy at -close limitgraph agraph bgraph dgraph egraph adxc09/16/2019 at 9:18 AM #107674Grazie, 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
09/16/2019 at 9:27 AM #10767709/16/2019 at 9:34 AM #10767809/16/2019 at 10:21 AM #107687No, 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.
09/16/2019 at 11:18 AM #107694Allora, 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
ADX custom12345678// Calcolo ADXCTipo = 3 //3=Wilder's MA (https://www.prorealcode.com/documentation/average/)p = 14 //14 periodia = DIplus[p](close)b = DIminus[p](close)d = abs((a - b) / (a + b))ADXC = 100 * Average[p,Tipo](d)return ADXC1 user thanked author for this post.
-
AuthorPosts
Find exclusive trading pro-tools on