+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-04(1)

2019-06(3)

2019-07(6)

2019-08(114)

2019-09(83)

backtrader源码解析_【大操手量化投资课堂源码解析】使用量化交易回测神器BackTrader初识,回测双均线策略!...

发布于2021-01-13 21:27     阅读(118)     评论(0)     点赞(3)     收藏(2)


0

1

2

3

4

5

6

7

8

9

我们本期的源码给大家带来的是视频配套的量化交易框架backtrader的双均线策略回测源码,利用backtrader来回测我们之前的双均线交易策略。

开始前,我们需要安装backtrader的包

pip install backtrader

36f69c8e4724726a7fb4ac18d09ef80a.png

安装完成之后,我们下面就开始利用backtrader进行我们策略的回测。

我们按照步骤,跟大家进行回测源码的解析。

  • 导入包

import backtrader as btimport tushare as tsimport pandas as pdfrom datetime import datetime
  • 定义一个方法进行数据的预处理,数据预处理主要是为了按照backtrader的数据格式要求进行整理,整理成backtrader可识别的数据结构。

def get_data(start):    df = ts.pro_bar(ts_code='000001.SZ', adj='qfq', start_date=start)    df = df.iloc[::-1]    df.index = pd.to_datetime(df.trade_date)    df['openinterest'] = 0    df = df[['open', 'high', 'low', 'close', 'vol', 'openinterest']]    df = df.rename(columns={'vol': 'volume'})    return df
  • 继承backtrader提供的strategy类,根据我们策略的思维,进行回测策略的编写。这边的核心代码部分是next的函数方法。

class MyStrategy(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        # 计算两条均线的值        self.wma = bt.talib.WMA(self.dataclose, timeperiod=15)        self.dema = bt.talib.DEMA(self.dataclose, timeperiod=15)    def next(self):        # 检查订单状态        if self.order:            print("等待成交")        # 检查持仓        if not self.position:            # 没有持仓,买入开仓            if self.dema[0] > self.wma[0]:                print('===============')                print("快均线上穿慢均线,执行买入")                self.order = self.buy(size=5000)        else:            # 手里有持仓,判断卖平            if self.dema[0] < self.wma[0]:                print('===============')                print("快均线下穿慢均线,执行卖出")                self.order = self.sell(size=5000)    def notify_order(self, order):        if order.status in [order.Submitted, order.Accepted]:            if order.status in [order.Submitted]:                self.log("提交订单……")            if order.status in [order.Accepted]:                self.log("接受订单……")            return        if order.status in [order.Completed]:            if order.isbuy():                self.log("执行买入,%.2f"%order.executed.price)            if order.issell():                self.log("执行卖出,%.2f"%order.executed.price)        self.log('订单完成!')        print("======================")        self.order = None
  • 最后,我们将数据和策略放入backtrader的broker,同时设定初始化参数,比如资金和手续费等。设置完成后,我们调用start方法启动回测,回测完成后,我们画出回测结果的可视化图形。

# 第一步 获取数据start = datetime(2020, 1, 1)end = datetime(2020, 11, 26)k_line_data = get_data(start.date().strftime("%Y%M%D"))# 最终需要的数据data = bt.feeds.PandasData(dataname=k_line_data, fromdate=start, todate=end)# 加载backtrader引擎back_trader = bt.Cerebro()# 将数据传入back_trader.adddata(data)# 策略加进来back_trader.addstrategy(MyStrategy)#back_trader.broker.set_coc(True)# 账户资金初始化startCash = 100000back_trader.broker.setcash(startCash)# 设置手续费back_trader.broker.setcommission(commission=0.001)# 输出初始数据d1 = start.strftime("%Y%M%D")d2 = end.strftime("%Y%M%D")print(f'初始化资金:{startCash},回测时间:{d1}:{d2}')# 开启回测results = back_trader.run()print('最终资金:%.2f'%back_trader.broker.getvalue())back_trader.plot(style='candlestick')

回测结果如下:

33df49fe9420d0fbe0c3e12e1316e2d9.png

我们简单看下回测结果:

我们设置的初始资金是10万元整,最终的资金是122685,盈利了22685元。

在回测的区间,从2020年1月到2020年11月26号间,总共进行了4次交易,2次2次亏损。

从盈利结果来看,似乎是不错的。

但是,这里jeevan要提醒大家一点的是,回测不仅仅只是看回测最后的资金,一个好的策略,还应当包括策略的胜率,盈亏比,夏普率等等的因素综合考虑。我们这里仅演示如何使用backtrader,并不是一个完整的回测分析。

关于回测,我们后续会专门开课题跟大家讲如何进行真正的回测。

更多内容,欢迎关注头条号西瓜视频进行学习。

喜欢我们知识内容的,欢迎转发,点个【在看】支持下吧。转发本文章到朋友圈,给我们留言,即可获得完整的打包源码哦。

原文链接:https://blog.csdn.net/weixin_32616931/article/details/112536162

0

1

2

3

4

5



所属网站分类: 技术文章 > 博客

作者:虎王168

链接: https://www.pythonheidong.com/blog/article/764504/eba106c963a8209793f9/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

3 0
收藏该文
已收藏

评论内容:(最多支持255个字符)