原创文章第71篇,专注于“个人成长与财富自由、世界运作的逻辑,AI量化投资”。
李笑来竟然撰写了一本关于微信视频号的书。书中探讨了长期价值的理念,确实,许多事情难以在短期内显现出成果,需要长时间积累,越往后复利效应越显著,而在初期甚至可能感觉不到进展。这也是许多人终身无为的根本原因。
今天继续探讨backtrader,在传统的量化投资中,需要用指标来构建量化规则,因此指标计算至关重要。
01 backtrader的指标
指标是基于基础数据进行“衍生”计算。基础数据包括宏观数据、基本面财务数据、基于交易时间序列的OHLCV数据以及另类数据,如港口的船只数量、商超的人数等。
这些指标可以是“已经计算”好的,比如PE/PB,可以直接通过PandasData引入。而像布林带、唐奇安通道这种则需要通过Indicators来“临时计算”。
指标在__init__中计算,在next中使用。Sma1、ema1、sma_ema_diff、buy_sig都是line对象,类似pandas里的series。另外,指标全称通常比较长,可以简化写为alias。
ind.SimpleMovingAverage=ind.SMA
计算指标或编写策略逻辑时,离不开算术运算、关系运算、逻辑运算、条件运算等。Bt封装的运算符针对line对象进行,返回的结果也是line。bt.And、bt.Or、bt.If、bt.All、bt.Any、bt.Max、bt.Min、bt.Sum计算返回的结果与在next()中对当前时点通过常规python运算语法返回的结果一致。
关于不同周期的指标
都是“日频”,但有些数据,如财务指标是“季度”频度。比如self.data1是月度数据,那么self.month也是月度数据。这时可以有两种做法:使用self.month[0](),或者对齐整个指标对象:self.month_ = self.month(),然后使用就一样的。推荐第二种。
在bt框架中使用talib,整合得很好,bt里叫period,而talib里通常叫timeperiod。
02 自定义自己的指标
内置140多个指标及运算符,外加talib的扩展,仍然不够,比如RSRS指标。继承自bt.Indicator,lines中定义我们这个指标有几个line,params是参数,在init中做一次性的“向量”运算,在next中按元素计算。
02 小结
Backtrader的指标模块Indicator侧重于技术分析,提供了各式各样的技术指标计算函数,考虑到大家的技术指标计算习惯,还内接了TA-Lib指标库。bt的line可以自动匹配时间,对齐周期,这非常方便。
指标都是标准的bt的lines对象。
尽管这里我们说的是“技术指标”,但针对机器学习的因子计算,这里的公式依然有效。
明天可以正式进行“交易”环节了。
温馨提示:答案为网友推荐,仅供参考