回测概述
jiuhuang提供便捷的回测功能,支持多策略并行回测和多进程计算。
jiuhuang策略计算是基于向量计算实现的, 所以在运行速度上会比基于事件的回测框架来的的快, 比如backtesing。
基本流程
from jiuhuang.data import JiuhuangData, DataTypesfrom jiuhuang.strategy import *from jiuhuang.backtest import backtestfrom jiuhuang.dash import display_backtestingimport warnings
warnings.filterwarnings("ignore")
jh = JiuhuangData()
# 1. 定义策略strategies = { "海龟": StrategyTurtle(entry_window=20, exit_window=10), "移动均线交叉": StrategyMovingAverageCrossover(12, 24), "买入持有": StrategyBuyAndHold(),}
# 2. 获取数据symbols = ["000001", "600036", "600519", "000858", "601318", "000002"]stock_price = jh.get_data( DataTypes.STOCK_ZH_A_HIST_QFQ, start="2024-12-25", end="2026-03-11", symbol=",".join(symbols),)stock_info = jh.get_data(DataTypes.STOCK_INDIVIDUAL_INFO_EM)
# 3. 执行回测trading_history, backtest_perf = backtest( strategies, stock_price, stock_info,)
# 4. 展示回测仪表盘display_backtesting(trading_history, backtest_perf)回测函数参数
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
strategies | Dict[str, Strategy] | 是 | - | 策略字典,键为策略名称,值为策略实例 |
hist_price_data | pd.DataFrame | 是 | - | 历史价格数据,包含日期、股票代码、开盘、收盘等价格信息 |
stock_info | pd.DataFrame | 否 | pd.DataFrame() | 股票基本信息数据,包含股票代码、名称、市值等基本信息 |
rmps | Dict[str, RiskManagementParams] | 否 | {} | 风险管理系统参数字典,键为策略名称,值为风险管理参数 |
commission_rate | float | 否 | 0.0002 | 手续费率(佣金费率),默认万二(0.02%) |
stamp_tax_rate | float | 否 | 0.0005 | 印花税率,默认万五(0.05%),卖出时收取 |
metric_decimal | int | 否 | 2 | 指标保留小数位数,默认2位 |
use_next_day_return | bool | 否 | True | 是否使用次日收益率进行计算,默认True(用于避免未来函数问题) |
风险管理参数
rmps 参数允许你为每个策略配置个性化的风险管理规则。
RiskManagementParams 参数说明
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
max_holding_days | int | None | 最大持仓天数,达到天数后强制卖出 |
stop_loss_pct | float | None | 止损比例(decimal,如 0.1 表示跌幅 10% 时止损) |
trailing_stop_pct | float | None | 追踪止损比例(decimal,如 0.1 表示从最高点回落 10% 时止损) |
max_consecutive_rising_days | int | None | 最大连续上涨天数,达到后强制卖出(用于止盈) |
max_consecutive_falling_days | int | None | 最大连续下跌天数,达到后强制卖出 |
使用示例
from jiuhuang.backtest import backtestfrom jiuhuang.risk_management import RiskManagementParams
# 为不同策略配置不同的风险管理规则rmps = { "海龟": RiskManagementParams( max_holding_days=20, # 最大持仓 20 天 stop_loss_pct=0.05, # 止损 5% trailing_stop_pct=0.08, # 追踪止损 8% ), "移动均线交叉": RiskManagementParams( max_holding_days=10, # 最大持仓 10 天 max_consecutive_rising_days=5, # 连续上涨 5 天后卖出 ), # 未配置的策略将使用默认参数(不启用风控)}
# 执行回测时传入风险管理参数trading_history, backtest_perf = backtest( strategies, stock_price, stock_info, rmps=rmps, # 传入风险管理参数字典)注意:
- 未在
rmps中配置的策略将不启用风险管理- 风险管理在
build_position函数中生效,会对买入信号和卖出信号进行二次过滤stop_loss_pct和trailing_stop_pct不能同时使用,否则会触发双重卖出
回测结果
回测完成后,返回两个数据:
- trading_history: 交易历史(明细数据)
- backtest_perf: 回测结果(总览数据)
回测仪表盘
回测仪表盘包含以下可视化内容:
| 图表 | 描述 |
|---|---|
| 策略对比 | 不同策略的收益对比曲线 |
| 策略分布 | 策略收益分布直方图 |
| 交易历史 | 所有交易的详细记录 |
| 策略排名 | 按收益排序的策略列表 |
| 策略对比 | 策略分布 |
|---|---|
![]() | ![]() |
| 交易历史 | 策略排名 |
|---|---|
![]() | ![]() |



