常见问题

为什么没有成交

先看 result.orders 的 status、reason、remaining,再根据 order_id 查 fills。常见原因:数量不合法、无可卖量、现金不足、停牌、零量、触及价格边界、滑点超出 bar 高低或参与率不足。

最后一根 bar 的信号没有下一根执行机会。next_bar 只尝试一次;要在当日等待多次成交可用 day,要跨日维持仓位目标可用 target_positions/target_weights。

同一个 80% 仓位为什么没有每天调仓

相同权重与定量模式保持原股数目标。需要重新分配时,调用 ctx.target_weights(..., rebalance=True);默认按当前收盘定量,也可以指定 sizing="execution",按下一 bar 开盘估值定量。整手、费用和成交条件仍可能使实际权重偏离目标,见策略教程。

佣金和交易软件的结果不一样

在 Costs 中明确佣金比例和最低佣金,并检查是否重复计入印花税、过户费。DoriBT 以订单累计成交额计算最低佣金,费用按分舍入;分日生成的目标子单各自计算。默认值不是券商报价。

能直接输入前复权数据吗

记账需要原始价;前复权仅用于策略研究视图。公司行动和时点因子分别输入,见数据参考。不能把包含分红效果的复权价格和账户现金分红重复计算。

分钟回测为什么没有年化指标

stats() 不猜年化频率。通常使用 report() 按日末汇总,默认 252 个交易日/年;如需逐 bar 年化,应为 stats(periods_per_year=...) 提供与你的数据相符的周期数。

为什么 Numba 没有更快

首次调用要编译;频繁的 Python 回调、密集订单和结果构建也有开销。预计算目标的稳定区间更适合分段扫描。应分别比较首次调用与预热运行,详见执行与性能。

如何选取回测时间和基准

先在数据准备阶段选取所需行情、完整日历、规则与相关公司行动,构造 MarketData。基准通过 Benchmark 传给分析接口。开始前需要指标预热时,把预热数据纳入输入,并在策略中明确何时开始下单;报告仍覆盖完整输入期。

是否兼容聚宽、Ptrade、QMT 或 Backtrader

当前使用 DoriBT 自己的函数策略和数据契约,没有直接运行这些平台策略的适配器。迁移时需要转换数据、参数、生命周期与下单语义;不能仅替换函数名字。

导出失败或中文图表缺字

导出目标必须不存在且父目录存在;可换一个新目录。图表需安装 doribt[plot],中文字体见安装说明。错误应保留并处理,不要靠覆盖旧报告或忽略缺数据来继续。