如何使用Tushare+ Backtrader进行股票量化策略回测

 

数量技术宅团队在CSDN学院推出了量化投资系列课程

欢迎有兴趣系统学习量化投资的同学,点击下方链接报名:

量化投资速成营(入门课程)

Python股票量化投资

Python期货量化投资

Python数字货币量化投资

C++语言CTP期货交易系统开发

数字货币JavaScript语言量化交易系统开发


典型股票量化回测流程

典型的股票量化策略回测流程包括以下几个步骤:

  1. 数据获取:首先需要获取所需的股票市场数据,包括股票价格、交易量、财务数据等。这些数据可以从金融数据供应商、交易所、财经网站或者专门的数据提供商处获取。

  2. 数据预处理:对获取到的数据进行预处理和清洗,以确保数据的质量和一致性。这包括去除异常值、处理缺失数据、调整股票价格(如复权处理)等。

  3. 策略开发:根据具体的量化策略目标,设计和开发相应的交易策略。这可能涉及技术指标的计算、信号生成规则的制定、风险管理规则的定义等。

  4. 回测执行:使用历史数据执行所开发的策略。按照时间顺序,逐个周期模拟交易决策,并记录每次交易的执行价格、成交量、手续费等信息。

  5. 绩效评估:根据回测结果评估策略的绩效表现。常见的评估指标包括累计收益、年化收益率、最大回撤、夏普比率等。此外,还可以进行风险敞口、交易频率等方面的分析。

如何使用Tushare获取股票数据

上述流程中,1、2我们可以使用Tushare配合Pandas库来进行,而3、4、5步骤可以使用Backtrader库来完成。接下来,我们就来介绍Tushare和Backtrader在量化回测中的使用。

Tushare是一个基于Python语言的开源金融数据接口包,提供了丰富的股票、期货、基金等金融数据获取功能。Tushare为金融从业者和开发者提供了方便快捷的数据获取和处理工具,帮助他们进行金融数据分析和量化策略开发。

要安装和使用Tushare,我们需要按照以下步骤进行操作:

1. 安装Python:首先,确保你的计算机上已经安装了Python。Tushare支持Python 3.x版本。

2. 安装Tushare包:打开命令行终端(Windows用户可以使用命令提示符或PowerShell),输入以下命令安装Tushare包:

pip install tushare

这将自动从Python包索引(PyPI)下载并安装Tushare包及其依赖项。

3. 获取Tushare的Token:在使用Tushare之前,你需要在Tushare官网(https://tushare.pro)注册一个账号,并获取API令牌(Token)。登录后,在用户中心页面可以找到你的Token。

4. 使用Tushare:在Python中引入Tushare包,并使用你的Token进行初始化。以下是一个简单的示例代码:

import tushare as ts

# 初始化Tushare,替换YOUR_TOKEN为你的Token
ts.set_token('YOUR_TOKEN')

# 创建Tushare接口对象
pro = ts.pro_api()

# 调用Tushare接口函数,获取股票行情数据
data = pro.daily(ts_code='000001.SZ', start_date='20220101', end_date='20220131')

# 打印获取的数据
print(data)

在上面的示例中,首先使用set_token函数设置你的Token,然后使用pro_api函数创建Tushare接口对象。接下来,可以使用各种Tushare接口函数(如daily)获取不同类型的金融数据。

请根据Tushare的文档(https://tushare.pro/document/2)和API参考(https://tushare.pro/document/1)查看更多的接口函数和详细用法。

需要注意,上述示例中的Tushare Pro的接口需要付费订阅才能访问高级数据。如果你想省去注册和付费的麻烦,而且只取有限的简单数据做个尝试,可以使用Tushare的免费接口。免费接口的示例代码更简单


import tushare as ts
# 获取沪深300指数从2014年1月1日到最新的行情数据
hs300 = ts.get_k_data('hs300', start='2014-01-01')

由此,我们就获取到了免费版本的沪深300指数从2014年1月1日到最新的日K线数据:

如何对数据进行可视化

在获取到沪深300的历史K线数据后,我们如果想初步计算一些技术指标,并把技术指标和历史行情展现出来,给我们下一步进行策略开发提供一些思路,应该如何实现?

对于数据可视化,有两种实现方式,一种是采用Python自带的plt库,另一种是专门处理显示K线数据的三方库:mplfinance。我们先来看第一种实现方式:

首先我们定义一个RSI函数,并输入刚才获取到的沪深300指数数据,然后,再调用plt库的相关方法,将RSI指标和历史价格,共同显示在一张图上。

# 将RSI值添加到hs300数据中
hs300['RSI'] = RSI(hs300)

# 画图
plt.figure(figsize=(12,6))
plt.plot(hs300['date'], hs300['close'], label='Close') # 画出收盘价曲线
plt.legend(loc='upper left')
plt.twinx()
plt.plot(hs300['date'], hs300['RSI'], 'r', label='RSI') # 画出RSI曲线
plt.legend(loc='upper right')
plt.show()

另一种方式,我们也可以使用mplfinance库,绘制出获取到沪深300的历史K线数据的K线量价图。这里,我们留下同时绘制RSI指标的问题,给读者思考和练习。

import mplfinance as mpf

hs300 = hs300.set_index('date')
hs300.index = pd.to_datetime(hs300.index)
mpf.plot(hs300, type='candle', volume=True, mav=(5,10,20), figratio=(12,6), title='HS300 Candlestick Chart')

如何使用BackTrader进行回测

Backtrader是一个功能强大的Python量化交易框架,用于开发、回测和执行交易策略。它提供了广泛的功能和工具,使得量化交易策略的开发和测试变得更加简单和高效。

Backtrader的一些主要特点和功能:

  1. 灵活的策略开发:Backtrader提供了简洁而灵活的API,使得策略的开发变得方便。你可以通过继承和扩展Backtrader的基础类来创建自定义的交易策略,并在其中定义买入、卖出信号和风险管理规则等。

  2. 多种交易工具支持:Backtrader支持多种交易工具,包括股票、期货、外汇等。你可以使用Backtrader来开发各种市场的交易策略。

  3. 多样化的交易指标和分析工具:Backtrader内置了大量的交易指标和分析工具,如移动平均线、布林带、相对强弱指标(RSI)、夏普比率等。这些工具可以帮助你分析市场趋势、计算策略绩效等。

  4. 灵活的数据回测:Backtrader提供了丰富的回测功能,可以使用历史数据对策略进行测试和优化。你可以使用不同的时间周期和数据频率进行回测,模拟真实的交易环境。同时,Backtrader还支持多线程回测,加快回测速度。

具体到Backtrader的使用,我们还是以获取到的沪深300指数历史数据、和RSI指标一起,构建量化策略的回测。首先,需要做的是把获取到的K线数据,转换成Backtrader的回测数据格式。

# Get data from tushare
df = ts.get_k_data('hs300', start='2014-01-01')
df['date'] = pd.to_datetime(df['date'])  # 将日期转换为datetime格式
df = df.set_index('date', drop=True)  # 将日期设置为索引
data = bt.feeds.PandasData(dataname=df, datetime=None,
                           open=0, high=1, low=2, close=3, volume=4, openinterest=-1)  # 创建数据源

第二步,我们构建一个RSI策略的回测函数,在这个回测函数中,我们先计算RSI指标14周期的数值,并以RSI<30作为买入信号,RSI>70作为卖出信号。

# Define the strategy
class RSI(bt.Strategy):
    params = (('rsi_period', 14),)

    def __init__(self):
        self.rsi = bt.indicators.RSI(period=self.params.rsi_period)

    def next(self):
        if not self.position:
            if self.rsi < 30:
                self.buy(size=1)
        else:
            if self.rsi > 70:
                self.sell(size=1)

第三步,调用BackTrader库相关方法,添加回测数据、设置初始资金和手续费、输出初始资金,运行策略,后输出最终资金并绘制图表。

cerebro = bt.Cerebro()
cerebro.adddata(data)  # 添加数据源
cerebro.addstrategy(RSI)
cerebro.broker.setcash(1000000.0)  # 设置初始资金
cerebro.broker.setcommission(commission=0.001)  # 设置佣金
print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())  # 输出初始资金
cerebro.run()  # 运行策略
print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())  # 输出最终资金
cerebro.plot()  # 绘制图表

