(量化) 用 Tushare 包实现一个简单的回测框架

【Reference】
1. B站:清华计算机博士带你学-Python金融量化分析
2. Tushare 官网(作者ID:492952)

本博客所包含的项目代码基本参考Reference1,并对其中tushare API的更新做了对应的修改。全部代码已上传至作者的 github,下文中仅针对代码思路做一个知识梳理

1. 回测需求 & 效果展示

以中国平安(601318.SH)为买卖对象,检验双均线策略在 2020-05-10 至 2021-01-01 的收益情况。效果如下:
请添加图片描述

2. 代码框架

2.1 对象

(1) 存储账户信息、回测信息

账户信息:现金,所持股票

回测信息:

  1. 开始/结束日期
  2. 当前日期
  3. 基准:一般会以一只股票或一个指数为基准,用于比较策略优劣性
  4. 开始至结束之间所有交易日的信息
class Context:
    def __init__(self, cash, start_date, end_date):
        # 账户信息
        self.cash = cash    # 现金
        self.positions = {
   } # 持有的股票信息
        # 回测信息
        self.start_date = start_date
        self.end_date = end_date
        self.dt = start_date
        self.benchmark = None
        self.date_range = trade_cal[(trade_cal['is_open'] == '1') & \
                                    (trade_cal['cal_date'] >= start_date) & \
                                    (trade_cal['cal_date'] <= end_date)]['cal_date'].values

其中,trade_cal 存储了所有交易日的日期信息。可通过 tushare 包的 pro.trade_cal() 获取

(2) 存储其他全局变量

class G
量化交易的核心环节之一,通过历史数据来模拟交易策略,评估策略的优劣性。在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、付费专栏及课程。

余额充值