运行配置与策略参数¶
运行配置决定账户和成交假设;策略参数决定研究逻辑。两者分别保存到 result.run_info。
运行配置¶
from doribt import BarExecution, Costs, FixedTicks, RunConfig
config = RunConfig(
initial_cash=300_000,
costs=Costs(commission=0.0001, minimum_commission=0),
execution=BarExecution(participation=0.1, slippage=FixedTicks(1)),
backend="python",
)
将它传入 Backtest(data, config=config)。佣金比例为小数,0.0001 表示万一,最低佣金以元计且允许为零。印花税、过户费按市场历史规则输入,避免把券商打包费率重复计费。
JSON 字段 |
默认值 |
单位或含义 |
|---|---|---|
|
100000 |
人民币元,必须为正 |
|
0.0003 |
双向佣金比例 |
|
5 |
单订单累计最低佣金,元 |
|
0.05 |
每证券每 bar 最大成交比例 |
|
ticks |
ticks/bps/volume_impact |
|
0 |
档位/基点/冲击系数 |
|
strict |
strict 拒绝越界/cap 截到行情边界/cost 保留完整成本 |
|
python |
python/numba |
config.to_dict() 可保存 JSON;RunConfig.from_dict(values) 校验并重建配置。
RunConfig.schema().to_dict() 提供类型、默认值、范围和单位,可用于客户端表单。开始/结束时间、证券及周期属于已准备的 MarketData,基准属于结果分析。
声明策略参数¶
PARAMETERS = ParameterSet(
{
"fast": Parameter(
type="int", default=5, minimum=2, maximum=50, step=1, label="短均线", unit="bars"
),
"slow": Parameter(
type="int", default=20, minimum=5, maximum=200, step=1, label="长均线", unit="bars"
),
"allocation": Parameter(
type="float",
default=0.95,
minimum=0,
maximum=1,
step=0.05,
label="目标仓位",
unit="ratio",
),
}
)
def moving_average(ctx: Context, *, fast: int, slow: int, allocation: float) -> None:
if not 1 <= fast < slow:
raise ValueError("均线窗口必须满足 1 <= fast < slow")
closes = ctx.history("ALPHA", bars=slow)
if len(closes) < slow:
return
weight = allocation if closes[-fast:].mean() > closes.mean() else 0
ctx.record(fast=float(closes[-fast:].mean()), slow=float(closes.mean()), target_weight=weight)
ctx.target_weights({"ALPHA": weight})
调用 Backtest(data, config=config).run(moving_average, parameter_schema=PARAMETERS, parameters={"fast": 5})。未填写值使用声明的默认值,参数作为关键字传给策略;未知键、错误类型、越界或步长不符在首次回调前失败。fast < slow 等跨字段关系由策略检查。
声明支持 int/float/str/bool;步长从 minimum(未指定则 0)起算。不使用声明时,也可通过 parameters 传递 JSON 对象和列表。
对比多个参数¶
显式循环调用同一个 Backtest.run 即可,行情准备可复用,每次账户独立。不要复用带有未重置内部状态的策略对象。参数优化器、并行搜索和滚动验证尚未内置。
完整可运行案例见研究与报告示例。