以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  请教STD函数的内部计算公式是?  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=161706)

--  作者:lizhi
--  发布时间:2018/2/26 16:41:57
--  请教STD函数的内部计算公式是?

MID:MA(C,26),CIRCLEDOT;//指数平滑移动平均
STD(C,26)  等于 SQRT(SUM( POW(C-MID,2) ,26)/(26-1))吗?

谢谢各位老师!

 

 


--  作者:lizhi
--  发布时间:2018/2/26 16:50:54
--  

经过比对,发现不一样,问题出在什么地方呀?


--  作者:lizhi
--  发布时间:2018/2/26 17:08:08
--  

转:

各股票软件的标准差函数STD是不同的,而布林线的上下轨是以STD为基础计算出来的,所以使用布林线应小心。
以2008/3/28的上证综指为例,利用如下代码:"收盘价3日STD:STD(CLOSE,3);",三日收盘价分别是:3606.86,3580.15,3411.49,在飞狐交易师中显示的3日收盘价标准差是105.928,大智慧新一代中显示的是105.932,通达信中是86.49,同花顺中显示74.90。用EXCEL中的函数STDEV计算的样本方差是105.9316,STDEVP计算总体方差是86.49。
可见大智慧和飞狐使用的算法是样本方差,二者数据基本一致,大智慧的更精确一点,通达信使用的是总体方差,同花顺就不知所谓了。
这里最关键的是要明白总体方差与样本方差的区别。
总体方差(population variance)    :如果这组数据本身便构成一个总体, 均差平方和除以数据中观察值的数目,        称为总体方差。如一组数据X1,X2,..., Xn:其平均值M=(X1+X2+...+Xn)/n ,总体方差为  [ (X1-M)^2+...(Xn-M)^2 ]/n 的平方根。                  
对于无限总体,N为无限大。 

样本是由总体中任意抽取而形成的,样本的各种数量关系(包括平均值和方差)都是总体的相关数量的估计值。
数理统计学已经证明了,对于从总体中抽取的样本,用前面的总体方式公式计算出来的方差值来估计总体的方差  总是偏小的。  样本方差有时也称为样本均方(mean square, 简记为MS),是总体方差的无偏估计,计算公式是
  [ (X1-M)^2+...(Xn-M)^2 ]/(n-1)的平方根,也就是说用(n-1)取代n作为分母。
为什么用n-1而不是n呢?
这可以从自由度来解释。这样看,X1,X2,...Xn是n个可以自由变化的样本,互不影响。
而X1-M, X2-M,...Xn-M是否也是n个自由变化的呢?不是……因为这n个统计量受到一个约束条件的影响就是之和等于0。如果我们记 yi=Xi-M,也就是说y1+y2+...yn=0,
这样我们可以任意变动其中n-1值,比如取定了y1,y2,...y(n-1),那么yn就不能任意变化。
样本方差与样本均值,都是随机变量,都有自己的分布,也都可能有自己的期望与方差(由此进一步讨论估计量的无偏性与有效性)。取分母n-1,可使样本方差的期望等于总体方差,即这种定义的样本方差是总体方差的无偏估计。

对于股票,我理解由于是无限总体中取的有限样本,应该使用样本方差而不是总体方差,这样的话大智慧和飞狐中的布林线上下轨比较科学,通达信的会误差几十个点,同花顺就更不用说了。从前面我们可以看出,实际上总体方差=样本方差* a,其中a为[n/(n-1)]的平方根。一般布林线默认值n为20,因此a=1.026。
因此通达信的使用者如果想用更科学的样本方差代替总体方差,应修改布林线公式,在STD函数前加一个系数1.026。如此校正后,通达信的布林线上下轨与大智慧、飞狐的都基本相同。


--  作者:FireScript
--  发布时间:2018/2/26 17:11:44
--  
这个算法您可以网上查询下。内部详细算法无法提供的。
--  作者:lizhi
--  发布时间:2018/2/26 17:17:25
--  
请教:金字塔的STD计算公式和教科书的不一样,是不是?
--  作者:lizhi
--  发布时间:2018/2/26 21:16:35
--  
INPUT:N(20);

JZ:MA(C,N),LINETHICK0;

CC:C,LINETHICK0;
NN:O,LINETHICK0;
SS:=0;

FOR I=0 TO N-1 DO BEGIN
NN[BARPOS-I]:=(CC[BARPOS-I]-JZ[BARPOS])^2;
END

FOR K=0 TO N-1 DO BEGIN
SS:=NN[BARPOS-K]+SS;
END

BZC:SQRT(SS/(N-1)),COLORWHITE,LINETHICK0;
//可以用下面的函数做个验证
BZC2:STD(C,N),COLORWHITE,LINETHICK0;

--  作者:lizhi
--  发布时间:2018/2/26 21:52:56
--  
//BZC3 的计算到底哪里错了?恳请各位大师指教!谢谢
INPUT:N(20);

JZ:MA(C,N),LINETHICK0;

CC:C,LINETHICK0;
NN:O,LINETHICK0;
SS:=0;

FOR I=0 TO N-1 DO BEGIN
NN[BARPOS-I]:=(CC[BARPOS-I]-JZ[BARPOS])^2;
END

FOR K=0 TO N-1 DO BEGIN
SS:=NN[BARPOS-K]+SS;
END

BZC:SQRT(SS/(N-1)),COLORWHITE,LINETHICK0;
//可以用下面的函数做个验证
BZC2:STD(C,N),COLORWHITE,LINETHICK0;
//可以用下面的函数做个验证
BZC3:SQRT(SUM((C-JZ)^2,N)/(N-1)),COLORWHITE,LINETHICK0;

[此贴子已经被作者于2018/2/26 21:54:02编辑过]

--  作者:lizhi
--  发布时间:2018/2/26 22:05:09
--  
知道错在什么地方了。
SUM((C-JZ)^2,N)
JZ不是始终是右侧最后一个值!