前言:
在前面学了点机器学习知识后,发现自己还没有一个回测框架,找了短时间学习资料,还是决定使用backtrader,至于聚宽优米那些平台感觉使用起来好像没那么自由,还是先学习下backtrader,学完后再把自己学到的知识理顺下,然后再整理个符合自己使用的框架来,东学西学,学得越多就越乱,得重新审视下自己的需求。以下是我学习backtrader的一些笔记,主要是直接拿tushaer的数据来用,就不用先本地CSV数据化了,方便快捷,代码如下:

from __future__ import (absolute_import, division, print_function,unicode_literals)
import datetime
import pandas as pd
import backtrader as bt
import tushare as ts
import numpy as np# 创建策略类
class TestStrategy(bt.Strategy):# 设置简单均线周期,以备后面调用params = (('maperiod21', 21),('maperiod55', 55))def log(self, txt, dt=None):# 日记记录输出dt = dt or self.datas[0].datetime.date(0)print('%s, %s' % (dt.isoformat(), txt))def __init__(self):# 初始化数据参数# 设置当前收盘价为datacloseself.dataclose = self.datas[0].closeself.order = Noneself.buyprice = Noneself.buycomm = None# 添加简单均线self.sma21 = bt.indicators.SimpleMovingAverage(self.datas[0], period=self.params.maperiod21)self.sma55 = bt.indicators.SimpleMovingAverage(self.datas[0], period=self.params.maperiod55)def notify_order(self, order):if order.status in [order.Submitted, order.Accepted]:# 如果有订单提交或者已经接受的订单,返回退出return# 主要是检查有没有成交的订单,如果有则日志记录输出价格,金额,手续费。注意,如果资金不足是不会成交订单的if order.status in [order.Completed]:if order.isbuy():self.log('BUY EXECUTED, Price: %.2f, Cost: %.2f, Comm %.2f' %(order.executed.price,order.executed.value,order.executed.comm))self.buyprice = order.executed.priceself.buycomm = order.executed.commelse:  # Sellself.log('SELL EXECUTED, Price: %.2f, Cost: %.2f, Comm %.2f' %(order.executed.price,order.executed.value,order.executed.comm))# len(self)是指获取截至当前数据一共有多少根bar# 以下代码就是指当交易发生时立刻记录下了当天有多少根bar# 如果要表示当成交后过了5天卖,则可以这样写 if len(self) >= (self.bar_executed + 5):self.bar_executed = len(self)elif order.status in [order.Canceled, order.Margin, order.Rejected]:self.log('Order Canceled/Margin/Rejected')self.order = Nonedef notify_trade(self, trade):if not trade.isclosed:  # 如果交易还没有关闭,则退出不输出显示盈利跟手续费returnself.log('OPERATION PROFIT, GROSS %.2f, NET %.2f' %(trade.pnl, trade.pnlcomm))def next(self):# 输出显示收盘价self.log('Close, %.2f' % self.dataclose[0])# 检查是否有订单发送当中,如果有则不再发送第二个订单if self.order:return# 检查是否已经有仓位if not self.position:# 如果没有则可以执行一下策略了if self.sma21[0] > self.sma55[0]:# 记录输出买入价格self.log('BUY CREATE, %.2f' % self.dataclose[0])# 跟踪已经创建好的订单避免重复第二次交易self.order = self.buy()else:if self.sma21[0] < self.sma55[0]:self.log('SELL CREATE, %.2f' % self.dataclose[0])self.order = self.sell()if __name__ == '__main__':# 创建策略容器cerebro = bt.Cerebro()# 添加自定义的策略TestStrategycerebro.addstrategy(TestStrategy)pro = ts.pro_api('要到tushare官网注册个账户然后将token复制到这里,可以的话请帮个忙用文章末我分享的链接注册,谢谢')stock_code = '000001.SZ'df = pro.daily(ts_code=stock_code, start_date='20200101', end_date='20200828')df['trade_date'] = pd.to_datetime(df['trade_date'])# df = df.drop(['change', 'pre_close', 'pct_chg', 'amount'], axis=1)df = df.rename(columns={'vol': 'volume'})df.set_index('trade_date', inplace=True)  # 设置索引覆盖原来的数据df = df.sort_index(ascending=True)  # 将时间顺序升序,符合时间序列dataframe = dfdataframe['openinterest'] = 0data = bt.feeds.PandasData(dataname=dataframe,fromdate=datetime.datetime(2020, 1, 1),todate=datetime.datetime(2020, 8, 20))# 添加数据cerebro.adddata(data)# 设置资金cerebro.broker.setcash(10000.0)# 设置每笔交易交易的股票数量cerebro.addsizer(bt.sizers.FixedSize, stake=100)# 设置手续费cerebro.broker.setcommission(commission=0.01)# 输出初始资金print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())# 运行策略cerebro.run()# 输出结果print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())cerebro.plot()

