talib包是计算许多行情指标必备的第三方库,但在计算过程中发现,计算出来的数值和行情软件的计算方法存在很大的差异,可能会导致策略出现错误。为此,专门写了一个函数解决这个问题。欢迎大家一起交流讨论。
MACD的计算
MACD的计算很简单,主要包括DIF、DEA和BAR三个参数。计算方式如下:
注: 在计算过程中,需要注意数据的初始化。上市首日,DIF、DEA、BAR默认为0.但次日计算中EMA12和EMA26是按照上市首日的收盘价来计算的,所以这里面涉及一个初始化的问题。在计算上市以来第二个交易日的MACD时要先将EMA12和EMA26都替换为上市首日收盘价。
函数编写思路
-
首先,需要自上市以来的收盘价数据。这里利用掘金的history接口,将开始日期设置为一个较早的日期以确保将标的自上市以来的全部收盘价都涵盖(这里设定为1997年)。
-
其次,根据上图中的公式计算出各项指标,存为dataframe。
- 最后,由于不需要上市以来全部的MACD指标,只需要其中的一段时间。所以,设定一个时间筛选条件,能够满足只要设定开始时间和结束时间即可提取到所需数据的函数。
基于以上思路,可以编写出函数如下:
利用数据验证一下。我用的是大商所的豆油(DCE.y2011合约),结果和东方财富显示的相符。
Tips:
虽然这样能够解决talib计算MACD和行情软件有差异的问题,但这样计算也会衍生出新的问题。
- 将该函数放到循环中,每循环一次就要重新提取一次数据,无形之中增加了策略运行的时间和工作量。
- 如果利用其他频率的数据计算macd(比如用60s的数据计算MACD),没有能够追溯到上市当天的历史数据,这样计算出来的结果仍然是不准确的。
自己写函数 or 用talib包/strong>
由于talib包没有详细的计算方法解释,所以暂时无法得知该包是怎样计算macd的,但不可否认的是,在事件驱动的高频交易中,用talib包的确更方便一些。
基于以上,选择哪种方法还需自行斟酌。
———————————————————————————————
推荐阅读:
1.一个量化策略师的自白(好文强烈推荐)
2.股票期货经典的量化交易策略都在这里了!(源码)
3.期货/股票数据大全查询(历史/实时/Tick/财务等)
4.史上最全的Python定量金融三方库汇总
5.干货 | 量化选股策略模型大全
6.量化金融经典理论、重要模型、发展简史大全
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!