简述

backtrader支持 内置指标 和 talib 指标
相关文档
内置指标:https://www.backtrader.com/docu/indautoref/
talib指标:https://www.cnblogs.com/forest128/p/13823649.html

策略中使用内置指标:

class SmaCross(bt.Strategy):params = dict(period=5)def __init__(self):self.move_average = bt.ind.MovingAverageSimple(self.data.close,period=self.params.period)

策略中使用talib指标:
mac安装ta-lib:

brew install ta-lib

anaconda 安装TA-Lib

pip install TA-Lib

class TALibStrategy(bt.Strategy):params = (('period', 20), )def __init__(self):# ta-lib移动平均指标self.sma = bt.talib. T3(self.data, timeperiod=self.p.period)

自定义指标

backtrader的运算符

python的逻辑运算符都被Backtrader覆盖了,使其可以直接作用于线对象整体,进行矢量化运算

python backtrader
and And
or Or
if If
any Any
all All
cmp Cmp
max Max
min Min
sum Sum
reduce Reduce
DivByZero
DivZeroByZero

tips:
cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。

在策略类的init方法中定义新指标

'''在策略类的init方法中定义新指标'''import backtrader as bt
from feed import feed
from logger import lgclass MyStrategy(bt.Strategy):params = dict(period1=20, period2=25, period4=10, period3=5)def __init__(self):sma1 = bt.ind.MovingAverageSimple(self.data.close,period=self.params.period1)sma2 = bt.ind.MovingAverageSimple(sma1,period=self.params.period2)# 通过算数计算创建新指标线something = sma2 - sma1 + self.data.closesma3 = bt.ind.MovingAverageSimple(something,period=self.params.period3)self.greater = sma3 > sma1self.buysig = bt.And(sma1 > self.data.close, sma1 > self.data.high)self.high_or_low = bt.If(sma1 > self.data.close, self.data.low, self.data.high)self.high_or_30 = bt.If(sma1 > self.data.close, 30.0, self.data.high)# 生成开盘价除以收盘价形成的线,若某天的收盘价为0,则最终指标该日取 99999self.testIndicator = bt.DivByZero(self.data.open, self.data.close, zero=99999)# 若分母为0,则取8888;若分子分母都为0,取99999self.testIndicator2 = bt.DivZeroByZero(self.data.open, self.data.close, 8888, 99999)if __name__ == '__main__':cerebro = bt.Cerebro()cerebro.adddata(feed)cerebro.addstrategy(MyStrategy)cerebro.run(stdstats=False)cerebro.plot()

注意 __init__中的指标画图时不会展示出来

自定义指标类(__init__中)

'''自定义新指标类 __init__ 中'''import backtrader as bt
from feed import feed
from logger import lgclass OverUnderMovAv(bt.Indicator):lines = ('overunder',)params = dict(period=10)def __init__(self):movav = bt.ind.MovingAverageSimple(self.data,period=self.params.period)self.l.overunder = bt.Cmp(movav, self.data)def next(self):passclass Mystrategy(bt.Strategy):params = dict(period=20)def __init__(self):self.overunder = OverUnderMovAv(self.data.close, period=self.params.period)if __name__ == '__main__':cerebro = bt.Cerebro()cerebro.adddata(feed)cerebro.addstrategy(Mystrategy)cerebro.run(stdstats=False)cerebro.plot()

这个指标采用了backtrader内置的指标进行运算,无需自己处理最小周期

自定义指标类(next中)

'''自定义新指标类 next 中'''
import math
from feed import feed
import backtrader as btclass SimpleMovingAverage1(bt.Indicator):lines = ('sma',)params = (('period', 20),)def __init__(self):self.addminperiod(self.params.period)def next(self):datasum = math.fsum(self.data.get(size=self.p.period))self.lines.sma[0] = datasum / self.p.periodclass Mystrategy(bt.Strategy):params = dict(period=20)def __init__(self):self.overunder = SimpleMovingAverage1(self.data.close, period=self.params.period)if __name__ == '__main__':cerebro = bt.Cerebro()cerebro.adddata(feed)cerebro.addstrategy(Mystrategy)cerebro.run(stdstats=False)cerebro.plot()

当需要自定义最小周期时可以使用next创建 指标类,在__init__中使用self.addminperiod()定义最小周期

注意 指标类形式创建的指标会在画图中展示

