3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在Ptrade回测环境中,出现这个警告是因为触发了回测引擎的流动性限制机制。
为了让回测结果更逼近真实的交易场景,Ptrade默认设置了成交比例限制(Volume Ratio)。默认情况下,这个比例是 0.25。这意味着:
在任何一个交易周期(如1分钟或1天)内,您的策略最大能成交的数量,不能超过该股票在真实历史中该周期总成交量的25%。
在您的例子中:
10600 股。4200 股(说明当时真实市场的总成交量大约是16800股)。10600 > 4200,系统为了模拟真实的流动性冲击,将您的撮合成交数量强制截断为 4200 股,并抛出了这个警告。差额部分(10600 - 4200 = 6400股)将不会继续挂单,直接作废。如果您希望在回测中顺利成交全部委托数量,可以通过在 initialize 函数中调用相关API来修改回测引擎的撮合规则。有以下两种主要方法:
set_volume_ratio)您可以使用 set_volume_ratio 函数将成交比例调大,例如设置为 1.0(即允许吃掉市场100%的成交量)。
def initialize(context):
g.security = '002652.SZ'
set_universe(g.security)
# 将最大成交数量设置为本周期可成交总量的100%
set_volume_ratio(volume_ratio=1.0)
def handle_data(context, data):
# 此时下单受到的流动性限制会大幅放宽
order(g.security, 10600)
set_limit_mode)对于月度调仓等低频策略,或者对流动性冲击不是很敏感的策略,您可以直接关闭成交数量限制。使用 set_limit_mode('UNLIMITED') 后,回测撮合时将不再受真实市场成交量的限制(实际撮合成交量甚至可以大于该时间段的实际成交总量)。
def initialize(context):
g.security = '002652.SZ'
set_universe(g.security)
# 回测中完全不限制成交数量
set_limit_mode('UNLIMITED')
def handle_data(context, data):
# 无论下多大的单,只要资金/持仓足够且价格合适,都会全部成交
order(g.security, 10600)
0.25 限制,或者根据策略资金体量合理设置 set_volume_ratio。如果经常触发此警告,说明策略的资金容量已经达到了该股票的流动性瓶颈,在实盘中强行下单会导致严重的滑点。set_limit_mode('UNLIMITED') 关闭限制。