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
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).
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
Prova ad inserire cosi:
If e>1 then
X=e
else
X=1
endif
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
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
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?
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.
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