MEDIE MOBILI ADATTIVE




MEDIE MOBILI ADATTIVE 
======================

Scopo di queste note e' di comprendere il funzionamento ed il possibile
uso delle classiche medie mobili esponenziali, arrivando alla costruzione 
di una media mobile adattiva, ovvero che muta il suo parametro di 
'smoothing' al mutare delle condizioni della serie storica su cui e' 
applicata. Le note termineranno con la scrittura di una userfunction, in 
EasyLanguage per Tradestation. Le formule permetteranno certamente a tutti 
voi di costruire l'indicatore per altri software.
 
---------------------------
NOTA INIZIALE
---------------------------
Nel testo sono usate alcune convenzioni riguardanti le formule.
Si partira' in genere da una serie storica:

C(t) dove t=1,2...,X

per *C* si intende il prezzo del titolo al tempo *t*. Nel caso di C(t-1) 
si intendera' il prezzo di ieri, e cosi' via.

Indicheremo poi:

F(t+1)

la previsione di C(t+1), ovvero la previsone che l'algoritmo fara', 
analizzando la serie originale fino a C(t), del futuro valore 
(sconosciuto) C(t+1).

Quando serviranno, per non creare confusione, le normali parentesi tonde 
saranno sostituite con parentesi quadre
-------------------------


                        =======================


L'uso delle medie mobili esponenziali (EMA, exponential smoothing average) 
per analisi e previsioni in campo economico inizia negli anni 50, e da 
allora e' diventato tranquillamente popolare. Esse sono usate in molti 
modi e, cosa che puo' sembrare strana, pure per previsioni a breve e medio 
termine. Tenete conto del fatto che le classiche serie storiche economiche 
su cui si producono gli econometristi, tipo PIL, Inflazione, 
Disoccupazione o Produzione Industriale, hanno generalmente un contenuto 
deterministico, in termini di trend o componenti cicliche, decisamente 
superiore a quello delle serie storiche finanziarie classiche.

Tipicamente possiamo considerare la media mobile esponenziale come:

EMA(t)=C(t)*ALPHA+[1-ALPHA]*EMA(t-1)                             (1)

dove ALPHA e' la costante di smoothing, ovviamente < 1.
In prima approssimazione e' possibile determinare ALPHA sulla scorta del 
piu' comune periodo (chiamiamolo N) di una media mobile semplice con:

ALPHA=2/[1+N]

Da notare che lo 'smooting', ovvero la riduzione del noise presente nella 
serie storica, ha come prezzo un ritardo della EMA rispetto ai dati 
originari, ritardo quantificabile in:

Ritardo (in periodi) =(N-1)/2

Semplici passaggi matematici permettono di dimostrare che nella EMA e' 
contenuta l'informazione derivante da tutti i valori passati, in modo 
decrescente (esponenzialmente). Questo a sostanziale differenza della MM 
semplice, dove sono contenuti solo gli ultimi N termini.

Che una normale Media Mobile Esponenziale possa essere usata per 
previsioni puo' stupire:

F(t+1)=C(t)*ALPHA+[1-ALPHA]*F(t)                                (2)

Abbiamo scritto la (1) utilizzando pero' la previsione passata per 
giungere a quella attuale. La (2) puo' essere riscritta:

F(t+1)=F(t)+ALPHA*[C(t)-F(t)]

dove:

e(t)=C(t)-F(t)

rappresenta l'errore della previsione precedente. In pratica la previsione 
per il prossimo valore e' uguale a quella precedente aggiustata di un 
termine che dipende dall'errore previsionale passato, aggiustamento che 
dipende pure da ALPHA.
Per cui l'errore tra il valore previsto ed il valore attuale e' la base 
per correggere  la previsione per il prossimo valore. Questa tipo di 
controllo e' largamente usato in forme piu' sofisticate di metodi 
matematici previsionali.

----

Utilizzare una MM adattiva significa, in prima battuta, che la media 
stessa adatta il suo parametro di smoothing a qualche particolare fenomeno 
presente nel mercato. Famosa e' la AMA (adaptive moving average) di 
Kaufman: in questo caso il parametro ALPHA muta al variare della 
volatilita' passata del mercato, rendendo la AMA piu' veloce in caso di 
alta volatilita' e viceversa.

