量化框架backtrader之一文读懂Indicator指标
简介
前面系列文章已经介绍了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指标相关推荐
- 量化框架backtrader之一文读懂observer观测器
简介 Backtrader observer观测器主要用于观察策略运行过程中的各个状态指标,如资金.买卖点等,在调用cerebro.plot()后可以方便地可视化状态指标的变化情况,如下图展示的Bro ...
- 量化框架backtrader之一文读懂Analyzer分析器
诺贝尔奖获得者威廉夏普 简介 策略绩效评价是量化交易很重要的一环,投资不仅需要了解策略的收益率, 也需要了解策略的风险.backtrader提供多种analyzer分析器,可以输出多种绩效指标,用来分 ...
- 任务调度框架 Quartz 一文读懂
1.Quartz 简介 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer. ...
- 常用技术指标之一文读懂KDJ指标
什么是KDJ指标? KDJ中文名又叫随机指标,英文名叫Stochastic oscillator,由乔治·莱恩(George Lane)于20世纪50年代首创,最早用于期货市场.KDJ指标能比较迅速. ...
- 常用技术指标之一文读懂RSI指标
什么是RSI指标? RSI (Relative Strength Index) 中文名又叫相对强弱指标,由韦尔斯.怀尔德(Welles Wilder)首创,发表在他的<技术交易系统新思路> ...
- hdfs文档存储服务器,一文读懂HDFS分布式存储框架分析
一文读懂HDFS分布式存储框架分析 HDFS是一套基于区块链技术的个人的数据存储系统,利用无处不在的私人PC存储空间及便捷的网络为个人提供数据加密存储服务,将闲置的存储空间利用起来,服务于正处于爆发期 ...
- hdfs读写流程_一文读懂HDFS分布式存储框架分析
一文读懂HDFS分布式存储框架分析 HDFS是一套基于区块链技术的个人的数据存储系统,利用无处不在的私人PC存储空间及便捷的网络为个人提供数据加密存储服务,将闲置的存储空间利用起来,服务于正处于爆发期 ...
- 一文读懂程序化交易算法交易量化投资高频交易统计利
转 一文读懂程序化交易.算法交易.量化投资.高频交易. 统计套利 在央行发布的<中国金融稳定报告(2016)>中,对于高频交易的解释为程序化交易的频率超过一定程度,就成为高频交易.而对程序 ...
- 一文读懂PQuant与QQuant量化易金工
转 一文读懂P Quant与 Q Quant ,量化交易与金融工程 原标题:P Quant 和 Q Quant 到底哪个是未来? 来源:李老师与何老师的CFA学习课堂 作者:何璇 P-Quant ...
- 一文读懂EfficientDet
一文读懂EfficientDet. 今年年初Google Brain团队在 CVPR 2020 上发布了 EfficientDet目标检测模型, EfficientDet是一系列可扩展的高效的目标检测 ...
最新文章
- Nature:如何做一篇肠道菌群免疫的顶级文章
- 嵌入式学习笔记-LM75温度传感器驱动总结
- Promolike Qualtrics Dashboard
- android的findviewbyid,Android O预览findViewById编译错误
- redisTemplate进行自增操作例子
- 构建一个简单的Keras +深度学习REST API
- excel服务器模板修改,勤哲Excel服务器设计查询模板
- sqluldr2用法
- PowerDesigner 将 CDM 转为 Oracle SQL建表语句
- 用于fast scnn的cityscape数据集制作
- 微型计算机是以微处理器为基础,在计算机中以微处理器为核心组成的微型计算机属于第几代计算机...
- 后缀学习第三课(下)
- Hexo 关闭文章评论
- 详解Instant类
- 台式机机箱前置面板音频无效(win10系统)
- Flutter 仿滴滴出行App,2021最新华为Android校招面试题
- teamviewer14 去商用途提示
- [C++]实现memcpy
- Win10系列:JavaScript综合实例1
- 基于网易云音乐API的微信小程序——网愈芸音乐
热门文章
- vue echarts 实现速度的那种进度蓄力效果
- SSH 登录指纹验证
- InnoDB Buffer Pool 缓冲池详解
- 基于特征全埋点的精排ODL实践总结
- 微信小程序上传图片到服务器(java后台以及使用springmvc)
- 用计算机管理学生成绩,北京计算机大学组织专家对《学生成绩管理系统》的需求方案进行评审,为使参会人员对会议流程和内容有一个清晰的了解_题来了...
- 恒流源差分放大电路静态分析_带有恒流源的差动放大电路
- 出现这种情况是什么原因呢?
- 11月合资SUV销量:日系车统治榜单 大众产品攻势“拳意渐乱”
- 百度云盘在线解析不限速下载网盘网站源码