常见问题¶
为什么没有成交¶
先看 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],中文字体见安装说明。错误应保留并处理,不要靠覆盖旧报告或忽略缺数据来继续。