Nel nostro caso, affronteremo il problema da un altro punto di vista. In 
genere, lo scopo di una MM e' di diminuire, in qualche misura, il 'noise' 
presente nella serie storica, pagando pero', come prezzo, un ritardo che 
la MM avra' nel confronto con la serie strica originaria.

Sulla scorta della descrizione data nella precedente email, si puo' 
pensare di diminuire questo ritardo attraverso la tecnica di 
aggiustamento, fornita dal precedente errore previsionale.

Partendo dalla precedente (2):

F(t+1)=C(t)*ALPHA+[1-ALPHA]*F(t)

l'errore previsionale precedente sara':

e(t)=C(t)-F(t)

calcoliamo ora:

M(t)=BETA*|e(t)|+(1-BETA]*M(t-1)
E(t)=BETA*e(t)+[1-BETA]*E(t-1)

ed infine:

ALPHA(t)=|E(t)/M(t)|

giungendo cosi' alla:

F(t+1)=C(t)*ALPHA(t)+[1-ALPHA(t)]*F/t)

. il simbolo | | significa valore assoluto
. il termine BETA e' generalmente posto a 0.05 - 0.2

Siamo cosi' giunti ad un parametro ALPHA adattivo, che dipende dalle 
fluttuazioni dei dati e dal'errore precedente. Il valore di ALPHA 
aumentera' (rendendo la MM piu' veloce) quando l'errore aumenta, e 
viceversa. Cio' permettera' di ottenere un metodo previsionale che e' 
responsivo ai cambiamenti nei pattern dei dati.
-----------------
Questa e' la userfunction per Tradestation


{-------------------------------------------------
  NAME          :  xAMA
  TYPE          :  userfunction
  AUTHOR        :  L. Vercesi,  Jan 96
                   ik2hlb@venus.it

  DESCRIPTION   :  adaptive moving average
                   alpha contolled to reduce lag 
                                                 }

INPUTS : Price(NumericSeries),Beta(Numeric);
VARS   : EE(0), MM(0), ET(0), ALPHA(0);

MM=Beta*AbsValue(ET)+(1-Beta)*MM[1];
EE=Beta*ET+(1-Beta)*EE[1];
If MM=0 Then MM=0.001;
ALPHA=AbsValue(EE/MM);
xAMA=ALPHA*Price+(1-ALPHA)*xAMA[1]; 
ET=Price-xAMA[1];
{------------------------------------------------ }

E per finire, la userfunction della piu' famosa AMA di P. Kaufman, dicussa
nel 1995 in un vecchio numero di Technical Analysis Of Stocks And
Commodities.

{ -----------------------------------------------
 
  type  : userfunction
  name  : AMA (Adaptive Moving Average)
  author: P. Kaufman               }

Inputs: Perod(Numeric);
Vars: Noise(0),Signal(0),Diff(0),efRatio(0),Smooth(1),Fastest(.6667),Slowest(.0645),AdaptMA(0);

Diff=AbsValue(C-C[1]);
If CurrentBar<=Period Then AdaptMA=C;
If CurrentBar>Period Then Begin
 Signal=AbsValue(C-C[Period]);
 Noise=Summation(Diff,Period);
 efRatio=Signal/Noise;
 Smooth=Power(efRatio*(Fastest-Slowest)+Slowest,2);
 AdaptMA=AdaptMA[1]+Smooth*(C-AdaptMA[1]);
End;

AMA=AdaptMA:

{---------------------------------------------------------


APPLICAZIONI.
Gli usi che si possono fare di una media mobile adattiva sono molteplici, 
la cosa piu' semplice e' usarla come proxi dei prezzi stessi, ottenendo 
cosi' una serie storica meno rumorosa su cui lavorare. Sono possibili 
anche applicazioni meno ovvie. Ad esempio, utilizzando come Beta=0.2 (un 
valore che produrra' una media decisamente veloce) e creando tre 
indicatori, relativamente alla serie dei prezzi Close High e Low, e' 
possibile utilizzare i valori delle AMA del giorno precedente come base 
per un trading di tipo 'Pivot Point'.



Lorenzo V. ik2hlb@venus.it
TORNA ALLA HOMEPAGE
© 1998