下载MetaTrader 5

请问高手,如何计算一个自定义数组的移动平均?

要添加评论,请登录注册
通过MetaTrader下载MQL5程序库代码。很方便!
汪琦开
8
汪琦开 2010.03.21 16:44 

void sma()
{
double sum=0;
int i,pos=Bars-ExtCountedBars-1;
//---- initial accumulation
if(pos<MA_Period) pos=MA_Period;
for(i=1;i<MA_Period;i++,pos--)
sum+=Close[pos];
//---- main calculation loop
while(pos>=0)
{
sum+=Close[pos];
ExtMapBuffer[pos]=sum/MA_Period;
sum-=Close[pos+MA_Period-1];
pos--;
}
//---- zero initial bars
if(ExtCountedBars<1)
for(i=1;i<MA_Period;i++) ExtMapBuffer[Bars-i]=0;
}

============================
以上为一个简单移动平均函数,但是是以收盘价为基准的,比如我有数组分别叫TR[]、DMM[]、DMP[],如何代入上面的函数,分别求出他们的移动平均呢?

汪琦开
8
汪琦开 2010.03.21 17:30  

刚改了一下,但并不划线,也就是说TR[]这个数组并没有被代入sma函数,请高手指点:

sma(PDI,TR,12);

void sma(double &ExtMapBuffer[],double &Into_Array[],int MA_period)
{
double sum=0;
ExtCountedBars=IndicatorCounted();
int ma_i,pos=Bars-ExtCountedBars-1;
//---- initial accumulation
if(pos<MA_period) pos=MA_period;
for(ma_i=1;ma_i<MA_period;ma_i++,pos--)
sum+=Into_Array[pos];
//---- main calculation loop
while(pos>=0)
{
sum+=Into_Array[pos];
ExtMapBuffer[pos]=sum/MA_period;
sum-=Into_Array[pos+MA_period-1];
pos--;
}
//---- zero initial bars
if(ExtCountedBars<1)
for(ma_i=1;ma_i<MA_period;ma_i++) ExtMapBuffer[Bars-ma_i]=0;
}

connect y2k
178
connect y2k 2010.03.29 19:03  

最简单的办法,多写几遍sma()函数。每一个sma()中的Close[],用你的数组去替换。

OuYangShui
3
OuYangShui 2010.03.30 01:29  
新手路过,还在学习中
要添加评论,请登录注册