获取数据

result = pd.read_csv('11.csv')
df = pd.DataFrame(data=result)
df = df.set_index(['datetime'])
df

策略


class MultiTFStrategy(bt.Strategy):params = (('period', 20),)# states definationEmpty, M15Hold, H1Hold, D1Hold = range(4)States = ['Empty', 'M15Hold', 'H1Hold', 'D1Hold',]def log(self, txt):''' Logging function for this strategy'''dt = self.datas[0].datetime.datetime(0)print('%s, %s' % (dt.isoformat(), txt))def __init__(self):self.ma15m = bt.talib.SMA(self.dnames.hs15m, timeperiod=self.p.period)self.ma1h = bt.talib.SMA(self.dnames.hs1h, timeperiod=self.p.period)self.ma1d = bt.talib.SMA(self.dnames.hs1d, timeperiod=self.p.period)self.c15m = bt.indicators.CrossOver(self.dnames.hs15m, self.ma15m, plot=False)self.c1h = bt.indicators.CrossOver(self.dnames.hs1h, self.ma1h, plot=False)self.c1d = bt.indicators.CrossOver(self.dnames.hs1d, self.ma1d, plot=False)self.bsig15m = self.c15m==1self.bsig1h = self.c1h==1self.bsig1d = self.c1d==1self.sell_signal = self.c1d==-1self.st = self.Emptyself.st_map = {self.Empty : self._empty,self.M15Hold : self._m15hold,self.H1Hold : self._h1hold,self.D1Hold : self._d1hold,}# To keep track of pending ordersself.order = Nonedef notify_order(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 enough cashif order.status == order.Completed:if order.isbuy():self.log('BUY EXECUTED, St: %s, Size: %d, Price: %.2f, Cost: %.2f, Comm %.2f' %(self.States[self.st],order.executed.size,order.executed.price,order.executed.value,order.executed.comm,))else:  # Sellself.log('SELL EXECUTED, St: %s, Size: %d, Price: %.2f, Cost: %.2f, Comm %.2f' %(self.States[self.st],order.executed.size,order.executed.price,order.executed.value,order.executed.comm))elif order.status in [order.Canceled, order.Margin, order.Rejected]:self.log('Order Canceled/Margin/Rejected')# Write down: no pending orderself.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):# Check if an order is pending ... if yes, we cannot send a 2nd oneif self.order:return# just call state_map functionself.order = self.st_map[self.st]()# Check if we are in the market and no buy order issuedif self.position and not self.order:# Already in the market ... we might sellif self.sell_signal:self.st = self.Empty# Keep track of the created order to avoid a 2nd orderself.order = self.close()def _empty(self):if self.bsig15m:price = self.data0.close[0]cash = self.broker.get_cash()# 20% of the cashshare = int(math.floor((0.2*cash)/price))# set stateself.st = self.M15Holdreturn self.buy(size=share)def _m15hold(self):if self.bsig1h:price = self.data0.close[0]cash = self.broker.get_cash()# half of the remain cash ( 60% )share = int(math.floor((0.5*cash)/price))# set stateself.st = self.H1Holdreturn self.buy(size=share)def _h1hold(self):if self.bsig1d:price = self.data0.close[0]cash = self.broker.get_cash()# half of the remain cash (80%)share = int(math.floor((0.5*cash)/price))# set stateself.st = self.D1Holdreturn self.buy(size=share)def _d1hold(self):return None

cerebro存入数据

cerebro = bt.Cerebro(oldtrades=True)feed = bt.feeds.PandasData(dataname=df, openinterest=None, compression=15, timeframe=bt.TimeFrame.Minutes)cerebro.adddata(feed, name='hs15m')
cerebro.resampledata(feed, name='hs1h', timeframe=bt.TimeFrame.Minutes, compression=60)
cerebro.resampledata(feed, name='hs1d', timeframe=bt.TimeFrame.Days)cerebro.addstrategy(MultiTFStrategy)# 小场面1万起始资金
cerebro.broker.setcash(10000.0)# 手续费万5
cerebro.broker.setcommission(0.0005)print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())result = cerebro.run()print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())

绘图:


cerebro.plot(iplot=False,start=datetime.date(2019, 11, 1),end=datetime.date(2020, 1, 1),style='bar',barup='red',bardown='green',
)

