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

ptrade 平台 run_interval 设置2秒却3秒执行的原因及正确设置方法

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

问题描述

设置seconds参数为2秒时,实际执行间隔却是3秒,这是怎么回事?如何正确设置秒级定时任务?

/

解决方案

问题原因解答

在 ptrade 量化交易平台中,当您使用 run_interval 函数设置 seconds=2 时,实际执行间隔变为 3 秒,这是因为 ptrade 引擎对 run_interval 的最小时间间隔做了硬性限制

根据 ptrade API 文档的明确规定:

seconds设置最小时间间隔为3秒,小于3秒默认设定为3秒。

因此,任何小于 3 秒的设定(如 1 秒或 2 秒),系统都会自动将其强制转换为 3 秒执行一次。这是为了保护服务器性能,防止过高频的无效轮询导致系统资源耗尽。


如何正确设置秒级定时任务

如果您需要使用 run_interval 进行秒级周期处理,请确保 seconds 参数的值 大于或等于 3

正确的代码示例

def initialize(context):
    # 初始化股票池
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 正确设置:设置时间间隔为 3 秒(或以上)
    run_interval(context, interval_handle, seconds=3)

def interval_handle(context):
    # 每 3 秒执行一次的逻辑
    snapshot = get_snapshot(g.security)
    if snapshot:
        log.info("最新价: %s" % snapshot[g.security].get('last_px'))

def handle_data(context, data):
    pass

补充建议:高频策略的替代方案

如果您编写的是高频策略,极度依赖 Tick 级别的行情触发,除了 run_interval,您还可以使用 tick_data 事件函数。

  • tick_data(context, data):该函数专门用于处理 tick 级别策略的交易逻辑,同样是每隔 3 秒执行一次。它的优势在于入参 data 中直接包含了丰富的逐笔委托(order)、当前 tick 数据(tick)和逐笔成交(transcation)信息,非常适合做盘口分析和高频打单。

注意:无论是 run_interval 还是 tick_data,在 ptrade 平台上的最高执行频率目前均被限制为 3秒/次。请在设计策略逻辑时充分考虑这一频率上限。