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

JoinQuant 模拟环境下 run_daily 函数不运行怎么办?(全角冒号错误排查)

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

问题描述

写了一个rundaiy函数,但是不运行啊

模拟环境下,写了这个:
run_daily(after_market_open, time='15:30',reference_security='000300.XSHG')

本来希望模拟测试下,自动在3点半运行的;但是没有啊
什么地方错了啊?

解决方案

您好!导致您的 run_daily 函数在模拟环境下没有运行的核心原因在于时间字符串的格式错误

1. 核心错误:全角冒号

在您的代码中:

run_daily(after_market_open, time='15:30',reference_security='000300.XSHG')

time='15:30' 里面的冒号 中文全角冒号。Python 和 JoinQuant API 无法识别这种格式的时间字符串。您必须将其修改为英文半角冒号 :

正确的代码应为:

run_daily(after_market_open, time='15:30', reference_security='000300.XSHG')

2. 其他可能导致不运行的原因排查

如果修改为半角冒号后仍然不运行,请检查以下几点:

  • 模拟盘创建时间与执行时间的先后顺序
    如果您是在今天下午 15:30 之后(或者非常接近 15:30 的时候)创建并启动的模拟交易,那么今天的这个时间点已经过去了,引擎不会“补跑”今天的任务,它会在下一个交易日的 15:30 才会首次执行。
  • 函数是否正确定义
    请确保您在代码中正确定义了 after_market_open 这个函数,并且它接收 context 作为唯一参数。例如:
    def after_market_open(context):
        log.info("收盘后函数运行,当前时间:" + str(context.current_dt))
        # 您的逻辑代码
    
    (注:通常 15:30 运行的函数习惯命名为 after_market_closeafter_trading_end,不过函数名本身不影响运行,只要对应上即可。)
  • 是否在 initialize 中调用
    run_daily 必须在 initialize(context) 初始化函数中进行注册调用,否则引擎无法识别您的定时任务。

3. 完整的正确示例

def initialize(context):
    # 设定沪深300作为基准
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    
    # 注册定时运行函数,注意使用英文半角冒号
    run_daily(after_market_open, time='15:30', reference_security='000300.XSHG')

def after_market_open(context):
    # 这里的代码将在每个交易日的 15:30 执行
    log.info("定时任务执行成功,当前时间:%s" % context.current_dt)

总结:写代码时请务必注意中英文符号的切换,尤其是标点符号(引号、括号、冒号、逗号等)必须使用英文半角状态输入法。修改冒号后,您的策略应该就能在模拟盘中按时运行了。