Backtrader(十一) - Indicator指标相关推荐

  1. Backtrader系列教程③:指标篇

    概述 在编写策略时,除了常规的高开低收成交量等行情数据外,还会用到各式各样的指标(变量),比如宏观经济指标.基本面分析指标.技术分析指标.另类数据等等.Backtrader 大致有 2 种获取指标的方 ...

  2. 程序员的量化交易(34)--QuantConnect_Lean如何定义Indicator指标2

    转载需注明出处:http://blog.csdn.net/minimicall,http://cloudtrade.top/ 指标(Indicator)由三大关键组件组成: 1. 实现你指标的类 2. ...

  3. 高频开关电源常见的二十一评估指标借鉴

    高频开关电源不只是一个小盒子,它是有源设备的心脏,为组件提供源源不断的能量流.高频开关电源的质量直接影响器件的性能.高频开关电源的设计.制造和质量管理需要精密的电子设备模拟高频开关电源的实际运行特性( ...

  4. Backtrader 画图和指标

    quantstats是量化投资组合分析工具包 https://github.com/ranaroussi/quantstats pip install quantstats #--策略和参数 cere ...

  5. Backtrader官方中文文档

    代码有所删减,完整版及在线运行可访问Backtrader官方中文文档 一. backtrader介绍 制定策略 1.1 确定潜在的可调参数 1.2 实例化您在策略中需要的指标 1.3 写下进入/退出市 ...

  6. 【答读者问46】一场由夏普率引发的乱斗(backtrader,pyfolio和聚宽都是怎么计算夏普率的?)

    云子量化免费阅读传送链接 在很早之前的文章中,对绩效分析的指标夏普率做过一些简单的探索,对比了不同平台上夏普率的计算方式,这次再次深入探索一下,为啥各个平台的夏普率的结果存在很大差别.这次主要探索ba ...

  7. 【手把手教你】Ichimoku云图指标可视化与交易策略回测

    01 引言 Ichimoku Kinko Hyo,简称Ichimoku,是一名日本报纸作家提出的,用于衡量动量以及未来价格支撑和阻力区域的技术分析指标,目前被广泛用于判断外汇.期货.股票.黄金等投资品 ...

  8. 0、本专栏的预计更新的内容与更新时间表(2022-05-07更新目录排版)

    最近专栏增加了咨询服务,凡是以299元购买专栏的,提供三次免费的咨询服务.咨询服务是提供问题解决方向及解决方法(比如关于backtrader某方面的使用问题,量化投资相关的问题),并不是代写策略及根据 ...

  9. Python实现股票量化交易学习进阶(二)之简单交易策略的定义实现

    Python实现股票量化交易学习进阶第二篇之简单交易策略的定义实现 1.backtrader回测框架知识 2.需求一自定义MACD指标 3.需求二自定义实现KDJ指标 4.需求三自定义CCI指标 1. ...

最新文章

  1. C/C++ 框架,类库,资源集合
  2. Ibatis学习总结7--SqlMapClient 执行 SQL 语句
  3. 比尔•盖茨因握手方式失礼遭韩媒狂批
  4. String、StringBuilder、StringBuffer三者执行效率
  5. 数据库添加一个列的唯一约束
  6. 集合框架及背后的数据结构、Collection,Map、ArrayList的使用
  7. 那是我夕阳下的奔跑--一个萌新的觉醒
  8. 02129 信息资源建设《信息资源管理(第2版) 电子工业出版社 肖明著》考点整理
  9. 数据分析项目实战—信用卡客户违约概率预测
  10. hadoop组件及其作用
  11. 【机器学习原理】KNN分类算法
  12. linux安装mysql deb_Ubuntu下通过deb的bundle文件安装MySQL
  13. php扑克牌随机发,PHP实现随机发放扑克牌
  14. 秋招面经合集:阿里、华为、美团、携程、去哪儿、小米、京东都有
  15. 北大AI公开课 第一讲
  16. 网络游戏是怎样登录的?
  17. Error: unable to perform an operation on node ‘rabbit@rabbitma‘ please see diamostics infoxmation
  18. torch.unsqueeze(input, dim)函数
  19. “她时代”致敬她力量女性论坛 聚焦当代女性价值观
  20. 数据结构——一元多项式相加(C语言版本)

热门文章

  1. No rule to make target `control'. Stop.错误解决
  2. 机器学习之线性回归_通过线性回归开始机器学习之旅
  3. 几道特别难搞的数据库面试题
  4. Python+Appium+unittest demo
  5. 魔兽重置版改键+喊话
  6. 持续信创| 骞云科技与东方通完成产品兼容性互认证
  7. 【NDN基础】Networking Named Content 问题汇总
  8. Spring Boot 学习[一] 介绍与入门
  9. 数学建模学习(90):改进的灰狼优化算法(I-GWO)对多元函数寻优
  10. 无线AP概念功率mW、灵敏度dBm、增益dBi