Ciao a tutti,
avrei bisogno di un semplice oscillatore atr% — ((AverageTrueRange[n](Close) / (Close)) * 100) — che oscilli tra 0 e 100 un pò come fa un RSI.
Se potete aiutarmi ve ne sarei grato.
Jim
Ciao Jim, prova questo….in pratica è l’RSI a cui ho sostituito al prezzo close e close[1], il valore dell’ATR e ATR[1]
P è il periodo della media mobile di Wilder per il calcolo dell’oscillatore mentre N è il periodo dell’ATR.
Maxx
P=14
N=14
ATR=AverageTrueRange[N](Close)
rialzo = MAX(0, ATR - ATR[1])
ribasso = MAX(0, ATR[1] - ATR)
mmRialzo = WILDERAVERAGE[p](rialzo)
mmRibasso = WILDERAVERAGE[p](ribasso)
RS = mmRialzo / mmRibasso
mioATR = 100 - 100 / (1 + RS)
RETURN mioATR AS "ATROSCILLATOR", 30, 70, 50, 100,0
Ti ringrazio Maximus, sempre gentile come sempre. Ottimo il sistema proposto e ti ringrazio ma ero più interessato ad una formula di questo tipo:
[(valorore attuale dell’atr – minimo a n barre dell’atr)/range dell’atr]*100
Io non riesco proprio a metterla giù correttamente, riusciresti a farmi una mano per favore?
Jim
Ciao Jim, non ho capito bene cosa intendi comunque prova con questo codice.
Mette in rapporto l’ATR[p](close) corrente con il massimo valore registrato di ATR[p](close) di N periodi, puoi mettere 100 o 1000 per esempio.
Penso sia quello che vuoi tu.
Max
N=1000
P=14
a=averagetruerange[P](close)
b=highest[N](a)
c=(100/b)*a
return c
Ottimo Max, questo va bene.
ti ringrazio molto.
Ciao Max, ho ripreso in mano questo codice e volevo fare una cosa del genere:
- per esempio se io ho un valore attuale al close di oggi dell’atr a 21giorni = 300 quindi a=300
- minimo dell’atr a 21 giorni = 220 quindi b= 220
- massimo dell’atr a 21 giorni = 350 quindi c = 350
e faccio la formula [(a-b)/(c-b)]*100 = 61,53
Io ci ho provato utilizzando i codici ma non mi torna qualcosa, mi puoi aiutare?
Ti ringrazio molto.
Ciao, cosa intendi con i periodi a “21 giorni”, in a,b e c?:
nella variabile a intendi averagetruerange[21](close), quindi è il periodo dell’ATR nella barra corrente?
nella variabile b e c intendi il valore più alto e più basso raggiunto da averagetruerange[21](close) negli ultimi 21 giorni, oppure il valore più alto e più basso dell’averagetruerange[21](close) raggiunto in giornata in un timeframe intraday?
E’ importante definire bene queste variabili.
Max
Stai creando un oscillatore stocastico ma con ATR al posto del prezzo.
p=21
REM Computes the highest and lowest ATR on p bars
atr = averagetruerange[p]
hi = highest[p](atr)
lo = lowest[p](atr)
REM Let's build the oscillator
oscillator = ((close - lo) / (hi - lo) * 100)
RETURN oscillator
L’unica differenza è che l’oscillatore non è levigato e non ha alcun segnale come lo stocastico originale.
Intanto grazie Nicolas,
due cose, non capisco come mai inserendo il codice da te espresso non oscilli tra 0 e 100 ma mi va anche a sopra i 200.
Seconda cosa al posto del close nella formula finale vorrei inserire il close dell’atr e non il close del valore del prezzo.
Ti ringrazio per la pazienza
Ciao Max. Intendevo questo:
nella variabile a intendo averagetruerange[21](close), quindi è il periodo dell’ATR nella barra corrente.
nella variabile b e c intendo il valore più alto e più basso raggiunto da averagetruerange[21](close) negli ultimi 21 giorni.
E quindi [(a-b)/(c-b)]*100
e in teoria dovrei avere un indicatore che mi oscilli tra 0-100.
Forse sono arrivato al dunque:
p=21
atr = averagetruerange[p]
hi = highest[p](atr)
lo = lowest[p](atr)
atrx =averagetruerange[21](close)
oscillator = ((atrx – lo) / (hi – lo) * 100)
RETURN oscillator
Dovrebbe essere questo, ovviamente ci sono arrivato grazie a voi 🙂
Allora era come lo intendevo io, esatto…puoi semplificare così,
in questo modo P=periodo ATR(close), N=numero giorni per considerare il massimo e il minimo dell’ATR, nel tuo caso entrambi i valori sono 21
p=21
N=21
atr = averagetruerange[p](close)
hi = highest[N](atr)
lo = lowest[N](atr)
oscillator = ((atr – lo) / (hi – lo) * 100)
RETURN oscillator
sì! scusa per l’errore nel mio codice, ho dimenticato di sostituire “Close” con una variabile atr …
Perfetto!
Ottimo ragazzi vi ringrazio per la pazienza.Ben fatto Nicolas.