量化分析基本框架示例

Tushare ID: 434267

框架:Backtrader

数据:Tushare

安装方式:金融量化分析基础环境搭建

示例代码:

import pandas as pd
from datetime import datetime
import backtrader as bt
import tushare as ts
import matplotlib.pyplot as pltts.set_token('Tushare账户token')#获取方式请参考安装方式链接
pro = ts.pro_api()#使用tushare旧版接口获取数据
def get_data(code,start,end):df = pro.daily(ts_code=code, start_date=start, end_date=end)df.index=pd.to_datetime(df.trade_date)df=df[['open', 'high', 'low', 'close', 'pre_close', 'change', 'pct_chg', 'vol', 'amount']]df = df.rename(columns={"vol": "volume"})df = df.iloc[::-1]return dfclass my_strategy1(bt.Strategy):#全局设定交易策略的参数params=(('maperiod',20),)def __init__(self):#指定价格序列self.dataclose=self.datas[0].close# 初始化交易指令、买卖价格和手续费self.order = Noneself.buyprice = Noneself.buycomm = None#添加移动均线指标,内置了talib模块self.sma = bt.indicators.SimpleMovingAverage(self.datas[0], period=self.params.maperiod)def log(self, txt, dt=None):''' 输出日志'''dt = dt or self.datas[0].datetime.date(0)print('%s, %s' % (dt.isoformat(), txt))def notify(self, order):if order.status in [order.Submitted, order.Accepted]:# Buy/Sell order submitted/accepted to/by broker - Nothing to doreturn# Check if an order has been completed# Attention: broker could reject order if not enougth cashif order.status in [order.Completed, order.Canceled, order.Margin]:if order.isbuy():self.log('订单买入:成交价%.2f元' % order.executed.price)elif order.issell():self.log('订单卖出:成交价%.2f元' % order.executed.price)self.bar_executed = len(self)# Write down: no pending orderself.order = Nonedef next(self):if self.order: # 检查是否有指令等待执行, return# 检查是否持仓   if not self.position: # 没有持仓#执行买入条件判断:收盘价格上涨突破20日均线if self.dataclose[0] > self.sma[0]:#执行买入self.order = self.buy(size=500)         else:#执行卖出条件判断:收盘价格跌破20日均线if self.dataclose[0] < self.sma[0]:#执行卖出self.order = self.sell(size=500)if __name__ == '__main__':#回测期间start=datetime(2020, 1, 31)end=datetime(2020, 3, 31)d1=start.strftime('%Y%m%d')d2=end.strftime('%Y%m%d')# 加载数据dataframe=get_data('600000.SH', d1, d2)data = bt.feeds.PandasData(dataname=dataframe,fromdate=start,todate=end)# 初始化cerebro回测系统设置                           cerebro = bt.Cerebro()  #将数据传入回测系统cerebro.adddata(data) # 将交易策略加载到回测系统中cerebro.addstrategy(my_strategy1) # 设置初始资本为10,000startcash = 10000cerebro.broker.setcash(startcash) # 设置交易手续费为 0.2%cerebro.broker.setcommission(commission=0.002) print(f'初始资金: {startcash}\n回测期间:{d1}:{d2}')#运行回测系统cerebro.run()#获取回测结束后的总资金portvalue = cerebro.broker.getvalue()pnl = portvalue - startcash#打印结果print(f'总资金: {round(portvalue,2)}')   print(f'净收益: {round(pnl,2)}')cerebro.plot()

注意事项:

1、Backtrader接收的DataFrame数据按时间由过去到现在进行排列,Tushare老版本的DataFrame数据也是按时间由过去到现在进行排列,因此可直接使用;但最新的Tushare接口是按照时间从现在到过去进行排列,因此需要df = df.iloc[::-1]进行倒序排列。

2、Backtrader默认作图时需要DataFrame数据中有成交量数据,并且列名必须为volume,Tushare老版本数据中有volume列名,新版本已更换为vol,所以需要重新命名df = df.rename(columns={"vol": "volume"})。

其他:

金融量化分析最新动态和源代码分享,请关注“量化之窗”公众号。

