打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python量化:Backtrader框架实现你的任何投资idea
userphoto

2023.05.24 湖北

关注

投资最重要的三件事

我们都知道,做任何的投资不外乎三个方面:选标、择时、套利,什么意思呢?

选标:就是选择你要投资的标的,你需要投资的资产,比如房地产、金融资产、商品等不同类大类资产,当然YU股思基今天要说的量化框架是投资金融标的资产。

择时:当你选择好自己的投资资产后,接下来你就要选择合适的入场时机了,不是任何时候入场你都可以胜利的,好的入场时机是非常关键,决定你的投资成败的关键,任何一种投资必须经历此环节。那么对于股票和基金投资,什么时候是好的入场时机呢,这个就千人千面了,有的选择基本面研究来选择入场时机,有的选择技术面研究来选择入场时机,有的两者结合起来看,总之无论何种方法,都是要进行研究验证的,切不可盲目入场,否则你可能死的很惨

套利:就是通过你的选择标的和择时来获取收益,当然套利有很多种方法,比如做多的“低买高卖”,做空的“高卖低买”,还有很多的对冲套利,总之方法有很多种,一定要选择适合自己的方法,也是自己最明白的方法,因为你要相信投资永远赚的是你认知的钱。

那我们都知道了投资要经历以上三个过程:选标、择时、套利,那么依据历史数据来回溯我们这三个投资过程就至关重要了,只有很好的回溯历史,才能更好指导未来的投资,大大提升投资的胜率,才能够明白什么是好的投资策略,什么是失败的投资策略,长期形成自己的特有投资逻辑。

今天YU股思基就给大家介绍一个Python的量化框架:Backtrader,免费的Python开源量化框架,这个框架十分完善,基本上可以实现在投资里大部分的逻辑和回测。

BacktraderA feature-rich Python framework for backtesting and trading

这是Backtrader的官网的介绍,你就可以知道他是干什么的了,用于回测和交易的Python框架。

下面就举一个简单的例子和大家介绍该怎么用这个Python量化框架

双均线策略

我们知道在股票投资中,常用的一个技术指标就是移动平均线MA,MA有不同的周期,比如常用的有5日、10日、20日、30日、60日、120日等,当然都是可以自由设置的,YU股思基常用的就是MA5/MA13/MA34,我称之为短线精灵鼠均线系统。

双均线策略基本逻辑是:

根据长期均线和短期均线的交叉情况来确定交易信号,即:当短期均线从下往上穿越长期均线时,形成金叉,做多;反之,当长期均线从上往下穿越短期均线时,形成死叉,做空或平仓。本次使用双均线策略如下:

均线:以 5 日均线为短期均线、以 10 日均线为长期均线;

买入开仓:当前无持仓,当日 5 日均线上穿 10 日均线,金叉,第二天以市价单买入,开仓;

卖出平仓:当前持有多单,当日 5 日均线下穿 10 日均线,死叉,第二天以市价单卖出,平仓。

双均线策略的Backtrader实现

1.导入相关的Python库和金融大数据接口库(本次使用的是Tushare)

from __future__ import (absolute_import,division,print_function,unicode_literals)
import datetimeimport os.pathimport sys
import pandas as pdimport tushare as ts #tushare作为data feed 数据源import backtrader as bt
#tushare接口授权token = '你的接口token'pro = ts.pro_api(token=token)ts.set_token(token=token) #使用复权行情必须设置接口token

2.定义一个获取标的资产的历史行情数据方法

方法定义为带参数的:参数是标的代码,以及行情历史数据区间的开始时间和结束时间。

'''获取标的历史数据,并将标的数据生成backtrader指定格式的数据,为了是把数据传给backtrader,框架'''
def get_stock_data(code,start_date,end_date): df = pro.daily(ts_code=code, start_date=start_date, end_date=end_date) df = df.iloc[::-1,:] df.reset_index(inplace=True,drop=True) df = df[['trade_date','open','high','low','close','vol']] df.columns = ['date','open','high','low','close','volume'] df['openinterest'] = [0] * len(df) df = df.set_index('date') df.index = pd.to_datetime(df.index) print(df) return df

3.定义实现双均线策略逻辑的类和方法

# 创建策略类:双均线策略class TwoSmaStrategy(bt.Strategy): params = (('short', 5), ('long', 10)) # 可调整的参数
def __init__(self): self.order = None # 初始化订单 self.sma_s = bt.indicators.MovingAverageSimple(self.datas[0].lines.close, period=self.params.short) # 短期均线指标 self.sma_l = bt.indicators.MovingAverageSimple(self.datas[0].lines.close, period=self.params.long) # 长期均线指标
# 策略方法 def next(self): # 检查是否已经买入 if not self.position: # 如果没有买入,并且短期均线 > 长期均线,说明涨势,买入 if self.sma_s[0] > self.sma_l[0]: self.order = self.buy() else: # 已经买了,并且短期均线 < 长期均线,说明跌势,卖出 if self.sma_s[0] < self.sma_l[0]: self.order = self.sell()

4.策略实现回测的业务主逻辑实现(本次使用的标的资产是贵州茅台,仅仅是作为举例使用,不作为任何投资依据)

if __name__ == '__main__':
cerebro = bt.Cerebro() #初始化
cerebro.addstrategy(TwoSmaStrategy)
data = get_stock_data(code='600519.SH',start_date='20201208',end_date='20221216') datafeed = bt.feeds.PandasData(dataname = data) #必须将df数据转换为btfeed格式 cerebro.adddata(datafeed)
cerebro.broker.setcash(10000000.0) #设置策略初始资金,默认是10000
print('组合初始资产价值:%.2f' % cerebro.broker.getvalue())
cerebro.run()
print('组合最终资产价值:%.2f' % cerebro.broker.getvalue())
cerebro.plot(style='bar')

(想要获取完整代码的朋友,关注YU股思基私信获取)

Backtrader框架的策略实现结果如下:

从策略结果可以清楚看出,买点在哪,卖点在哪,以及策略回测的效果如何,回测结果统计区间是:20201208-20221216。

通过以上实现,大家可以看出,只要有想法,Backtrader的Python量化框架就能告诉你历史表现怎么样,策略是否具有价值一清二楚。历史不会重演,但历史一定会惊人的相似。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Backtrader量化平台教程(一):backtrader的整体框架
Backtrader量化平台教程(七)Optimizer
「手把手教你」入门量化回测最强神器backtrader(三)
使用Backtrader对股票历史数据进行指标回测
backtrader通用策略模板与”积木式“策略开发
Python 量化投资实战教程(2)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服