量化分析基本框架示例

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. k8s基础概念:pause容器和pod控制器类型
  2. Linux查看关机时间
  3. JDeveloper中文乱码问题
  4. java channel源码_java nio ServerSocketChannel源码分析
  5. 遮挡行人的检测论文合集
  6. 广州打捞局成功救助7名遇险人员
  7. 扫描仪标准模板滑动采集图像及其处理
  8. 消费品行业经销商渠道数据同步及管理
  9. 微信引流推广:美拍视频简单的引流方法分享
  10. 深度学习 3d人脸 重建_深度学习实时3D人脸跟踪
  11. 用Aira2高速下载
  12. 如何记账?记账过程中几个实用的技巧
  13. Rpgmakermv(16) YEP MainmenuManager
  14. TEC-2机微程序设计
  15. 【系统】WinXP/Win7x86/Win7x64 地址汇总 2014.7
  16. python工具栏消失_解决Jupyter notebook更换主题工具栏被隐藏及添加目
  17. DDD系列第四讲:领域层设计规范
  18. Python基础——函数(二)
  19. 理解C语言刁钻定义语句的斩麻快刀:自内向外读
  20. 基站设备如何监管?学会这一点很重要

热门文章

  1. Typescript基础知识--学习笔记
  2. 利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程!
  3. ibm tivoli_带有Tivoli Access Manager的SAP NetWeaver Application Server ABAP的单点登录
  4. React 之 Expected an assignment or function call and instead saw an expression 解决办法
  5. hdu2458 2010.3.6
  6. Java中boolean类型占几个字节,你知道吗?
  7. html缩放动画效果,CSS3鼠标hover背景图片缩放动画效果
  8. 产品经理的修炼之道--读后感
  9. flea-db使用之封装JDBC接入
  10. OpenJudge 百练 2787 算24