AMA indikátor

Adaptivní klouzavý průměr (AMA). Technický indikátor je použit k výpočtu klouzavého průměru s nízkou citlivostí na „šumy“ cenových řad a je charakterizován minimální zpožděním při detekci trendů. Tento ukazatel byl vyvinut a popsán Perry Kaufmanem v jeho knize „Smarter Trading„.

Jednou z nevýhod různých vyhlazovacích algoritmů pro cenové řady je to, že náhodné cenové skoky můžou vést ke vzniku falešných signálů. Navíc vyhlazování vede nevyhnutelně ke spoždění signálů. Tento ukazatel byl vyvinut aby odstranil obě tyto nevýhody.

 

Výpočet:
Kaufman zavedl pojem „efektivní poměr“ (ER), který se vypočítá podle vzorce níže:

ER (i) = signál (i) / šum (i)

kde:
ER (i) aktuální hodnota ukazatele efektivity;
Signál (i) = ABS (Cena (i) – Cena (i N)) – aktuální hodnota signálu, absolutní hodnota rozdílu mezi aktuální cenou a cenou N období před;
Šum (i) = Sum (ABS (Cena (i) – Cena (i-1)), N) – aktuální hodnota „šumu“, součet absolutních hodnot rozdílu mezi cenou běžného období a cenou předchozím období pro N období.

Při silném trendu je ER blízké k 1. V případě, že není žádný pohyb na trhu bude se blížit k 0. Získaná hodnota ER se používá v exponenciálnímu vyhlazení vzorce:
EMA (i) = cena (i) * SC + EMA (i-1) * (1 – SC)

kde:
SC = 2 / (n +1) – EMA vyhlazovací konstanta
EMA (i-1) – předchozí hodnota EMA.

Pro vyhlazení se používá EMA s periodou 2 (rychlá SC = 2 / (2 +1) = 0,6667), a EMA s periodou 30 (pomalé SC = 2 / (30 +1) = 0,06452). 

Vyrovnávací konstanta SSC:
SSC (i) = (ER (i) * (rychlý SC pomalý SC) + pomalý SC

Konečný vzorec:
AMA (i) = Cena (i) * (SSC (i) ^ 2) + AMA (i1) * (1SSC (i) ^ 2)

nebo (po novém uspořádání):
AMA (i) = AMA (i1) + (SSC (i) ^ 2) * (cena (i) AMA (i1))

kde:
AMA (i) aktuální hodnota AMA;
AMA (i-1) – předchozí hodnota AMA;
SSC (i) aktuální hodnota vyrovnávací konstanty.

 

 

Po kliknutí se zobrazí alternativní překlady a překlad lze upravit
Pořadí změníte přetažením za současného držení klávesy Shift.

Kód do MT4:

//+——————————————————————+
//|                                                          AMA.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+——————————————————————+
#property copyright „Copyright © 2004, by konKop,wellx“
#property link      „http://www.metaquotes.net“

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Sienna
#property indicator_color2 DeepSkyBlue
#property indicator_color3 Gold

//—- input parameters
extern int       periodAMA=9;
extern int       nfast=2;
extern int       nslow=30;
extern double    G=2.0;
extern double    dK=2.0;

//—- buffers
double kAMAbuffer[];
double kAMAupsig[];
double kAMAdownsig[];

//+——————————————————————+

int    cbars=0, prevbars=0, prevtime=0;

double slowSC,fastSC;

//+——————————————————————+
//| Custom indicator initialization function                         |
//+——————————————————————+
int init()
{
//—- indicators
SetIndexStyle(0,DRAW_LINE,0,2);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,159);
SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(2,159);
//SetIndexDrawBegin(0,nslow+nfast);
SetIndexBuffer(0,kAMAbuffer);
SetIndexBuffer(1,kAMAupsig);
SetIndexBuffer(2,kAMAdownsig);

IndicatorDigits(4);

//slowSC=0.064516;
//fastSC=0.2;
//cbars=IndicatorCounted();
//—-
return(0);
}
//+——————————————————————+
//| Custom indicator deinitialization function                       |
//+——————————————————————+
int deinit()
{
return(0);
}
//+——————————————————————+
//| Custom indicator iteration function                              |
//+——————————————————————+
int start()
{
int    i,pos=0;
double noise=0.000000001,AMA,AMA0,signal,ER;
double dSC,ERSC,SSC,ddK;

if (prevbars==Bars) return(0);

//—- TODO: add your code here
slowSC=(2.0 /(nslow+1));
fastSC=(2.0 /(nfast+1));
cbars=IndicatorCounted();
if (Bars<=(periodAMA+2)) return(0);
//—- check for possible errors
if (cbars<0) return(-1);
//—- last counted bar will be recounted
if (cbars>0) cbars–;
pos=Bars-periodAMA-2;
AMA0=Close[pos+1];
while (pos>=0)
{
if(pos==Bars-periodAMA-2) AMA0=Close[pos+1];
signal=MathAbs(Close[pos]-Close[pos+periodAMA]);
noise=0.000000001;
for(i=0;i<periodama;i++)
{
noise=noise+MathAbs(Close[pos+i]-Close[pos+i+1]);
};
ER =signal/noise;
dSC=(fastSC-slowSC);
ERSC=ER*dSC;
SSC=ERSC+slowSC;
AMA=AMA0+(MathPow(SSC,G)*(Close[pos]-AMA0));
kAMAbuffer[pos]=AMA;

ddK=(AMA-AMA0);
if ((MathAbs(ddK)) > (dK*Point) && (ddK > 0)) kAMAupsig[pos] =AMA; else kAMAupsig[pos]=0;
if ((MathAbs(ddK)) > (dK*Point) && (ddK < 0)) kAMAdownsig[pos]=AMA; else kAMAdownsig[pos]=0;
AMA0=AMA;
pos–;
};
//—-
prevbars=Bars;
return(0);
}

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *