Accelerator LSMA

Indikátor postavený na LSMA (Least Square Moving Average).

 

//+——————————————————————+
//|                                             Accelerator_LSMA.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+——————————————————————+
#property  copyright „Copyright © 2005, MetaQuotes Software Corp.“
#property  link      „http://www.metaquotes.net/
//—- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Yellow
#property  indicator_color2  Green
#property  indicator_color3  Red

#property indicator_level1 0.0
//—- indicator buffers
double     ExtBuffer0[];
double     ExtBuffer1[];
double     ExtBuffer2[];
double     ExtBuffer3[];
double     ExtBuffer4[];
//+——————————————————————+
//| Custom indicator initialization function                         |
//+——————————————————————+
int init()
{
//—- 2 additional buffers are used for counting.
IndicatorBuffers(5);
//—- drawing settings
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2);
SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,2);
IndicatorDigits(Digits+2);
SetIndexDrawBegin(0,38);
SetIndexDrawBegin(1,38);
SetIndexDrawBegin(2,38);
//—- 4 indicator buffers mapping
SetIndexBuffer(0,ExtBuffer0);
SetIndexBuffer(1,ExtBuffer1);
SetIndexBuffer(2,ExtBuffer2);
SetIndexBuffer(3,ExtBuffer3);
SetIndexBuffer(4,ExtBuffer4);
//—- name for DataWindow and indicator subwindow label
IndicatorShortName(„AC“);
SetIndexLabel(1,NULL);
SetIndexLabel(2,NULL);
//—- initialization done
return(0);
}

//+————————————————————————+
//| LSMA – Least Squares Moving Average function calculation               |
//| LSMA_In_Color Indicator plots the end of the linear regression line    |
//+————————————————————————+

double LSMA(int Rperiod, int shift)
{
int i;
double sum;
int length;
double lengthvar;
double tmp;
double wt;

length = Rperiod;

sum = 0;
for(i = length; i >= 1  ; i–)
{
lengthvar = length + 1;
lengthvar /= 3;
tmp = 0;
tmp = ( i – lengthvar)*Close[length-i+shift];
sum+=tmp;
}
wt = sum*6/(length*(length+1));

return(wt);
}
//+——————————————————————+
//| Accelerator/Decelerator Oscillator                               |
//+——————————————————————+
int start()
{
int    limit;
int    counted_bars=IndicatorCounted();
double prev,current;
//—- last counted bar will be recounted
if(counted_bars>0) counted_bars–;
limit=Bars-counted_bars;
//—- macd counted in the 1-st additional buffer
for(int i=0; i<limit; br=““>       ExtBuffer3[i]=LSMA(5,i)-LSMA(34,i);
//—- signal line counted in the 2-nd additional buffer
for(i=0; i<limit; br=““>       ExtBuffer4[i]=iMAOnArray(ExtBuffer3,Bars,5,0,MODE_SMA,i);
//—- dispatch values between 2 buffers
bool up=true;
for(i=limit-1; i>=0; i–)
{
current=ExtBuffer3[i]-ExtBuffer4[i];
prev=ExtBuffer3[i+1]-ExtBuffer4[i+1];
if(current>prev) up=true;
if(current<prev) up=“false;<br“>       if(!up)
{
ExtBuffer2[i]=current;
ExtBuffer1[i]=0.0;
}
else
{
ExtBuffer1[i]=current;
ExtBuffer2[i]=0.0;
}
ExtBuffer0[i]=current;
}
//—- done
return(0);
}

Napsat komentář

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