Buongiorno a tutti,
vorrei condividere con voi il mio indicatore Donchian Regression, che calcola la massima e la minima regressione lineare del periodo tra tre regressioni lineari (applicate a close, high, e low). Può essere utile per chi vuole individuare un trend in base al periodo scelto. Lo sfondo si colora di verde o di rosso a seconda che la differenza tra maxregression corrente e precedente sommata a minregression corrente e precendente , da un valore superiore o inferiore a 0. E’ possibile anche immettere dei valori esempio a scelta di close e volendo anche di high e low, per trovare ad esempio il livello di prezzo limite oltre il quale il colore cambia.
Ecco il codice in questione:
periodo=3 // Periodo della regressione lineare
nclose=1 // Prezzo che è possibile modificare
n=100 // Barra in cui è applicato il prezzo modificato
x=0 // per x=0 è visibile nclose e la linea di barra
period = max(3,periodo)
if x=0 then
DRAWVLINE(n) //Segna la barra modificata, indicata da n
DRAWHLINE(nclose)// Segna il prezzo modificato, indicato da nclose
endif
// Inizializzazione delle variabili
nclose = nclose // Il valore di chiusura per la candela n
nhigh = nclose // Il valore massimo per la candela n
nlow = nclose // Il valore minimo per la candela n
maxregression = 0
minregression = 100000
aMax = 0
aMin = 0
// Inizializzazione delle variabili
closemod = 0
highmod = 0
lowmod = 0
// Modifica della candela n
if barssince(barindex-n) then
closemod = nclose
highmod = nhigh
lowmod = nlow
openmod=nclose
else
closemod = close
highmod = high
lowmod = low
openmod=open
endif
for i = 3 to period
// Calcola il valore corrente della regressione lineare
currentregression = linearregression[i](closemod)
// Calcola il valore corrente della regressione lineare per i minimi
lowregression = linearregression[i](lowmod)
// Calcola il valore corrente della regressione lineare per i massimi
highregression = linearregression[i](highmod)
// Trova il massimo tra i valori di regressione correnti
maxregression = max(maxregression, max(currentregression,lowregression))
// Trova il minimo tra i valori di regressione correnti
minregression = min(minregression, min(currentregression,maxregression))
next
tot=(maxregression-maxregression[1])+(minregression-minregression[1])
// Output della soglia superata
media=(maxregression+minregression)/2
if tot>0 then
signal=1
r=0
g=255
b=0
elsif tot<0 then
signal=-1
r=255
g=0
b=0
endif
BACKGROUNDCOLOR(r,g,b,50)
return (maxregression) as "Max Regression4", (minregression) as "Min Regression4", tot as "tot"
Vorrei aggiungere un calcolo automatico del livello di prezzo limite in cui tot cambia segno e quindi fa cambiare il colore alla candela . Ho provato a usare i cicli for e next richiamando l’indicatore con la funzione call , ma il calcolo è troppo lento e inoltre non sono riuscito a calcolarlo oltre alla candela n e senza impostare una quantità di pips fissa sopra e sotto open . Sarebbe utile calcolarlo per un tot di candele precedenti a n . Ecco il codice dell’indicatore :
pips=100 //range di pips entro cui cercare il livello di cambio colore
nbar=550 //barra in cui cercare il livello di cambio colore
x=0
p=3
p=max(p,3)
y=close
myMaxRegression4, myMinRegression4, mytot4 = CALL "Donchian Regressione(5)"[p, 1, y, nbar, 1]
if x=0 then
drawvline(nbar)
endif
zero = close // inizializzo la variabile zero
t=-mytot4
if mytot4 > 0 then
for i = 1 to pips
nclose1 = y - (i * pipsize)
nclose2=y-((i-1)*pipsize)
myMaxRegression, myMinRegression, mytot = CALL "Donchian Regressione(3)"[p, 1, nclose1, nbar, 1]
myMaxRegression4, myMinRegression4, mytot4 = CALL "Donchian Regressione(5)"[p, 1, nclose2, nbar, 1]
if (nclose1 < y and mytot<0) and (nclose1<nclose2 and mytot4>0) then
zero = nclose1
break
endif
next
else
for i = 1 to pips
nclose1 = y + (i * pipsize)
nclose2=y+((i-1)*pipsize)
myMaxRegression, myMinRegression, mytot = CALL "Donchian Regressione(3)"[p, 1, nclose1, nbar, 1]
myMaxRegression4, myMinRegression4, mytot4 = CALL "Donchian Regressione(5)"[p, 1, nclose2, nbar, 1]
if (nclose1 > y and mytot>0) and (nclose1>nclose2 and mytot4<0) then
zero = nclose1
break
endif
next
endif
return zero as "zero"
Ringrazio in anticipo tutti quelli che vorranno partecipare a questa mia piccola creazione.