3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 回测引擎中,您遇到的现象是由于回测系统的成交比例限制机制引起的。
从您的日志报错信息 WARNING Order Cancelled: market order 515120.XSHG volume 40000 is larger than 25.0 percent of current bar volume, fill 4800.0 actually 可以看出:
volume_ratio=0.25)。这就是为什么您发现委托数量和实际成交量对不上,且撮合结果与预期不一致的原因。
要解决这个问题,您可以通过在策略的 initialize 函数中调用特定的 API 来调整或关闭这个限制。
如果您希望放宽限制,但仍保留一定的流动性模拟,可以使用 set_volume_ratio 函数调大成交比例。例如,将其设置为 1.0(即允许成交量达到当前 Bar 的 100%)。
def initialize(context):
g.security = '515120.SS'
set_universe(g.security)
# 将最大成交数量设置为本周期可成交总量的 100%
set_volume_ratio(volume_ratio=1.0)
对于低频策略(如月度调仓)或对流动性冲击不敏感的策略,您可以直接关闭成交量限制。使用 set_limit_mode 函数并传入 'UNLIMITED'。
注意:关闭限制后,实际撮合成交量可能会大于该时间段市场的实际成交总量。
def initialize(context):
g.security = '515120.SS'
set_universe(g.security)
# 回测中不限制成交数量
set_limit_mode('UNLIMITED')
在进行 ptrade 回测时,为了让回测结果更贴近真实交易,系统默认引入了滑点(Slippage)和成交比例限制(Volume Ratio)。如果您在测试大资金或流动性较差的标的时遇到成交不足的问题,请务必检查并根据策略需求合理配置 set_volume_ratio 和 set_limit_mode。