量化交易1-backtrader介绍
1、backtrader介绍 关于backtrader本身的背景此处不做过多的介绍,中文文档的传送门: http://backtrader.com.cn/ 中文文档写的很好。
不过对于熟悉python语言的同学,比如我这种的 非专业的python语言开发者来说是有一个很大的弊端,就是没有办法把照着文档一步一步的把策略回测起来。
因为文档中的行情源来自于雅虎,由于不可抗拒的原因,我们应该是没有办法 直接获取雅虎的行情源,并且我们对老美的行情数据并不怎么感兴趣,我们还是非常热爱大A,虽然他常常让我们关灯吃面。
因此本文档会把行情源换成我们大A行情源,并且会把回测结果用图像展示出来,话不多说,先上结果,以下是回测结果图形的展示:
以下是搭建backtrader的过程: 基本要求是: Python 2.7 Python 3.2 / 3.3 / 3.4 / 3.5 pip install backtrader pip install matplotlib==3.2.2(此处一定要使用3.2.2版本,如果直接使用pip install matplotlib命令进行安装最新的版本,会导致显示回测结果图像时报错) 后续代码运行过程中缺什么包就是用,pip安装什么包
废话不多,上代码:
import datetime #
import os.path # 路径管理
import sys # 获取当前运行脚本的路径 (in argv[0])
#导入backtrader框架
import backtrader as bt
import pandas as pd
# 创建策略继承bt.Strategy
class TestStrategy(bt.Strategy):
def log(self, txt, dt=None):
# 记录策略的执行日志
dt = dt or self.datas[0].datetime.date(0)
print('%s, %s' % (dt.isoformat(), txt))
def __init__(self):
# 保存收盘价的引用
self.dataclose = self.datas[0].close
# 跟踪挂单
self.order = None
def notify_order(self, order):
if order.status in [order.Submitted, order.Accepted]:
# broker 提交/接受了,买/卖订单则什么都不做
return
# 检查一个订单是否完成
# 注意: 当资金不足时,broker会拒绝订单
if order.status in [order.Completed]:
if order.isbuy():
self.log('已买入, %.2f' % order.executed.price)
elif order.issell():
self.log('已卖出, %.2f' % order.executed.price)
# 记录当前交易数量
self.bar_executed = len(self)
elif order.status in [order.Canceled, order.Margin, order.Rejected]:
self.log('订单取消/保证金不足/拒绝')
# 其他状态记录为:无挂起订单
self.order = None
def next(self):
# 记录收盘价
self.log('Close, %.2f' % self.dataclose[0])
# 如果有订单正在挂起,不操作
if self.order:
return
# 如果没有持仓则买入
if not self.position:
# 今天的收盘价 < 昨天收盘价
if self.dataclose[0] < self.dataclose[-1]:
# 昨天收盘价 < 前天的收盘价
if self.dataclose[-1] < self.dataclose[-2]:
# 买入
self.log('买入, %.2f' % self.dataclose[0])
# 跟踪订单避免重复
self.order = self.buy()
else:
# 如果已经持仓,且当前交易数据量在买入后5个单位后
if len(self) >= (self.bar_executed + 5):
# 全部卖出
self.log('卖出, %.2f' % self.dataclose[0])
# 跟踪订单避免重复
self.order = self.sell()
if __name__ == '__main__':
# 创建Cerebro引擎
cerebro = bt.Cerebro()
# Cerebro引擎在后台创建broker(经纪人),系统默认资金量为10000
# 为Cerebro引擎添加策略
cerebro.addstrategy(TestStrategy)
# Create a Data Feed
# 本地数据,笔者用Wind获取的东风汽车数据以csv形式存储在本地。
# parase_dates = True是为了读取csv为dataframe的时候能够自动识别datetime格式的字符串,big作为index
# 注意,这里最后的pandas要符合backtrader的要求的格式
dataframe = pd.read_csv('dfqc.csv', index_col=0, parse_dates=True)
dataframe['openinterest'] = 0
data = bt.feeds.PandasData(dataname=dataframe,
fromdate = datetime.datetime(2015, 1, 1),
todate = datetime.datetime(2016, 12, 31)
)
# Add the Data Feed to Cerebro
cerebro.adddata(data)
# 设置投资金额100000.0
cerebro.broker.setcash(100000.0)
# 引擎运行前打印期出资金
print('组合期初资金: %.2f' % cerebro.broker.getvalue())
cerebro.run()
# 引擎运行后打期末资金
print('组合期末资金: %.2f' % cerebro.broker.getvalue())
# Plot the result
cerebro.plot()
上面这段代码整个框架来自于backtrader的官网 (http://backtrader.com.cn/) 笔者自己修改了获取数据的方式,以及增加了打印出了运行结果, 其中数据源文件:dfqc.csv的下载地址 链接:https://pan.baidu.com/s/1slnULbv 密码:wi3k 下载完dfqc.csv文件放到和需要运行的Python代码的同级 大家安装完backtrader, 放到行情数据之后,就可以把代码可以复制过去运行,运行的结果就是如上图,图像就描述了策略的运行结果
以上的博文借鉴了Backtrader量化平台教程(一):backtrader的整体框架_钱塘小甲子的博客-CSDN博客_backtrader
感谢大佬
量化交易1-backtrader介绍相关推荐
- 量化交易主流框架介绍
量化交易主流框架介绍 talib talib的简称是Technical Analysis Library,主要功能是计算行情数据的技术分析指标 numpy 介绍:一个用python实现的科学计算包.包 ...
- python量化交易之路
写在前面 市场有风险,投资需谨慎! 量化交易概念 量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种"大概率"事件以制定策略, ...
- Python期货量化交易中常用的数据类型有哪些?
1 常用内置常量 Python解释器在启动时会创建None.True.False三个常量,None表示"无",True表示"真",False表示"假& ...
- [数字货币量化交易] 第1部分--概述和介绍
免责声明:对于使用此工具所做的任何事情,我概不任何负责任,你要自担风险.这个帖子是参考的老外的格式写的,部分内容是直接翻译的.我自己通过试用这么半年以来,总共本金从0.7BTC到了1.16BTC,大约 ...
- EA 的类型/EA 智能交易的介绍(自动化交易/程序化交易/量化交易)
EA 的类型/EA 智能交易的介绍(自动化交易/程序化交易/量化交易) EA 的类型 1.趋势类 最常见也是最成熟的类型, 趋势类. 最为主流的 EA 类型, 一般根据各种指标和策略来进行出入场操作. ...
- 量化投资分析工具quantstats介绍及其在backtrader量化框架中使用
关注微信公众号获取最新最全量化文章: 诸葛说talk 简介 quantstats -- 衡量策略绩效指标的python lib库,用于投资组合分析.主要由3部分组成: quantstats.stats ...
- 知识星球《玩转股票量化交易》之Backtrader量化框架的使用说明
量化交易是一个多技术综合的项目,学习完书籍<Python股票量化交易从入门到实践>我们再次升级学习的内容--知识星球<玩转股票量化交易> 在星球中我们会深入分享包括Python ...
- 【AIOQuant量化交易框架】第1讲-高频交易介绍
1.什么是高频交易 一提到高频交易,对于大部人来说,高频交易是比较神秘的.在大部分人的认知里,高频交易有超强的盈利能力,堪比印钞机:纯粹靠交易赚钱,有着神秘的数学模型和尖端科技,精准的预测市场走势,带 ...
- 金融平台(掘金量化)量化PYTHON(一)-量化交易介绍
定位 掌握数据挖掘/机器学习技术的应用场景: 从事量化策略工程师.量化策略分析师方向: 目标 掌握回测框架的使用: 掌握股票的量化投资策略: 量化交易简介 了解量化交易的定义以及类型: 说明量化交易的 ...
- 量化交易-Backtrader回测
目录 一.基础篇-backtrader简介 二.backtrader回测应用实例 三.backtrader数据全解析 3.1 数据中必须包含 3.2 一切皆是数据源 3.3 参数 3.4 Lines线 ...
最新文章
- 一个复杂系统的拆分改造实践!
- sar分辨率公式_初识合成孔径雷达SAR
- 【连载】优秀程序员的45个习惯之39——架构师必须写代码
- python之tkinter图形界面
- 三十六、rsync通过服务同步、Linux系统日志、screen工具
- mybatis之xml中日期时间段查询的sql语句
- 如何利用wireshark对TCP消息进行分析
- Android人脸识别活体检测开发入门--基于虹软免费SDK实现
- python父亲节礼物送什么_父亲节送什么礼物好
- 麻省理工学院——人工智能公开课总结02
- 手机发热是什么原因?
- 我想和这个世界说说2
- Django 博客开发教程 8 - 博客文章详情页
- 浅析c4编译器--一个优秀的编译器是如何生成的
- 我的世界1.13 mod制作——制作一个Item(二)
- C++实现鼠标手写+自绘按钮
- 虚拟机RedHatEenterpriseLinux5安装及Oracle10.2.0安装手记
- leetcode刷题总结(主要是各个博主的总结链接)
- 6、阿里云OSS对象存储手把手学习及企业使用方案
- ENISA警告自动驾驶汽车存在严重的网络安全挑战
热门文章
- [poi-tl]转换html内容到word
- Android获取基带版本
- umail for linux,umail for linux邮件服务器备份与还原
- 【转载】《周一清晨的领导课》读书笔记!!!
- 动画必须有(二):悬浮菜单了解一下!
- 一图读懂IP数据包头结构
- 最好的时光在路上,最美的风景在远方
- 报错javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException
- SMplayer安装
- 照相机的成像原理,镜头和单反相机的认识