原文地址:通达信公式SMA函数计算方式的问题作者:利来利往 最近有网友在百度知道中提到,通达信软件与大智慧软件写入相同的计算公式,但是计算出来的指标结果却不尽相同,尤其是在次新股中,差异较大,比如用钱龙的计算方式计算出来的DMI指标(DMI-QL)。 举例来说,在次新股300238冠昊生物中,打开周K线图,大智慧默认指标DMI-QL,2011年9月23日该指标四个主要参数:PDI为14.272MDI为9.906 ADX为40.297ADXR为30.116 ,如果我们提取出大智慧DMI-QL指标的公式,在不改变该公式计算方式和取值的基础上,稍作修改将其放入通达信中,生成通达信公式,按理来说,计算方式相同,取值相同,得出的结果也应该是相同的。可是当我们使用通达信打开300238的周K线图,看到2011年9月23日该指标的四个主要参数,却是分别为:PDI14.27 MDI 9.91 ADX 91.62 ADXR 95.81 这里边我们发现,PDI和MDI的计算结果是基本一致的,差别主要在于大智慧是取小数点后的3位数,而通达信只取2位,并且进行了“五舍六入”,差异最大的是ADX值和ADXR值,那么是什么原因造成了这么大的差异哪? 笔者经过仔细对照和计算后发现,造成这种问题的原因主要是由于通达信软件中SMA函数的计算方式有错误。下面我们来深度剖析一下通达信和大智慧在计算DMI-QL公式的过程中,对SMA进行计算时的区别。 还是以300238冠昊生物周K线图为例:(由于300238周K线图只有12根K线,而我们对DMI指标中的参数进行SMA平均的时候取值为14,在无法得到取值数据的时候,默认取值为0,才会出现上述问题。) 下面先列出相关公式:(N=14 M=6) 大智慧DMI-QL TR :=SMA(MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1))),N,1); 修改后放入通达信中: HD := HIGH-REF(HIGH,1); (通达信中有一个函数名为 TR,所以不能以TR为名赋值,笔者较懒,干脆直接引用了,其实是可以改个名字再进行赋值的) 通过公式我们知道,两种其实没什么区别,计算方式没变,赋值没变,那么为什么PDI和MDI得出的结果一致,而ADX和ADXR,却差异那么大哪?由于ADXR是通过ADX计算出来的,所以我们只需要找到ADX计算出现问题的原因就可以了,为了搞明白问题产生的真正原因,笔者找到了DMI计算的源头,将光标移动到300238周线图前三根K线处发现,此时DMI的四个参数都是没有数值的。从第四根K线开始,PDI和ADX数值出现了,我们会发现,大智慧的ADX是7.143,而通达信的ADX是100。 ADX=SMA(ABS(MDI-PDI)/(MDI+PDI)*100,N,1) 这里边涉及到了四个变量,PDI、MDI、SMA和N, 经过对照,我们知道,两种软件PDI和MDI的值是一样的(只是取的位数不同),那么我们来分析SMA的计算方式: SMA《加权移动平均数》=[ X《X=(MDI-PDI)/(MDI+PDI) ×100》 × 笔者对公式的编辑也并非十分精通,或许有些地方没有理解,或许有些别的函数可以代替,笔者不知道。笔者也曾想用其他函数来计算ADX的值,但是没能在通达信中找到适合的函数,还请看到高手指点。 |
|
来自: mentor1974 > 《待分类》