🚀 AI 一键生成 ptrade 策略代码
立即体验
👉 AI 生成代码 👈

Ptrade回测报错“当前策略成交比例设置为0.25,委托数量超过当前周期可成交数量”怎么办?

ptrade | 发布时间: 2026/5/29
以下内容由 EasyQuant 生成。

问题描述

Ptrade在回测下单时报错“当前策略成交比例设置为0.25,委托数量超过当前周期可成交数量,撮合成交数量调整为xxx”

Ptrade回测环境,下委托单买入10600股002652.SZ,返回如下警告信息,请问这是怎么回事?
2025-06-24 10:00:00 - WARNING - 后端服务 当前策略成交比例设置为:0.25,委托数量10600超过当前周期可成交数量,撮合成交数量调整为4200

解决方案

问题原因分析

在Ptrade回测环境中,出现这个警告是因为触发了回测引擎的流动性限制机制

为了让回测结果更逼近真实的交易场景,Ptrade默认设置了成交比例限制(Volume Ratio)。默认情况下,这个比例是 0.25。这意味着:

在任何一个交易周期(如1分钟或1天)内,您的策略最大能成交的数量,不能超过该股票在真实历史中该周期总成交量的25%。

在您的例子中:

  1. 您尝试买入 10600 股。
  2. 系统计算出该股票在当前周期的真实历史成交量的25%只有 4200 股(说明当时真实市场的总成交量大约是16800股)。
  3. 因为 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') 关闭限制。