近日在研究古票,一直在思考MAC的算法,根据标准定义,其中的12日EMA的计算:EMA12 = 前一日EMA12 X 11/13 + 今日收盘 X 2/13,
每个都要前日的数据,前日又要再前日的数据,如此迭代下去,那每次都要从最最早一天的数据开始,如果上市很长时间的古,将会有很大的计算量。 况且实际的古票软件中,除了日的,还可以有甚至1分钟级别的,另外实际的MACD 参数除了标准的(12,26,9)外,还可以设置不同的参数。
因此,可以判断,那些草菇软件的MACD,肯定不是迭代算法,而且也不是每条记录先头天算好存着,用的时候现查。那么他应该怎么算呢,有没有人知道?
------解决思路----------------------
设
r1 = 11/13
r2 = 2/13
用 ^ 表示指数运算
用 EMA(i) 表示当天的值,EMA(i-1) 表示昨天的值……
同样用 P(i)、P(i-1)、P(i-2)…… 表示今天、昨天、前天的收盘……
展开公式
EMA(i)
= P(i)*r2 + EMA(i-1)*r1
= P(i)*r2 + P(i-1)*r1 + EMA(i-2)*r1^2
= P(i)*r2 + P(i-1)*r1 + P(i-2)*r1^2 + EMA(i-3)*r1^3
= ...
可以看到昨天往前 P 和 EMA 都需要乘 r1^n 系数,已知 r1^30 = 0.00666,对结果的影响已经很小了。
所以只要取30天的数据计算就差不多了,要求再精确40天足够了。