🚀 AI 一键生成 joinquant 策略代码

如何在 JoinQuant 中实现定时交易?(run_daily, run_weekly, run_monthly)

joinquant | 发布时间: 2025/11/25
以下内容由 EasyQuant 生成。

问题描述

如何让我的策略在每个交易日上午10点运行一次?

解决方案

在聚宽(JoinQuant)中,如果您希望策略在每个交易日的特定时间(例如上午10:00)运行一次,您需要在 initialize(context) 函数中使用 run_daily 函数来注册定时任务。

以下是具体的实现代码和说明:

实现代码

# -*- coding: utf-8 -*-
def initialize(context):
    # 设定基准,例如沪深300
    set_benchmark('000300.XSHG')
    # 开开启真实价格模式
    set_option('use_real_price', True)
    
    # 使用 run_daily 设置定时运行
    # 第一个参数是您要执行的函数名(不要加括号)
    # time参数设置为 '10:00'
    run_daily(my_trade_func, time='10:00')

def my_trade_func(context):
    # 这里编写您需要在每天10点执行的交易逻辑
    log.info("当前时间是: " + str(context.current_dt))
    print("策略在10点运行了")
    
    # 示例:获取当前持仓
    positions = context.portfolio.positions
    # 您的其他策略逻辑...

关键点说明

  1. 函数位置run_daily 必须在 initialize(context) 中调用。
  2. 参数说明
    • func:第一个参数是您自定义的函数名(如上例中的 my_trade_func),该函数必须接受 context 作为参数。
    • time:设置为字符串格式的时间,例如 '10:00'。支持24小时制。
  3. 运行机制:设置后,回测或模拟交易引擎会在每个交易日的 10:00:00 调用一次 my_trade_func 函数。
  4. 注意事项
    • 如果您使用了 run_daily 指定具体时间,建议不要同时在 handle_data 中写复杂的定时逻辑,以避免逻辑冲突或重复运行。
    • run_daily 指定的函数中,无法直接通过参数获取 data 对象,如果需要获取行情数据,请在函数内部使用 get_pricehistoryattribute_history 等API。