tushare注册链接:link

python tushare backtrader股票回测双均线策略相关推荐

  1. Python量化交易实战-38使用开源项目回测双均线策略

    B站配套视频教程观看 使用PyAlgoTrade回测双均线策略 双均线策略:长短周期均线,通过金叉,死叉的方式买入卖出股票,获取收益的策略. 回顾上节课代码的部分,上节课完成了可视化代码的部分, 主要 ...

  2. 【手把手教你】用backtrader量化回测海龟交易策略

    01 引言 海龟交易策略是比较经典的趋势交易系统之一,涵盖了从入场交易(品种选择).仓位管理(基于ATR加减仓).离场(触发条件)的整个过程.机械套用海龟交易法则在A股上进行交易可能效果不佳,但其交易 ...

  3. 量化策略初探——使用tushare进行沪深300ETF双均线策略

    使用tushare采集沪深300ETF数据,并对沪深300ETF采用简单移动平均.指数移动平均.进行双均线策略,最后使用backtrader进行回测. 一.基本概念 双均线策略:运用两条不同周期的移动 ...

  4. python 量化策略回测_在python中创建和回测对交易策略

    python 量化策略回测 Pairs trading is one of the many mean-reversion strategies. It is considered non-direc ...

  5. Python双均线策略回测(2021-10-12)

    Python双均线策略回测 1.择时策略简介 根据百度百科的解释,择时交易是指利用某种方法来判断大势的走势情况,是上涨还是下跌或者是盘整.如果判断是上涨,则买入持有:如果判断是下跌,则卖出清仓,如果是 ...

  6. Tushare + Backtrader实现双均线策略 以工商银行为例

    参看文章: Welcome - Backtrader 6.如何用backtrader实现双均线策略?以工商银行为例_云金杞-CSDN博客 Python量化交易学习笔记(53)--backtrader的 ...

  7. Python数据分析之股票双均线策略制定

    Python数据分析之股票双均线策略制定 需求:双均线策略制定 库 tushare包 预处理数据 df = pd.read_csv('./maotai.csv').drop(labels='Unnam ...

  8. 量化投资01----股票_贵州茅台600519_双均线策略回测

    贵州茅台 SH600519 双均线策略回测(5日均线.30日均线,金叉买入,死叉卖出) 交易从 2010年开始,2019年底结束. 10万初始资金 尽量买入(按手),尽量卖出,均以开盘价 未计算手续费 ...

  9. 双均线策略构建及回测

    # python构建双均线策略 # 均线策略中最常见的一种方法是根据长期均线和短期均线的交叉情况来确定交易信号,即:当短期均线从下往上穿越长期均线时,形成金叉,做多: # 反之,当长期均线从上往下穿越 ...

最新文章

  1. Vue+element UI实现“回到顶部”按钮组件
  2. HTTPS 原理分析
  3. dom定位的三种元素
  4. arraylist转int数组_五千字的数组拓展,面试官对我竖起大拇指喊停
  5. Spring注意事项(各部分理解)
  6. linux环境编程 学习,学习linux环境高级编程首先学习的是文件的操作。因为有.pdf...
  7. 漫画:学习中台,看这篇就够了
  8. Linux磁盘管理之磁盘结构、概念、原理01
  9. 华为解锁刷机root教程详解
  10. aaa logo汉子字体_AAA Logo –标志设计软件
  11. 4种方法解决js跨域的实现方式
  12. Linux中修改HTTP默认主页
  13. 2019 google开发者大会 | tensorflow相关视频
  14. 五年50起并购、股价持续上扬,复盘IBM的物联网进化之路
  15. python 爬虫 403 Forbidden
  16. 将Excel数据转换为XML
  17. 数字证书及其简单数字签名的实现(java实现)
  18. 设计模式-实习期笔记
  19. SSO (Single Sign On)
  20. HackPwn:TCL智能洗衣机破解细节分析

热门文章

  1. 算法系列之十八:用天文方法计算二十四节气(下)
  2. opencv 通过标定摄像头测量物体大小_解决方案 | 如何用普通手机准确测量物体体积?...
  3. 菱形图案c语言程序,C语言程序设计,做一个菱形图案
  4. 云计算技术体系结构由这四点组成
  5. 通过 acme.sh 申请 Zero SSL 免费泛域名证书
  6. vue-pdf 打印文字空白、每一页多一个空白页、电子签章不显示
  7. RTL8821CS移植过程记录
  8. 读《禅与摩托车维修艺术》
  9. mysql统计一年12月的数据
  10. [渝粤教育] 西南科技大学 电子信息工程专业导论 在线考试复习资料