/learn_backtrader

BackTrader中文教程笔记(by:量化投资与机器学习),系统性介绍Bactrader的特性、策略构建、数据结构、回测交易等,彻底掌握量化神器的使用方法。章节:介绍篇、数据篇、指标篇、交易篇、策略篇、可视化篇……(持续更新中)

Primary LanguagePython

Backtrader 中文教程

Backtrader 是 2015 年开源的 Python 量化回测框架(支持实盘交易),功能丰富,操作方便灵活:

  • 品种多:股票、期货、期权、外汇、数字货币;
  • 周期全:Ticks 级、秒级、分钟级、日度、周度、月度、年度;
  • 速度快:pandas 矢量运算、多策略并行运算;
  • 组件多:内置 Ta-lib 技术指标库、PyFlio 分析模块、plot 绘图模块、参数优化等;
  • 超灵活:即可以随意搭配组件,又支持扩展自己开发的功能,想怎么玩就怎么玩;
  • 社区活跃、帮助文档齐全,官网:https://www.backtrader.com/。
# 若已经安装了 matplotlib ,只需安装 backtrader
pip install backtrader

# 若没有安装 matplotlib,可将其与 backtrader 一起安装
pip install backtrader[plotting]

Data Feed 数据馈送对象

  • 数据表格中的“行”和“列”
  • 列是“lines”
  • 如何调用某一条 line ?
  • 如何提取 line 上的数据点?
  • 行是“Bars”

DataFeeds 数据模块

  • 默认的导入方式
  • 自定义读取函数
  • 新增指标

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

1. 直接通过 DataFeeds 模块导入已经计算好的指标,比如《数据篇》中的导入新增指标 PE、PB;
2. 在编写策略时调用 Indicators 指标模块临时计算指标,比如 5 日均线、布林带等 。
  • 哪些地方会用到指标 ?
  • __init__() 中提前计算指标
  • 关于 Indicators 返回的指标对象
  • 计算指标时的各种简写形式
  • 调用指标时的各种简写形式
  • 好用的运算函数
  • 如何对齐不同周期的指标
  • 丰富的内置指标
  • 在 Backtrader 中调用 TA-Lib 库
  • 自定义新指标

Backtrader中的交易流程大致如下:

* step1:设置交易条件:初始资金、交易税费、滑点、成交量限制等;
* step2:在 Strategy 策略逻辑中下达交易指令 buy、sell、close,或取消交易 cancel;
* step3:Order 模块会解读交易订单,解读的信息将交由经纪商 Broker 模块处理;
* step4:经纪商 Broker 会根据订单信息检查订单并确定是否接收订单;
* step5:经纪商 Broker 接收订单后,会按订单要求撮合成交 trade,并进行成交结算;
* step6:Order 模块返回经纪商 Broker 中的订单执行结果。

Broker 中的交易条件

  • 资金管理
  • 持仓查询

滑点管理

  • 百分比滑点
  • 固定滑点
  • 其他设置

交易税费管理

  • 通过 BackBroker() 设置
  • 通过 setcommission() 设置
  • 通过 addcommissioninfo() 设置
  • 自定义交易费用的例子

成交量限制管理

  • 形式1:bt.broker.fillers.FixedSize(size)
  • 形式2:bt.broker.fillers.FixedBarPerc(perc)
  • 形式3:bt.broker.fillers.BarPointPerc(minmov=0.01,perc=100.0)

交易时机管理

  • Cheat-On-Open
  • Cheat-On-Close

Order 中的交易订单

  • Order.Market
  • Order.Close
  • Order.Limit
  • Order.Stop
  • Order.StopLimit
  • Order.StopTrail
  • Order.StopTrailLimit

Strategy 中的交易函数

  • 常规下单函数
  • 目标下单函数
  • 取消订单
  • 订单组合
    • buy_bracket()
    • sell_bracket()

执行逻辑

  • 通用逻辑

    • 只当在主订单执行后,止损单和止盈单才会被激活,而且是同时激活;
    • 如果主订单被取消,止盈单和止损单也会被取消;
    • 在止盈单和止损单激活之后,如果取消两者中的任意一个,那另外一个也会被取消。
  • OCO订单

Broker 中的交易执行

  • Order.Created:订单已被创建;
  • Order.Submitted:订单已被传递给经纪商 Broker;
  • Order.Accepted:订单已被经纪商接收;
  • Order.Partial:订单已被部分成交;
  • Order.Complete:订单已成交;
  • Order.Rejected:订单已被经纪商拒绝;
  • Order.Margin:执行该订单需要追加保证金,并且先前接受的订单已从系统中删除;
  • Order.Cancelled (or Order.Canceled):确认订单已经被撤销;
  • Order.Expired:订单已到期,其已经从系统中删除
  • 通过 Strategy 类开发策略
  • 基于交易信号直接生成策略
    • 信号指标取值与多空信号对应关系
    • add_signal(signal type, signal class, arg) 中的参数说明
    • 开仓类
    • 平仓类
    • 关于订单累计和订单并发
  • 如何返回策略收益评价指标
  • 如何对策略进行参数优化

observers 观测器

  • 最常用的观测器
  • 如何添加 observers
  • 如何读取 observers 中的数据
  • 自定义 observers

plot() 图形绘制

  • plot() 中的参数
  • 局部绘图参数设置
  • 部分修改效果

基于收益序列进行可视化