Skip to content

回测概述

jiuhuang提供便捷的回测功能,支持多策略并行回测和多进程计算。

jiuhuang策略计算是基于向量计算实现的, 所以在运行速度上会比基于事件的回测框架来的的快, 比如backtesing。

基本流程

from jiuhuang.data import JiuhuangData, DataTypes
from jiuhuang.strategy import *
from jiuhuang.backtest import backtest
from jiuhuang.dash import display_backtesting
import 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)

回测函数参数

参数类型必填默认值描述
strategiesDict[str, Strategy]-策略字典,键为策略名称,值为策略实例
hist_price_datapd.DataFrame-历史价格数据,包含日期、股票代码、开盘、收盘等价格信息
stock_infopd.DataFramepd.DataFrame()股票基本信息数据,包含股票代码、名称、市值等基本信息
rmpsDict[str, RiskManagementParams]{}风险管理系统参数字典,键为策略名称,值为风险管理参数
commission_ratefloat0.0002手续费率(佣金费率),默认万二(0.02%)
stamp_tax_ratefloat0.0005印花税率,默认万五(0.05%),卖出时收取
metric_decimalint2指标保留小数位数,默认2位
use_next_day_returnboolTrue是否使用次日收益率进行计算,默认True(用于避免未来函数问题)

风险管理参数

rmps 参数允许你为每个策略配置个性化的风险管理规则。

RiskManagementParams 参数说明

参数类型默认值描述
max_holding_daysintNone最大持仓天数,达到天数后强制卖出
stop_loss_pctfloatNone止损比例(decimal,如 0.1 表示跌幅 10% 时止损)
trailing_stop_pctfloatNone追踪止损比例(decimal,如 0.1 表示从最高点回落 10% 时止损)
max_consecutive_rising_daysintNone最大连续上涨天数,达到后强制卖出(用于止盈)
max_consecutive_falling_daysintNone最大连续下跌天数,达到后强制卖出

使用示例

from jiuhuang.backtest import backtest
from 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_pcttrailing_stop_pct 不能同时使用,否则会触发双重卖出

回测结果

回测完成后,返回两个数据:

  • trading_history: 交易历史(明细数据)
  • backtest_perf: 回测结果(总览数据)

回测仪表盘

回测仪表盘包含以下可视化内容:

图表描述
策略对比不同策略的收益对比曲线
策略分布策略收益分布直方图
交易历史所有交易的详细记录
策略排名按收益排序的策略列表
策略对比策略分布
策略对比策略分布
交易历史策略排名
交易历史策略排名