Code Monkey home page Code Monkey logo

learn_backtrader's Introduction

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() 中的参数
  • 局部绘图参数设置
  • 部分修改效果

基于收益序列进行可视化

learn_backtrader's People

Contributors

jrothschild33 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

learn_backtrader's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.