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

ptrade 平台 run_interval 报错“参数类型不匹配”怎么解决?

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

问题描述

自定义的周期处理函数运行时报错,提示参数类型不匹配,run_interval的func参数应该如何正确定义?

/

解决方案

在 ptrade 量化交易平台中,使用 run_interval 接口设置定时周期任务时,如果遇到“参数类型不匹配”的报错,通常是因为自定义函数的参数列表定义不正确

问题原因

根据 ptrade API 文档,run_intervalfunc 参数要求传入一个自定义函数,该函数必须且只能以 context 作为唯一参数(类型为 Callable[[Context], None])。

很多开发者会习惯性地像定义 handle_data(context, data)before_trading_start(context, data) 一样,给自定义函数加上了 data 参数,或者完全没有参数,这就会导致引擎在回调该函数时传入参数数量不匹配,从而引发报错。

正确的定义方法

自定义函数应该只接收 context 一个参数。正确格式如下:

def my_custom_func(context):
    # 在这里编写你的周期处理逻辑
    pass

完整代码示例

以下是一个使用 run_interval 的标准策略结构示例:

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 正确调用 run_interval,每 10 秒执行一次 interval_handle 函数
    run_interval(context, interval_handle, seconds=10)

# 正确定义 func:只接收 context 参数
def interval_handle(context):
    # 获取实时行情快照
    snapshot = get_snapshot(g.security)
    if snapshot:
        log.info("当前最新价: %s" % snapshot[g.security]['last_px'])

def handle_data(context, data):
    pass

常见错误写法(请避免)

错误写法 1:多加了 data 参数

# 错误:run_interval 的回调函数不需要 data 参数
def interval_handle(context, data): 
    pass

错误写法 2:没有参数

# 错误:缺少 context 参数
def interval_handle(): 
    pass

注意事项

  1. 调用位置run_interval 只能在 initialize 函数中调用。
  2. 时间间隔限制seconds 参数设置的最小时间间隔为 3 秒,如果设置小于 3 秒,系统会默认按 3 秒执行。
  3. 多线程并发:如果多次设定 run_interval,它们会以多线程并行运行,请务必小心处理不同线程之间全局变量(如 g 对象)的读写冲突问题。