简介

前面系列文章已经介绍了SMA、EMA、MACD、KDJ、RSI、BOLL等技术指标的原理和应用场景,还没看过的,建议关注公众号查看。

Backtrader框架内置了一百多个技术分析指标,封装在backtrader.indicators包中,可以极大减少开发成本,提升策略迭代速度。

使用方法

Indicators指标可以用在2个地方:一个是在策略中使用;另外一个是在其他指标中使用。

backtrader中使用内置指标非常容易,只需:

  • 在策略的__init__方法中实例化对应的指标

  • 在next方法中使用或检查对应的指标值或其衍生值

下面是SMA简单移动平均指标的使用示例。

import backtrader as btclass MyStrategy(bt.Strategy):params = (('period', 20),)def __init__(self):self.sma = bt.indicators.SMA(self.data, period=self.p.period)...def next(self):if self.sma[0] > self.data.close[0]:self.buy()

需要说明的是:

  • __init__方法中声明的任何指标都会在next方法调用之前进行计算

  • 在__init__方法中针对lines对象的任何操作都会生成其他line对象(python操作符重载overriding), 而在next方法会生成常规的python类型,如floats或bools

  • __init__方法运算速度更快,同时可以使得next方法的逻辑更简单

  • __init__方法不支持部分python操作符,需要使用bt内置函数来处理,如bt.And, bt.Or, bt.All, bt.Any。除了这些,backtrader还提供了bt.Cmp, bt.If, bt.Max, bt.Min, bt.Sum, bt.DivByZero等函数

backtrader支持的原生指标列表可以查看官网:Indicators - Reference - Backtrader

需要注意的是backtrader还支持指标别名, 如SMA也可以写成MovingAverageSimple或SimpleMovingAverage

MovingAverageSimple
Alias:SMA, SimpleMovingAverage
Non-weighted average of the last n periodsFormula:movav = Sum(data, period) / period

使用TA-Lib

虽然backtrader自带了很多指标,新增指标也比较容易。但由于TA-lib广泛使用,大家对其都比较信任,backtrader也集成了TA-Lib。

import backtrader as btclass MyStrategy(bt.Strategy):params = (('period', 20),)def __init__(self):self.sma = bt.talib.SMA(self.data, timeperiod=self.p.period)...
...

上面是backtrader中使用talib中的SMA示例,可以看出来使用方法区别不大。

通过 print(bt.talib.SMA.__doc__) 可以查看帮助文档。

>>> print(bt.talib.SMA.__doc__)
SMA([input_arrays], [timeperiod=30])Simple Moving Average (Overlap Studies)Inputs:price: (any ndarray)
Parameters:timeperiod: 30
Outputs:real

backtrader支持的talib指标列表可以查看官网:Indicators - ta-lib - Reference - Backtrader

自定义指标

# 继承自bt.Indicator或其他已存在的指标类
class DummyInd(bt.Indicator):# 定义持有的lines,至少需要1个linelines = ('dummyline',)# params参数可选params = (('value', 5),)# plotinfo可选,用来控制绘图行为plotinfo = dict(subplot=False)# __init__方法或next方法必选def __init__(self):self.lines.dummyline = bt.Max(0.0, self.params.value)

示例代码中这个指标将输出0.0,或者是self.params.value,取决于self.params.value是否大于0.0。

除了在__init__方法中实现,也可以在next方法中来实现指标计算,如下所示。

    def next(self):self.lines.dummyline[0] = max(0.0, self.params.value)

除了效率、可读性外,当涉及peroid最小周期时,next方法需要自己处理,__init__方法则不需要特殊处理。因此最好的办法还是在__init__方法中来实现,如果无法实现,才考虑在next方法中来实现。还可以通过once方法来对runonce 模式进行计算优化。

指标可视化

如果程序调用了cerebro.plot,那么

  • 声明的所有指标会自动绘图

  • 操作生成的lines对象不会被绘制,如close_over_sma = self.data.close > self.sma

  • 如果想要绘制操作生成的lines对象,可以使用LinePlotterIndicator 类,name参数是该指标持有的line名字

close_over_sma = self.data.close > self.sma
LinePlotterIndicator(close_over_sma, name='Close_over_SMA')

可以通过plotinfo 声明来控制指标的绘图。plotinfo可以是tuple、dict或OrderedDict。

class MyIndicator(bt.Indicator):....plotinfo = dict(subplot=False)....# 可以实例化后单独设置
myind = MyIndicator(self.data, someparam=value)
myind.plotinfo.subplot = True# 也可以实例化时设置
myind = MyIndicator(self.data, someparams=value, subplot=True)

plotinfo的参数列表有:plot(是否绘图,默认为True),subplot(是否单独窗口绘图,默认为True,MA类指标该参数为False),plotname(指标图名,默认为指标类名),plotabove(绘图位置在数据上方,默认为False),plotlinelabels, plotymargin, plotyticks,plothlines, plotyhlines, plotforce。

结论 & 交流

关注微信公众号:诸葛说talk,获取更多内容。同时还能获取邀请加入量化投资研讨群, 与众多从业者、技术大牛一起交流、切磋,名额有限,不要错过。

