回测 - 快速开始
jh_quant.backtest 的核心逻辑不关心数据来源。进入 backtest() 前,价格数据需要先转换为统一 schema:
symbol, date, open, high, low, close, volume推荐优先使用 TuShare 前复权日线 DataTypes.TS_DAILY_QFQ,再通过 to_backtest_price_frame() 转换。
基本流程
from jh_quant.data import JHData, DataTypes, to_backtest_price_framefrom jh_quant.backtest import ( backtest, StrategyTurtle, StrategyVolumeTrend, StrategyBuyAndHold,)from jh_quant.dashboard import display_backtesting
jhd = JHData()symbols = [ "600135.SH", "000001.SZ", "600036.SH", "600519.SH", "000858.SZ", "601318.SH", "000002.SZ", "600030.SH", "600887.SH", "000333.SZ", "002415.SZ",]
stock_price = jhd.get_data( DataTypes.TS_DAILY_QFQ, ts_code=",".join(symbols), start="2024-12-25", end="2026-03-11",)stock_price = to_backtest_price_frame(stock_price)
strategies = { "海龟": StrategyTurtle(), "放量趋势": StrategyVolumeTrend(), "买入持有": StrategyBuyAndHold(),}
trading_history, backtest_perf = backtest( strategies=strategies, price_data=stock_price,)
display_backtesting(trading_history, backtest_perf)字段转换
to_backtest_price_frame() 会把 TuShare 字段转换为回测 schema:
| TuShare 字段 | 回测字段 |
|---|---|
ts_code | symbol |
trade_date | date |
vol | volume |
费用设置
trading_history, backtest_perf = backtest( strategies=strategies, price_data=stock_price, commission_rate=0.0003, stamp_tax_rate=0.001,)信号应用时点
默认 use_next_day_return=True,表示当日信号在次日收益上体现,避免使用未来信息:
trading_history, _ = backtest( strategies=strategies, price_data=stock_price, use_next_day_return=True,)如果你的信号已经在外部做了滞后处理,可以显式关闭:
trading_history, _ = backtest( strategies=strategies, price_data=stock_price, use_next_day_return=False,)