请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  量化平台 帖子:3365825 新帖:0

KDJ指标终于可以算对了,原因在于EMA的算法

美联储主席发表于:5 月 10 日 06:51回复(1)

最近无聊,研究SMA/EMA/WMA如何用pandas实现,并与TA-Lib对比。
由于EMA的算法要用到上一期的EMA,一时用pandas搞不定,但是发现pandas有ewm这个窗口函数。所以用ewm实现了一次EMA,发现怎么跟TA-Lib的还是对应不上。pandas这么成熟的产品,并且ewm也存在不少时间了,如果有bug应当很快就修复才对。

由于国内基本没人用ewm这个函数,只好到StackOverflow上找了,居然还真找到了。

并且它还提供了代码演示如何用ewm得到与TA-Lib一样的结果。测试了一下,居然还真的是一模一样。

区别就是EMA的第一个数是如何取值的,有三种算法,TA-Lib中只实现了两种:

* TA_MA_CLASSIC:*    Use a simple MA of the first 'period'.*    This is the approach most widely documented.** TA_MA_METASTOCK:*    Use first price bar value as a seed*    from the begining of all the *ailable*    data.


即,经典版第一个数是用的前几个价格的平均值,而MetaStock版就是用的原价格。
所以开始找有什么办法设置TA_MA_METASTOCK,发现python版没有提供此接口。

然后我又在github python版翻看issues,发现有很多人提到了各种数据不对的问题,其实都是EMA等类似的问题。由于作者可能对底层的算法没有认真研究,所以这些issue拖着没有close

所以我向python版作者提交了一个issue,目前他已经添加了这个接口。

import talib as taprint ta.get_compatibility() # DEFAULT == 0ta.set_compatibility(1) # METASTOCK == 1print ta.get_compatibility()

有兴趣的朋友可以去下载编译测试了,希望JoinQuant也立即跟进。

全部回复

0/140

量化课程

    移动端课程