写文章不易,觉得本文对你有帮助的话,帮忙点赞转发赞赏,让笔者有坚持写好文章的动力。

参考

  • Indicators - Usage - Backtrader

  • Indicators - ta-lib - Reference - Backtrader

  • backtrader/indicator.py at master · mementum/backtrader · GitHub

量化框架backtrader之一文读懂Indicator指标相关推荐

  1. 量化框架backtrader之一文读懂observer观测器

    简介 Backtrader observer观测器主要用于观察策略运行过程中的各个状态指标,如资金.买卖点等,在调用cerebro.plot()后可以方便地可视化状态指标的变化情况,如下图展示的Bro ...

  2. 量化框架backtrader之一文读懂Analyzer分析器

    诺贝尔奖获得者威廉夏普 简介 策略绩效评价是量化交易很重要的一环,投资不仅需要了解策略的收益率, 也需要了解策略的风险.backtrader提供多种analyzer分析器,可以输出多种绩效指标,用来分 ...

  3. 任务调度框架 Quartz 一文读懂

    1.Quartz 简介 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer. ...

  4. 常用技术指标之一文读懂KDJ指标

    什么是KDJ指标? KDJ中文名又叫随机指标,英文名叫Stochastic oscillator,由乔治·莱恩(George Lane)于20世纪50年代首创,最早用于期货市场.KDJ指标能比较迅速. ...

  5. 常用技术指标之一文读懂RSI指标

    什么是RSI指标? RSI (Relative Strength Index) 中文名又叫相对强弱指标,由韦尔斯.怀尔德(Welles Wilder)首创,发表在他的<技术交易系统新思路> ...

  6. hdfs文档存储服务器,一文读懂HDFS分布式存储框架分析

    一文读懂HDFS分布式存储框架分析 HDFS是一套基于区块链技术的个人的数据存储系统,利用无处不在的私人PC存储空间及便捷的网络为个人提供数据加密存储服务,将闲置的存储空间利用起来,服务于正处于爆发期 ...

  7. hdfs读写流程_一文读懂HDFS分布式存储框架分析

    一文读懂HDFS分布式存储框架分析 HDFS是一套基于区块链技术的个人的数据存储系统,利用无处不在的私人PC存储空间及便捷的网络为个人提供数据加密存储服务,将闲置的存储空间利用起来,服务于正处于爆发期 ...

  8. 一文读懂程序化交易算法交易量化投资高频交易统计利

    转 一文读懂程序化交易.算法交易.量化投资.高频交易. 统计套利 在央行发布的<中国金融稳定报告(2016)>中,对于高频交易的解释为程序化交易的频率超过一定程度,就成为高频交易.而对程序 ...

  9. 一文读懂PQuant与QQuant量化易金工

    转 一文读懂P Quant与 Q Quant ,量化交易与金融工程 原标题:P Quant 和 Q Quant 到底哪个是未来?  来源:李老师与何老师的CFA学习课堂  作者:何璇 P-Quant ...

  10. ​一文读懂EfficientDet

    一文读懂EfficientDet. 今年年初Google Brain团队在 CVPR 2020 上发布了 EfficientDet目标检测模型, EfficientDet是一系列可扩展的高效的目标检测 ...

最新文章

  1. Nature:如何做一篇肠道菌群免疫的顶级文章
  2. 嵌入式学习笔记-LM75温度传感器驱动总结
  3. Promolike Qualtrics Dashboard
  4. android的findviewbyid,Android O预览findViewById编译错误
  5. redisTemplate进行自增操作例子
  6. 构建一个简单的Keras +深度学习REST API
  7. excel服务器模板修改,勤哲Excel服务器设计查询模板
  8. sqluldr2用法
  9. PowerDesigner 将 CDM 转为 Oracle SQL建表语句
  10. 用于fast scnn的cityscape数据集制作
  11. 微型计算机是以微处理器为基础,在计算机中以微处理器为核心组成的微型计算机属于第几代计算机...
  12. 后缀学习第三课(下)
  13. Hexo 关闭文章评论
  14. 详解Instant类
  15. 台式机机箱前置面板音频无效(win10系统)
  16. Flutter 仿滴滴出行App,2021最新华为Android校招面试题
  17. teamviewer14 去商用途提示
  18. [C++]实现memcpy
  19. Win10系列:JavaScript综合实例1
  20. 基于网易云音乐API的微信小程序——网愈芸音乐

热门文章

  1. vue echarts 实现速度的那种进度蓄力效果
  2. SSH 登录指纹验证
  3. InnoDB Buffer Pool 缓冲池详解
  4. 基于特征全埋点的精排ODL实践总结
  5. 微信小程序上传图片到服务器(java后台以及使用springmvc)
  6. 用计算机管理学生成绩,北京计算机大学组织专家对《学生成绩管理系统》的需求方案进行评审,为使参会人员对会议流程和内容有一个清晰的了解_题来了...
  7. 恒流源差分放大电路静态分析_带有恒流源的差动放大电路
  8. 出现这种情况是什么原因呢?
  9. 11月合资SUV销量:日系车统治榜单 大众产品攻势“拳意渐乱”
  10. 百度云盘在线解析不限速下载网盘网站源码