//+------------------------------------------------------------------+
//| LSMA |
//+------------------------------------------------------------------+
#property copyright "Copywrong 2005 RonT"
#property link "http://www.lightpatch.com/forex/"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Yellow
#property indicator_color2 Green
#property indicator_color3 Red
//---- buffers
double ExtMapBuffer1[]; //Yellow
double ExtMapBuffer2[]; //Green
double ExtMapBuffer3[]; //Red
extern int extRperiod = 57;
extern int extDiff = 6;
extern int extDraw4HowLong = 500;
int bartime;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0,ExtMapBuffer1); //Yellow
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
SetIndexBuffer(1,ExtMapBuffer2); //Green
SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
SetIndexBuffer(2,ExtMapBuffer3); //Red
SetIndexStyle(2, DRAW_LINE, STYLE_SOLID, 2);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
int i;
for( i=0; i<Bars; i++ )
{
ExtMapBuffer1[i]=0;
ExtMapBuffer2[i]=0;
ExtMapBuffer3[i]=0;
}
}
int start()
{
int c;
int i;
int length;
double lengthvar;
int loopbegin;
int pos;
double sum;
double tmp;
double wtp; //previous value
double wt; //current value
int DiffADJ=extDiff;
if(bartime==Time[0]) return(0);
bartime=Time[0];
length = extRperiod;
loopbegin = extDraw4HowLong - length - 1;
for(pos = loopbegin; pos >= 0; pos--)
{
sum = 0;
for(i = length; i >= 1 ; i--)
{
lengthvar = length + 1;
lengthvar /= 3;
tmp = 0;
tmp = ( i - lengthvar)*NormalizeDouble(Open[length-i+pos],4);
sum+=tmp;
}
wtp=wt;
wt = sum*6/(length*(length+1));
ExtMapBuffer1[pos] = wt+(10*Point); //yellow
ExtMapBuffer2[pos] = wt+(10*Point); //green
ExtMapBuffer3[pos] = wt+(10*Point); //red
if (wtp < wt+(DiffADJ*Point))
{
ExtMapBuffer3[pos] = EMPTY_VALUE; //remove RED
//DiffADJ=0;
}
if (wtp > wt-(DiffADJ*Point))
{
ExtMapBuffer2[pos] = EMPTY_VALUE; //remove GREEN
//DiffADJ=0;
}
if (wtp>wt+(DiffADJ*Point) && wtp<wt-(DiffADJ*Point))
{
//DiffADJ=extDiff;
}
}
}
Comments