Backtrader多周期回测相关推荐

  1. backtrader进行期货回测要注意的问题:保证金等设置,拼接滚动合约

    点此获取backtrader技术教程 ================== 很多同学问如何用backtrader进行期货回测.以下给个例子,与普通股票回测不同的是佣金的设置方式. 1 佣金类设置 im ...

  2. Python量化交易学习笔记(36)——backtrader多股回测避坑3

    本文继续记录多股回测时可能遇到的异常情况. 坑描述 多股回测时,当日期达到所有股票的技术指标都能够计算出有效值后,backtrader才开始进行回测.由于这种逻辑的存在,如果某些股票在回测周期的最后几 ...

  3. backtrader 自定义indicator_BackTrader回测工具(一)

    18年的时候开始做量化分析,当时看了市场上很多的回测工具.大部分都比较笨重,后来主要用的是ricequant的离线回测平台.功能很全,没有什么毛病,主要就是速度比较慢.这个平台前段时间停止服务了,不想 ...

  4. 金融工程python报告期权_利用Backtrader进行期权回测之一:获取期权数据

    最近在学习一些期权方面的知识,希望有一个期权的回测环境,方便自己做一些测试.初步做了一些功课之后,打算从通达信软件获得期权数据,并使用backtrader进行回测.编程语言使用python. 下载期权 ...

  5. 利用Backtrader进行期权回测之四:Covered Call策略

    在前面的三篇文章中,解决了期权数据获取和实现期权策略的一些技术问题.在这篇文章中,我要实现一个完整的covered call期权策略.Covered call是最简单的期权策略之一,就是持有股票并卖出 ...

  6. backtrader股票量化回测超省力必须入门系列(1):回测基本思想与“策略迭代表”

    从本文开始,将连载我们的backtrader技术教程,方便感兴趣的用户入门backtrader.(全书内容参考这里) 本文是第1章1.1-1.2节的内容.本次内容最核心的要点是"策略迭代表& ...

  7. 量化回测平台Backtrader实战-陆一潇-专题视频课程

    量化回测平台Backtrader实战-240人已学习 课程介绍         课程通过学习Backtrader这一功能丰富的开源回测平台来逐步实现多个量化cta策略的回测实现.Backtrader是 ...

  8. backtrader程序介绍-策略回测用法

    backtrader的策略回测初尝 前言 backtrader作为能够在自己的python环境运行的回测程序之一,不得不说很好用.今天进行了初步的学习,稍微进行分享. 一.回测基础步骤 应用backt ...

  9. 如何用backtrader对股票组合进行量化回测?

    01 引言 backtrader是功能非常强大的量化回测框架之一,得到欧洲很多银行.基金等金融机构的青睐,并应用于实盘交易中.公众号Python金融量化针对backtrader的入门和应用已连续发布了 ...

最新文章

  1. AI芯片大战已然打响,国内外巨头抢占万亿智能家居市场
  2. mysql error 1236_解决MySQL数据库同步1236错误
  3. Stanford机器学习笔记-6. 学习模型的评估和选择
  4. J.R.R.托尔金笔下的中土世界与《斗破苍穹》项目实践:从世界观解构入手场景设计
  5. jQuery之防止【冒泡事件】,阻止默认行为 【return false】 event.stopPropagation event.preventDefault...
  6. 转:6.1海量数据处理
  7. MYSQL为什么long_query_time设置了1秒,slow log中记录了小于1秒的慢查询
  8. Java基础---认识IO流---字节流、字符流---缓冲流---转换流
  9. 出现错误illegal call of non-static member function?
  10. 尝试将程序上传Github保存
  11. jmeter 计数器_jmeter函数(六)
  12. java静态引用_Java开发中静态方法引用和实例方法引用案例详细讲解
  13. typedef struct引起的结构体问题
  14. 面向对象三大特征之多态——Java笔记(七)
  15. java取北京时间_在java中怎么获取北京时间
  16. Windows10关机时出现 等待应用程序响应 / ETDCtrlHelper 影响关机
  17. vue相关UI组件库
  18. 【杂篇 · 技巧】WebStorm页面窗口与显示bug
  19. coc机器人苹果_优必选科技Jimu机器人正式入驻Apple Store 零售店
  20. 安徽省计算机水平考试试卷,第一次安徽省计算机水平考试试卷.doc

热门文章

  1. h5获取http请求头_React 前端获取http请求头信息
  2. python官网网址是什么意思_大家都是怎么部署python网站的?
  3. Socket编程 涵盖代码和函数参数介绍
  4. VLC详细的使用说明以及配置说明综合示范实例精通VLC开发
  5. 26条安全开车经验 开车20年老司机分享
  6. linux 常用命令 杂记
  7. 狗窝里的小日子- 3 ...
  8. jsp页面c标签循环map , c:foreach 循环map
  9. 不同的写法 其中 1 2 (试了下 没有效果 ,先记载这里把)
  10. springMVC数据封装成POJO