//+------------------------------------------------------------------+
//| KAMARev.mq4 |
//| Copyright ?2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright ?2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Black
#property indicator_color2 Yellow
#property indicator_color3 Red
#property indicator_color4 Red
//---- input parameters
extern int KAMAPeriod=4;
extern int LookBack=3;
extern double RevPoint=0.0004;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{ string short_name;
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0, ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1, ExtMapBuffer2);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2, ExtMapBuffer3);
SetIndexStyle(3,DRAW_LINE);
SetIndexBuffer(3, ExtMapBuffer4);
short_name="KAMA("+KAMAPeriod+","+LookBack+","+RevPoint+")";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int Scale=500;
int i,counted_bars=IndicatorCounted();
double tmp[];
double rel,negative,positive;
if(Bars<=KAMAPeriod) return(0);
//---- initial zero
if(counted_bars<1)
for(i=1;i<=KAMAPeriod;i++) ExtMapBuffer1[Bars-i]=0.0;
if(counted_bars>=KAMAPeriod) i=Bars-counted_bars-1;
if(counted_bars<0) return(-1);
int limit=Bars-counted_bars;
//---- TODO: add your code here
double FastSC = (double)(2.0/(2.0 + 1.0));
double SlowSC = (double)(2.0/(30.0 + 1.0));
double Direction=0;
double Volatility=0;
double ER=0;
double SSC=0;
double Constant=0;
int start=counted_bars-1;
int handle;
start=0;
limit=Bars;
for(i=start+limit; i>=start; i--){
Direction=Close[i]-Close[i+KAMAPeriod];
double sum=0;
for(int j=i+KAMAPeriod-1;(j>=i);j--){
sum+=MathAbs(Close[j]-Close[j+1]);
}
Volatility=sum;
if (Volatility==0) ER=0;
else
ER=MathAbs(Direction/Volatility);
SSC= ER * (FastSC - SlowSC) + SlowSC;
Constant=SSC*SSC;
if (i