Tushare 数据获取

注册 Tushare 账号并获取 API Token(免费版本需注意调用频率限制)。安装库后通过以下代码获取股票日线数据:

import tushare as ts
pro = ts.pro_api('your_token')
df = pro.daily(ts_code='600519.SH', start_date='20200101', end_date='20231231')

数据字段包括开盘价、收盘价、成交量等,需检查缺失值并处理(如填充或删除)。

Backtrader 回测框架配置

安装 Backtrader 后创建策略类需继承 bt.Strategy,关键方法包括:

  • __init__:初始化指标(如移动平均线)。
  • next:定义买卖逻辑(例如突破20日均线买入)。
class MyStrategy(bt.Strategy):
    def __init__(self):
        self.sma = bt.indicators.SimpleMovingAverage(self.data.close, period=20)
    def next(self):
        if self.data.close[0] > self.sma[0]:
            self.buy(size=100)

数据加载与回测执行

将 Tushare 数据转换为 Backtrader 的 DataFeed 格式,需确保时间列为索引,列名符合规范(如 closevolume)。调用 Cerebro 引擎运行回测:

data = bt.feeds.PandasData(dataname=df, datetime='trade_date')
cerebro = bt.Cerebro()
cerebro.adddata(data)
cerebro.addstrategy(MyStrategy)
results = cerebro.run()

绩效分析

通过 cerebro.plot() 可视化资金曲线和交易信号,或调用 analyzers 计算夏普比率、最大回撤:

cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='sharpe')
results = cerebro.run()
print(results[0].analyzers.sharpe.get_analysis())

关键注意事项

  • 复权处理:Tushare 数据默认未复权,需调用 adj_factor 字段调整价格。
  • 滑点与手续费:通过 cerebro.broker.set_slippage_fixed()setcommission() 设置更真实的环境。
  • 多线程优化:使用 cerebro.optstrategy() 进行参数网格搜索,但需注意过拟合风险。
Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