🚀 AI 一键生成 ptrade 策略代码

如何解决ptrade回测中“委托数量超过当前周期可成交数量”的警告?

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

问题描述

回测时下单提示,WARNING - 后端服务 当前策略成交比例设置为:0.25,委托数量xxx超过当前周期可成交数量,撮合成交数量调整为xxx。

/

解决方案

警告原因分析

在 ptrade 量化平台进行回测时,为了使回测结果更逼近真实的交易场景,系统默认设置了成交比例限制(volume_ratio)。默认情况下,这个比例是 0.25

这意味着,在您策略运行的当前周期(例如某一天或某一分钟)内,您的单笔委托最大成交数量不能超过该周期市场实际可成交总量的四分之一(25%)。

当您的委托下单数量大于按此比例计算出的数量时,系统会按比例计算后的数量进行撮合成交,差额部分的委托数量不会继续挂单,同时系统会抛出您看到的这条警告信息:
WARNING - 后端服务 当前策略成交比例设置为:0.25,委托数量xxx超过当前周期可成交数量,撮合成交数量调整为xxx。

解决方案

如果您希望在回测中调整或取消这个限制,可以通过在 initialize 函数中调用特定的 API 来实现。

方法一:调整成交比例 (set_volume_ratio)

您可以使用 set_volume_ratio 函数来修改默认的成交比例。例如,如果您希望允许成交量达到市场总量的 50%,或者完全等于市场总量(1.0),可以这样设置:

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 将最大成交数量设置为本周期可成交总量的 50%
    set_volume_ratio(volume_ratio=0.5)
    
    # 或者设置为 1.0,即不超过市场总成交量
    # set_volume_ratio(volume_ratio=1.0)

def handle_data(context, data):
    pass

方法二:取消成交数量限制 (set_limit_mode)

对于一些低频策略(如月度调仓),对流动性冲击不是很敏感,您可以直接取消成交数量的限制。使用 set_limit_mode('UNLIMITED') 后,实际撮合成交量甚至可以大于该时间段的市场实际成交总量。

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 回测中不限制成交数量
    set_limit_mode('UNLIMITED')

def handle_data(context, data):
    pass

总结建议

  • 高频/短线策略:建议保留一定的成交比例限制(如默认的 0.25 或更低),以评估流动性对策略真实收益的影响。
  • 低频/长线策略:如果资金量不大,或者调仓频率极低,可以使用 set_limit_mode('UNLIMITED') 来简化回测过程,避免因成交量限制导致调仓失败。