编了一小段程序,计算整体方差和样本方差,发现MT4用的是整体方差,各位高手可要小心了。
下图是我的测试结果:

表明MT4的系统方差(标准差)跟我自行计算的“总体方差”是一样的。
下图是myeatrade网站说明的MT4系统方差计算公式:
程序源码如下:
//---------------------------------------------------------------------------
#property description "核心策略:std"
#property version "1.000";
#property copyright "kitgain updated at 2015.04.16 22:00";
#property copyright "Copyright 2015, KitGain Quantitative Software Corp.";
#property link "http://kitgain.lofter.com";
#property description "欢迎加QQ群249189983参与讨论,提出改良意见"
#property strict
//---------------------------------------------------------------------------
//-------------------------------------------------------
int init()
{
return (0);
}
//-------------------------------------------
int deinit() {return (0);}
//------------------------------------------
//----------------------------------------------------------------
int start()
{
double bb0=iBands(Symbol(),0,20,2,0,5,0,0);
double bb1=iBands(Symbol(),0,20,2,0,5,1,0);
double bb2=iBands(Symbol(),0,20,2,0,5,2,0);
double std=(bb1-bb0)*10000000.0/2.0;
Print("系统方差std=",DoubleToStr(std,0));
double p[20]={0.0};
int i=0;
double sum=0.0;
for(i=0;i<20;i++)
{
p[i]=iMA(Symbol(),0,1,0,0,5,i);
sum+=p[i];
}
double ma=sum/20;
double sum2=0.0;
for(i=0;i<20;i++)
{
sum2+=MathPow(p[i]-ma,2);
}
double stdk=MathSqrt(sum2/19)*10000000.0;
double stdp=MathSqrt(sum2/20)*10000000.0;
Print("样本方差stdk=",DoubleToStr(stdk,0));
Print("总体方差stdp=",DoubleToStr(stdp,0));
return(0);
}
//-----------------------------------------------------------------------------------------
正确使用,应该使用样本方差,而不是整体方差,比如布林通道的上下轨计算,用样本方差要比整体方差要好。

发表评论