Skip to content

回测 - 快速开始

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_frame
from 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_codesymbol
trade_datedate
volvolume

费用设置

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,
)

下一步