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介绍相关推荐

  1. 量化交易主流框架介绍

    量化交易主流框架介绍 talib talib的简称是Technical Analysis Library,主要功能是计算行情数据的技术分析指标 numpy 介绍:一个用python实现的科学计算包.包 ...

  2. python量化交易之路

    写在前面 市场有风险,投资需谨慎! 量化交易概念 量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种"大概率"事件以制定策略, ...

  3. Python期货量化交易中常用的数据类型有哪些?

    1 常用内置常量 Python解释器在启动时会创建None.True.False三个常量,None表示"无",True表示"真",False表示"假& ...

  4. [数字货币量化交易] 第1部分--概述和介绍

    免责声明:对于使用此工具所做的任何事情,我概不任何负责任,你要自担风险.这个帖子是参考的老外的格式写的,部分内容是直接翻译的.我自己通过试用这么半年以来,总共本金从0.7BTC到了1.16BTC,大约 ...

  5. EA 的类型/EA 智能交易的介绍(自动化交易/程序化交易/量化交易)

    EA 的类型/EA 智能交易的介绍(自动化交易/程序化交易/量化交易) EA 的类型 1.趋势类 最常见也是最成熟的类型, 趋势类. 最为主流的 EA 类型, 一般根据各种指标和策略来进行出入场操作. ...

  6. 量化投资分析工具quantstats介绍及其在backtrader量化框架中使用

    关注微信公众号获取最新最全量化文章: 诸葛说talk 简介 quantstats -- 衡量策略绩效指标的python lib库,用于投资组合分析.主要由3部分组成: quantstats.stats ...

  7. 知识星球《玩转股票量化交易》之Backtrader量化框架的使用说明

    量化交易是一个多技术综合的项目,学习完书籍<Python股票量化交易从入门到实践>我们再次升级学习的内容--知识星球<玩转股票量化交易> 在星球中我们会深入分享包括Python ...

  8. 【AIOQuant量化交易框架】第1讲-高频交易介绍

    1.什么是高频交易 一提到高频交易,对于大部人来说,高频交易是比较神秘的.在大部分人的认知里,高频交易有超强的盈利能力,堪比印钞机:纯粹靠交易赚钱,有着神秘的数学模型和尖端科技,精准的预测市场走势,带 ...

  9. 金融平台(掘金量化)量化PYTHON(一)-量化交易介绍

    定位 掌握数据挖掘/机器学习技术的应用场景: 从事量化策略工程师.量化策略分析师方向: 目标 掌握回测框架的使用: 掌握股票的量化投资策略: 量化交易简介 了解量化交易的定义以及类型: 说明量化交易的 ...

  10. 量化交易-Backtrader回测

    目录 一.基础篇-backtrader简介 二.backtrader回测应用实例 三.backtrader数据全解析 3.1 数据中必须包含 3.2 一切皆是数据源 3.3 参数 3.4 Lines线 ...

最新文章

  1. 一个复杂系统的拆分改造实践!
  2. sar分辨率公式_初识合成孔径雷达SAR
  3. 【连载】优秀程序员的45个习惯之39——架构师必须写代码
  4. python之tkinter图形界面
  5. 三十六、rsync通过服务同步、Linux系统日志、screen工具
  6. mybatis之xml中日期时间段查询的sql语句
  7. 如何利用wireshark对TCP消息进行分析
  8. Android人脸识别活体检测开发入门--基于虹软免费SDK实现
  9. python父亲节礼物送什么_父亲节送什么礼物好
  10. 麻省理工学院——人工智能公开课总结02
  11. 手机发热是什么原因?
  12. 我想和这个世界说说2
  13. Django 博客开发教程 8 - 博客文章详情页
  14. 浅析c4编译器--一个优秀的编译器是如何生成的
  15. 我的世界1.13 mod制作——制作一个Item(二)
  16. C++实现鼠标手写+自绘按钮
  17. 虚拟机RedHatEenterpriseLinux5安装及Oracle10.2.0安装手记
  18. leetcode刷题总结(主要是各个博主的总结链接)
  19. 6、阿里云OSS对象存储手把手学习及企业使用方案
  20. ENISA警告自动驾驶汽车存在严重的网络安全挑战

热门文章

  1. [poi-tl]转换html内容到word
  2. Android获取基带版本
  3. umail for linux,umail for linux邮件服务器备份与还原
  4. 【转载】《周一清晨的领导课》读书笔记!!!
  5. 动画必须有(二):悬浮菜单了解一下!
  6. 一图读懂IP数据包头结构
  7. 最好的时光在路上,最美的风景在远方
  8. 报错javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException
  9. SMplayer安装
  10. 照相机的成像原理,镜头和单反相机的认识