3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant (聚宽) 量化平台中,关于 order_target_value 的成交价格以及回测中成交价与实际行情价格不一致的问题,主要与撮合机制和**滑点(Slippage)**有关。
order_target_value 使用的是什么价格?order_target_value(以及其他的 order 系列函数)在默认情况下下的是市价单。根据聚宽的撮合规则,市价单的成交价格计算公式为:
成交价格 = 最新价 ± 滑点
您在回测中观察到 159513 在 15:00 的成交价(1.286)既不是当时的收盘价也不是开盘价,根本原因是系统默认加入了滑点。
在真实的交易市场中,由于市场波动和交易延迟,您的委托价格往往不能以理想的盘口价格成交。为了让回测更贴近真实市场,聚宽系统默认开启了滑点机制。
initialize 函数中没有显式调用 set_slippage 函数,系统默认的滑点是 PriceRelatedSlippage(0.00246),即双边各千分之 2.46 的百分比滑点。如果您希望回测的成交价严格等于行情价格(不推荐,因为这会高估策略收益),或者希望自定义滑点大小,可以在 initialize 函数中使用 set_slippage 进行设置:
def initialize(context):
# 关闭滑点(设置为固定滑点 0)
set_slippage(FixedSlippage(0))
# 或者设置为更小的固定滑点,例如 0.01 元
# set_slippage(FixedSlippage(0.01))
# 或者修改百分比滑点,例如千分之一
# set_slippage(PriceRelatedSlippage(0.001))
总结:您看到的异常成交价是由于系统默认的滑点机制造成的。order_target_value 默认以市价单成交,成交价等于当时的最新价加上或减去滑点。