量化分析基本框架示例相关推荐

  1. 整合量化分析和基础研究——投资的艺术和科学

    作者:W.乔治.格雷戈 CHINAQIR编译整理 简介 利用量化分析和基础研究的投资过程一直都存在.许多基础研究使用量化方法帮助其筛选出一定量的可以重点考虑的公司.有一些量化方法使得分析师能够超越那些 ...

  2. 量化分析入门5:列表和收盘价的移动平均的示例

    #量化分析入门5:列表和收盘价的移动平均的示例 作者:冯德平(山野雪人)import pandas as pd import akshare as ak#列表: s = [2,2,7,5,8,15,1 ...

  3. 自己做量化交易软件(4)通通量化分析框架构成2

    自己做量化交易软件(4)通通量化分析框架构成2 通通股票量化分析框架采用模块化设计,每个模块存放在不同的py文件中. 我们接着上一篇介绍. 五.基础窗口画面框架 HP_view.py HP_view. ...

  4. 自己做量化交易软件(3)通通量化分析框架构成1

    自己做量化交易软件(3)通通量化分析框架构成1 通通股票量化分析框架采用模块化设计,每个模块存放在不同的py文件中. 通通股票量化分析框架下载: https://download.csdn.net/d ...

  5. TensorRT-8量化分析

    TensorRT-8量化分析 本文讲非对称量化.量化方式等等一些细节,不过有一段时间在做基于TensorRT的量化,需要看下TensorRT的量化细节.这次文章是偏实践的一篇,主要过一下TensorR ...

  6. python量化交易开源框架_hikyuu: 基于C++/Python的开源量化交易研究框架

    Hikyuu Quant Framework是一款基于C++/Python的开源量化交易研究框架,用于策略分析及回测(仅受限于数据,如有数据也可用于期货等).其核心思想基于当前成熟的系统化交易方法,将 ...

  7. python金融量化书籍_超强干货 | Python金融数据量化分析教程+机器学习电子书

    如今Python语言的学习已经上升到了国家战略的层面上.Python语言是人工智能的基础语言,国家相关教育部门对于"人工智能普及"格外重视,不仅将Python列入到小学.中学和高中 ...

  8. python量化分析数据_Python数据分析_量化分析.pdf

    法律声明  本课件包括:演示文稿,示例,代码,题库,视频和声 音等,小象学院拥有完全知识产权的权利:只限于善意 学习者在本课程使用,不得在课程范围外向任何第三方 散播.任何其他人或机构不得盗版.复制 ...

  9. python 股票自动交易助手_hikyuu: 基于C++/Python的开源量化交易研究框架

    Hikyuu Quant Framework是一款基于C++/Python的开源量化交易研究框架,用于策略分析及回测(仅受限于数据,如有数据也可用于期货等).其核心思想基于当前成熟的系统化交易方法,将 ...

  10. 【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )

    OkHttp 系列文章目录 [OkHttp]OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) [OkHttp]Android 项目导入 OkHttp ( 配置依赖 | 配置 ...

最新文章

  1. 深入了解Mvc路由系统
  2. 网易开源支持图像识别的自动化UI测试工具,零基础亲测好评!
  3. 最近学了个elarning,结尾非要让写问卷,写了一下,发出来共勉
  4. minecraft_MineCraft和堆外内存
  5. 做ppt用的小插图_如何用PPT做随机抽奖?
  6. 2 引入失败_苦等2年!总投资2800万!镇江首个民国风商场,来了!
  7. 如何在Linux操作系统定时重启Tomcat服务?
  8. C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换
  9. Drool的LHS和RHS
  10. 十分钟带你认识Node.js
  11. PDF文件如何编辑?这两种方法是我一直在用的
  12. 家事:庆祝父亲60岁生日
  13. taptap领礼包怎么显示服务器繁忙,原神taptap预约奖励领取教程 taptap预约奖励怎么领取...
  14. unity 模拟引力
  15. postgrest 简单使用
  16. 简报 | 呼吁建立全球性加密货币征税体系和法规 或在2020年最终敲定
  17. 开发落网电台windows phone 8应用的计划(4)
  18. 消息队列之RabbitMQ原理
  19. 前端-element-ui
  20. linux SPI驱动开发

热门文章

  1. Oracle审计与数据库防火墙(AVDF)介绍
  2. ES6.x版本单机三节点配置discovery.zen.ping.unicast.hosts 错误
  3. GateWay 网关服务
  4. GitHub 开源推荐 | mpv - 一个免费、开源、跨平台的多媒体播放器
  5. 5类6类7类网线对比_5类 6类 7类网线有没有什么区别
  6. MiniGUI源码分析——GDI概览及Surface
  7. 有趣的java编程题_java编程题 有趣的数
  8. VS2017使用Visual Leak Detector
  9. 6-2 折半查找 (15分)_数据结构实验7_羊卓的杨
  10. Django Hello,Word!(Windows10)