Skip to content

Latest commit

 

History

History
33 lines (19 loc) · 3.59 KB

File metadata and controls

33 lines (19 loc) · 3.59 KB

【答读者问 30】关于 backtrader 计算的指标与其他平台不一致的若干问题

原文:https://yunjinqi.blog.csdn.net/article/details/121607119

云子量化免费阅读传送链接

中午吃完饭,就凑时间回答一个问题。

前几天有一个读者咨询我 backtrader 计算的指数移动平均线指标和通达信计算的指数移动平均线指标不一样的问题。

首先必须明确的是,如果不同平台上,指标使用的算法是一致的话,除了一些因为浮点数的误差导致的不一致之外(小概率而且大家需要的精度也不会那么高),其他的应该都是一样的。 我在使用中也发现了一些问题,backtrader 指标计算的结果和其他平台不一致,比如 backtrader 自带的 atr 指标和 talib 的 atr 指标计算的结果不一致,可能是有很多原因:

  1. 确保两者使用的数据是一样的。使用数据不同,很容易导致计算的指标不一样。
  2. 确保不同平台上的同一个指标计算的算法是一致的。如果算法不一致,计算的结果很可能不一样。
  3. 对于需要依赖过去历史数据的指数类的指标,需要确保开始计算指标的时间是一致的。

在不同的交易平台之间,有一个很大的问题就是,有些平台计算的指标,如果数据没有满足的情况下,是不会开始计算指标的;而有的平台会计算。这种处理方式,也会导致某些指标的计算不一致,至于说哪种情况更好,也说不上来,从我的个人经验来看,对我做策略其实影响不大。

好了,讨论下如何应对?backtrader 毕竟是一个开源的量化平台,和其他指标不一致的时候,如果追求完美,希望能够实现和其他指标一致,这个是可以实现的。

就像前面几篇的答读者问中,提到了计算指标的一些问题,可以把一些指标先在 pandas 中计算,也可以在 backtrader 中计算具体的指标,如果能够实现向量化的计算,那就速度会快很多,和 pandas 中计算的效率差不多;

如果在 backtrader 中不能实现向量化的计算,需要在 next 中计算的话,和能在 pandas 中直接计算出来的指标相比的话,效率会差上很多,这就涉及到底层上的程序语言的运行效率了。pandas 主要是基于 numpy,而 numpy 是基于 C、C++这些运算效率更高的语言实现的,所以,本质上,pandas 也是基于 C 的实现,并且一些算法都经过很多人的优化,所以效率更高一些。backtrader 是基于纯 python 的计算,运行效率会差很多。 【答读者问 25】如何把一个 pandas 计算的指标改造成一个 backtrader 的指标?

backtrader 中有一个废弃的版本,是希望用 numpy 去实现 line 的数据结构,这个挺有意思的。后续如果我有精力和时间,会考虑下这个版本,看能否给 backtrader 带来一个质的提升;或者考虑使用 cython\c++重写一下。在公司大规模使用,效率还是稍微有些低。

目前,在没有好用的开源的 c\C++、Java、Rust 之类高运行效率的编程语言的量化框架出来之前,backtrader 还算是比较优秀的,不仅仅是在 python 的量化框架中。

对了,还要聊一聊如何把指标在 backtrader 中进行向量化实现的问题。

有些简单的指标是可以向量化实现的,但是有些复杂的指标,是很难向量化实现的,这就跟为啥向量化的回测平台,很难做出来一些复杂的策略一样。