通过上述三步,我们就完成了数据BackTrader格式的预处理、构建策略信号逻辑函数、以及运行BackTrader回测和展示回测结果,一起来看BackTrader展示的回测结果吧。

可以看到,BackTrader所展示的回测结果很丰富,包括了历史量价和RSI指标的展示、买卖点的标记、资金曲线、回撤线以及NetValue的数值。

综上,我们就完成了从数据获取、到数据可视化、再到策略回测的整个构建过程,感兴趣的朋友,可以把示例中Tushare获取的数据替换成其他标的历史数据,也可也修改RSI策略模块逻辑,构建自己的量化交易策略。总之,本文提供的是一个通用的回测框架,更多的玩法留给我们的读者。

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
回测量化交易的核心环节之一,通过历史数据来模拟交易策略,评估策略的优劣性。在Python中,可以使用tushare和backtrader库来实现回测。以下是一个简单的回测代码示例,使用的是tushare作为数据源,backtrader作为回测框架。 ```python import backtrader as bt import tushare as ts # 设置tushare的token,用于获取数据 ts.set_token('your_token') # 初始化tushare接口 pro = ts.pro_api() # 获取股票数据 data = pro.daily(ts_code='000001.SH', start_date='20200101', end_date='20210101') data = data.sort_values('trade_date') # 定义策略 class SampleStrategy(bt.Strategy): def __init__(self): self.sma = bt.indicators.SimpleMovingAverage(self.data.close, period=5) def next(self): if self.data.close[0] > self.sma[0]: self.buy() elif self.data.close[0] < self.sma[0]: self.sell() # 初始化cerebro回测系统 cerebro = bt.Cerebro() # 加载数据 data = bt.feeds.PandasData(dataname=data) cerebro.adddata(data) # 添加策略 cerebro.addstrategy(SampleStrategy) # 设置初始资金10000元 cerebro.broker.setcash(10000.0) # 设置手续费为万分之二 cerebro.broker.setcommission(commission=0.0002) # 运行回测 cerebro.run() # 打印结果 print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue()) ``` 在上面的代码中,我们使用tushare接口获取上证指数的日线数据。接下来,我们定义了一个简单的策略,如果收盘价大于5日均线就买入,反之就卖出。然后,我们初始化了cerebro回测系统,加载数据,添加策略,并设置了初始资金和手续费。最后,我们运行回测并打印结果。 需要注意的是,这只是一个简单的示例,实际的策略可能会更加复杂。此外,在实际使用中,还需要考虑数据的预处理、策略的优化等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数量技术宅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值