sto tentando di implementare un filtro ricorsivo in una Media Mobile detta appunto Ricorsiva (RMA), a seguire il codice che ho creato (per un RMA a 10 periodi):
Il codice sopra riportato può anche essere scritto nel seguente modo (da A a J) a titolo di esempio:
1
2
3
4
5
A=close[N]
B=(A+close[N-1])/2
C=(B+close[N-2])/3
D=(C+close[N-3])/4
// e continua ...
Ora il problema da sottoporvi è:
Se io volessi aggiungere una RMA a 15 periodi con il codice che ho creato sarei costretto ad aggiungere un nuovo indicatore, in quanto quello creato nell’esempio vale solo per la variabile N=9 periodi, aggiungendo nuove righe di codice per l’adattamento al nuovo periodo.
Esiste la possibiltà di creare qualcosa di automatico, definendo la sola variabile N, a prescindere dal periodo che uno sceglie ?
Non servono gli array, basta una somma all’interno di un ciclo:
1
2
3
4
5
6
7
8
9
10
N=10//Periodo RMA (10)
P=6//Periodo SMA di RMA (6)
Somma=0
FORi=N-1DOWNTO0
j=N-i
Somma=Somma+(summation[j](close[i])/j)
NEXT
Somma=Somma/N
Y=average[P](Somma)
RETURNSommaas"RMA",Yas"AVERAGE RMA"
ovviamente puoi cambiare entrambi i periodi come preferisci e magari aggiungere le variabili in modo da poterne variare i periodi dalle proprietà dell’indicatore. Questa a 10 e 6 periodi è identica alla tua sopra.