发现MT4用的是整体方差?一个BUG,呵呵

编了一小段程序,计算整体方差和样本方差,发现MT4用的是整体方差,各位高手可要小心了。

下图是我的测试结果:

2019-02-06
表明MT4的系统方差(标准差)跟我自行计算的“总体方差”是一样的。

下图是myeatrade网站说明的MT4系统方差计算公式:

2019-02-06
测试结果证明上述公式是正确的。

程序源码如下:

//---------------------------------------------------------------------------

#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);

   

}

//-----------------------------------------------------------------------------------------

正确使用,应该使用样本方差,而不是整体方差,比如布林通道的上下轨计算,用样本方差要比整体方差要好。

本博客所有文章如无特别注明均为原创。作者:天泓评测
分享到:更多

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)