backtrader 自定义indicator_BackTrader回测工具(一)
18年的时候开始做量化分析,当时看了市场上很多的回测工具。大部分都比较笨重,后来主要用的是ricequant的离线回测平台。功能很全,没有什么毛病,主要就是速度比较慢。这个平台前段时间停止服务了,不想用在线平台,只能换一个新工具。
在看到backtrader之前,我把abu的开源代码看了一遍,觉得难度不大,想在abu的基础上自己改一个平台出来。策略部分的功能基本上都开发完成,debug也完成了。偶然发现了BackTrader。简单看了一下,觉得架构设计的非常漂亮,试跑了一下,速度快的惊人。看了一下源代码,才知道自己离专业Python开发者还差的不少,于是放弃了自研的想法,站在巨人的肩膀上前进。下面介绍一下BackTrader这个工具,也作为自己这一段时间学习的总结。
BackTrader主要模块:
- Cerebro:执行引擎。数据,策略,分析等模块注册到这个引擎。由引擎驱动整体流程。
- DataFeed:数据模块。支持多种格式的数据接口,包括对pandas数据的支持。
- Strategy:策略模块。定义买卖的策略。
- Indicator:指标模块。支持talib,可以自己开发指标。策略依赖指标来驱动交易。
- Order:订单模块。市价,限价等等各种格式的订单。
- Broker:交易商模块。对资金进行管理。
- Analyzer:分析模块。夏普比例,回撤等指标。
- Observer:监控模块。在每天的执行完成后,对系统的情况进行监控。
上面列出了主要的一些模块,以及一句话介绍。接下来介绍一下BackTrader的执行流程。
- 实例化Cerebro对象
- 按需添加Data, Strategy, Indicator等模块
- 运行Cerebro实例
- 完成回测后画图
从官网上拖一个例子:
import
上面的例子只有四行,什么都没加,没有数据也没有策略,什么都做不了,但是可以运行。
一个最小的案例必须有数据和策略。
数据部分:
数据可以是pandas结构。这里举一个pandas的例子。我是用的是tushare的数据接口。这部分内容看官可以自己上tushare的官网上看一下。我这里直接从dataframe这里往下走。
tushare的数据并不能直接用,需要简单处理一下。
dataline
注:open, high, low, close, volume, openinterest这几个字段都必须有。我跑的时候少了volume,结果报错。找了好久才发现这个原因。
其中trade_date字段要作为index,格式必须是datetime对象。
策略部分:
策略的类必须的自己实现。这里我用一个官网的例子,删掉了非关键的部分。
class
TestStrategy继承了bt.Strategy基类。在里封装了两个函数:一个是__init__,用于初始化,另外一个next()是实际执行的函数。
init函数里面定义了一个别名(self.dataclose),方便后面对数据的引用。self.dataclose是我们输入策略的时间序列。
随便说一句,bt里面定义了很多别名,比如p代表params,l代表line,这样比较方便。
next函数会每个event循环。一般都是按照时间event。每个bar循环一次。比如有10个bar,默认会循环10次(有些指标计算会有时间滞后,会少于这个时间)。在上面的例子里面,策略的含义是,上一个bar的收盘价比上上一个的收盘价低就执行买入。
这里要提到一个概念:lines。self.dataclose就是一个line。
BackTrader里面把时间序列数据定义为了一个line。line类似一个列表,line[0]指的是今天的数据,line[-1]是昨天。以此类推。后面我们在设计indicator,observer的时候,也需要定义line。
这个line是一个linebuff的实例。这个类考虑了很多性能优化的设计。
注意:line不支持slice。类似line[n:m]这样的操作是错误的。要用专门的get方法类似下面
self
OK。到这里,有了data和stretage,一个最小的回测实例就实现了。这个实例还非常的简单,离实际的应用还很远,后面我们会继续介绍其中的每个模块。今天先到这里。
backtrader 自定义indicator_BackTrader回测工具(一)相关推荐
- 【Python数据科学 | 11】应用实战:我的第一个开源项目-基金定投回测工具
这是机器未来的第60篇文章 原文首发地址:https://robotsfutures.blog.csdn.net/article/details/127712752 <Python数据科学快速入 ...
- backtrader进行期货回测要注意的问题:保证金等设置,拼接滚动合约
点此获取backtrader技术教程 ================== 很多同学问如何用backtrader进行期货回测.以下给个例子,与普通股票回测不同的是佣金的设置方式. 1 佣金类设置 im ...
- python gui插件_Python进阶量化交易专栏场外篇17- GUI控件在回测工具上的添加
欢迎大家订阅<教你用 Python 进阶量化交易>专栏!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外已陆续推出一些手记来辅助同学们学习本专栏内容,目前推出的扩展篇链接如下: 为了 ...
- 金融工程python报告期权_利用Backtrader进行期权回测之一:获取期权数据
最近在学习一些期权方面的知识,希望有一个期权的回测环境,方便自己做一些测试.初步做了一些功课之后,打算从通达信软件获得期权数据,并使用backtrader进行回测.编程语言使用python. 下载期权 ...
- python回测工具_Python-回测简单的交易策略
这篇文章主要介绍如何使用Python对一些简单的交易策略进行回测,对这块比较感兴趣的初学者可以看一看.文章主要分为以下几个部分: 1.获取证券数据 2.编写交易逻辑 3.模拟交易操作 4.统计结果和绘 ...
- 利用Backtrader进行期权回测之四:Covered Call策略
在前面的三篇文章中,解决了期权数据获取和实现期权策略的一些技术问题.在这篇文章中,我要实现一个完整的covered call期权策略.Covered call是最简单的期权策略之一,就是持有股票并卖出 ...
- Python量化交易学习笔记(36)——backtrader多股回测避坑3
本文继续记录多股回测时可能遇到的异常情况. 坑描述 多股回测时,当日期达到所有股票的技术指标都能够计算出有效值后,backtrader才开始进行回测.由于这种逻辑的存在,如果某些股票在回测周期的最后几 ...
- python回测工具_Python爬虫回测股票的实例讲解
股票和基金一直是热门的话题,很多周围的人都选择不同种类的理财方式.就股票而言,肯定是短时间内收益最大化,这里我们需要用python爬虫的方法,来帮助我们获取一些股票的数据,这样才能更好的买到相应的股票 ...
- python量化策略源码_Python量化交易进阶讲堂-创建自定义量化回测框架
欢迎大家订阅<Python实战-构建基于股票的量化交易系统>小册子,小册子会陆续推出与小册内容相关的专栏文章,对涉及到的知识点进行更全面的扩展介绍,并且会有选择地收录至小册中,更便于广大读 ...
最新文章
- qstring删除最后一个字符_Excel去掉最后一个字符两个方法,正反思维,你支持哪一个?...
- jdbc操作步骤和preparedStatment相比Statment的好处
- 静态方法和实例化方法的区别 -转载
- 7-42 整型关键字的散列映射 (25 分)(思路加详解)兄弟们 来呀 写题呀
- excel npoi 连接_Net操作Excel_NPOI(示例代码)
- MySQL CookBook 学习笔记-01
- .NET开发 程序员必备工具 -- Regulator:生成正则表达式工具
- Redis:缓存问题之数据不一致(更新数据库时 主动更新)
- 花30万买鸿蒙汽车,值吗?
- 7-13 日K蜡烛图
- mysql主从复制原理详解_简述 MySQL 逻辑架构与主从复制原理。
- 举枪消灭烂代码的实战案例
- js 正则表达式 判断车牌号
- 接口测试用例设计和sql注入
- 共享单车项目(一)--项目简介
- UTC、格林威治时间、本地时间
- java驱动打印机,r230打印机驱动-r230打印机驱动 免费版
- 空间直角坐标转大地坐标 matlab实现
- 超详细的pytorch版本yolov3安装教程--亲测有效!!!
- 数据库上机2(以图形化界面方式操作数据库系统)