3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant 平台中,滑点(Slippage)的机制是双边对称且针对每一笔独立交易(买入或卖出)生效的,而不是针对“开仓”或“平仓”这个完整的交易周期来分配的。
针对您的疑问,以下是 JoinQuant 滑点机制的详细解析:
在 JoinQuant 中,无论您使用的是固定滑点(FixedSlippage)、百分比滑点(PriceRelatedSlippage)还是跳数滑点(StepRelatedSlippage),滑点都是双边计算的。具体来说:
当您“开仓使用限价单,平仓使用市价单”时,滑点的表现形式会有所不同,这也是导致您感觉“滑点有时加在开仓,有时加在平仓”的原因:
市价单在未启用盘口撮合时,会直接按 最新价 ± 滑点 进行撮合。因此,市价单的成交价一定会直接受到滑点的影响。
限价单的撮合分为两个阶段,滑点的影响也分为两种情况:
最新价 ± 滑点 撮合。如果您的委托价满足条件(例如买入时,委托价 >= 最新价 + 滑点),订单会立即成交,此时的成交价为 最新价 + 滑点。这种情况下,滑点直接影响了成交价。委托价 > Bar的最低价),订单就会成交,且成交价为您设定的“委托价”。这种情况下,滑点确实只影响了下单时的即时撮合是否成功,而不影响最终的挂单成交价。正如上面限价单的逻辑所述:
实际上,系统对每一笔交易都一视同仁地计算了滑点,只是限价单的挂单成交机制掩盖了滑点在价格上的体现。
您建议在 set_slippage 中增加参数来控制滑点仅加在开仓或平仓一侧,这是一个非常精细化的回测需求。目前 JoinQuant 的 API 原生不支持单边滑点设置(滑点模型默认都是双边对称的)。
目前的替代解决方案:
如果您希望在回测中严格控制滑点仅在某一侧生效,可以将全局滑点设置为 0(set_slippage(FixedSlippage(0))),然后在策略代码中手动调整委托价来模拟单边滑点:
当前价 ± 您期望的滑点,以确保成交价符合您的单边滑点预期。希望这个解释能帮助您理清 JoinQuant 的滑点撮合逻辑!