好像把MACD的算法搞出来了。

a3212b12 2015-08-27 11:09:59
近日在研究古票,一直在思考MAC的算法,根据标准定义,其中的12日EMA的计算:EMA12 = 前一日EMA12 X 11/13 + 今日收盘 X 2/13,
每个都要前日的数据,前日又要再前日的数据,如此迭代下去,那每次都要从最最早一天的数据开始,如果上市很长时间的古,将会有很大的计算量。 况且实际的古票软件中,除了日的,还可以有甚至1分钟级别的,另外实际的MACD 参数除了标准的(12,26,9)外,还可以设置不同的参数。

因此,可以判断,那些草菇软件的MACD,肯定不是迭代算法,而且也不是每条记录先头天算好存着,用的时候现查。那么他应该怎么算呢,有没有人知道?

...全文
1165 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44209916 2018-12-21
  • 打赏
  • 举报
回复
能不能写一个通达信版的MACD公式,就是MACD为正值变负值的时候的股价,由负值变正值时的股价
a3212b12 2015-09-02
  • 打赏
  • 举报
回复
引用 5 楼 Tiger_Zhao 的回复:
公式的确是展错了
。。。
收盘最多上百吧,5位数,90天应该够了吧。


再次感谢 Tiger_Zhao 。我的K线图画出来了,我这个是个股和大盘对比在一起的,可以观察股票是超前还是滞后大盘。

Tiger_Zhao 2015-08-28
  • 打赏
  • 举报
回复
公式的确是展错了

r1^40 = 0.0012531
r1^50 = 0.0002358
r1^60 = 0.0000444
r1^70 = 0.0000083
r1^80 = 0.0000016
r1^90 = 0.0000003
收盘最多上百吧,5位数,90天应该够了吧。
Tiger_Zhao 2015-08-27
  • 打赏
  • 举报
回复

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天足够了。
a3212b12 2015-08-27
  • 打赏
  • 举报
回复
引用 1 楼 Tiger_Zhao 的回复:
可以看到昨天往前 P 和 EMA 都需要乘 r1^n 系数,已知 r1^30 = 0.00666,对结果的影响已经很小了。


经过实验,虽然 r1^30后 < = 0.00666很小,但如果以前的P值很大 ,对结果还是影响很大。根据实验的情况来看,取到 300天就和同花顺的数据差不多了。
再次感谢 Tiger_Zhao
上图:

a3212b12 2015-08-27
  • 打赏
  • 举报
回复
不过按这个公式展开好像不对啊。 此前用的是另外一个公式: 系数r = 2/(n*(n+1)) EMA(n) = P(i-0) * (n-0)/r + P(i-1)* (n-1)/r +P(i-2)* (n-2)/r +…… + P(i-(n-1))* (n-(n-1))/r 结果偶然算对一个。
a3212b12 2015-08-27
  • 打赏
  • 举报
回复
引用 1 楼 Tiger_Zhao 的回复:
设 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天足够了。
谢谢回复:你的展开式好像错了,是不是应该是 展开公式 EMA(i) = P(i)*r2 + EMA(i-1)*r1 = P(i)*r2 + P(i-1)*r2*r1 + EMA(i-2)*r1^2 = P(i)*r2 + P(i-1)*r2*r1 + P(i-2)*r2*r1^2 + EMA(i-3)*r1^3 = ... =P(i-0)*r2*r1^0 + P(i-1)*r2*r1^1 + P(i-2)*r2*r1^2 + ……

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