3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)量化交易平台中,run_daily 是最常用的策略定时运行函数。许多开发者习惯将其 time 参数设置为固定的时间点(例如 '09:30'),但实际上 time 参数支持三种灵活且高级的设置方式,以满足不同资产类别和回测频率的需求。
你可以将 time 参数设置为 24 小时制内的任意具体时间,如字符串 'HH:MM'(在 tick 级策略中可精确到秒,如 'HH:MM:SS')。
'14:50' 会在 14:50:00 执行)。def initialize(context):
# 每天 09:30 开盘时运行
run_daily(market_open, time='09:30')
# 每天 14:50 尾盘调仓
run_daily(close_market, time='14:50')
def market_open(context):
log.info("开盘运行")
def close_market(context):
log.info("尾盘调仓")
注意:当
time指定为具体时间时,请勿同时设置reference_security参数。
'every_bar'(随 Bar 频率运行)将 time 设置为 'every_bar',函数的运行频率将完全与你在回测页面右上角设置的回测频率保持一致。
def initialize(context):
# 设定按 Bar 运行(配合分钟回测即每分钟运行)
run_daily(check_signals, time='every_bar')
def check_signals(context):
# 获取上一分钟收盘价
close_data = attribute_history(g.security, 5, '1m', ['close'])
# 策略逻辑...
注意:
every_bar只能在run_daily中调用,且 Tick 级别策略不支持设置为'every_bar'。
'open+5m' 或 'open-10m')对于有夜盘或不同交易时段的标的(如商品期货、金融期货),可以使用 'open'、'open+Xm' 或 'open-Xm' 这种相对时间格式。
reference_security)的实际开盘时间为基准,加上或减去指定分钟数来执行函数。def initialize(context):
# 在螺纹钢主力合约开盘时(含夜盘21:00)运行
run_daily(futures_open, time='open', reference_security='RB9999.XSGE')
# 在开盘后 5 分钟运行
run_daily(futures_check, time='open+5m', reference_security='RB9999.XSGE')
def futures_open(context):
log.info("期货开盘运行,当前逻辑时间:%s" % context.current_dt)
def futures_check(context):
log.info("期货开盘5分钟后运行")
注意:使用相对时间模式时,必须将
reference_security设置为对应的参考标的代码(建议设置为对应的主力合约或品种指数)。
run_daily,避免同时混用 handle_data,更不能写出 run_daily(handle_data, ...)。run_daily 调用的函数只能有一个参数 context,无法直接接收 data 参数,如需获取行情数据请通过 get_price / attribute_history / get_bars 等 API 获取。run_daily 来实现不同的定时逻辑,同一个时间点触发多个任务时,系统会按照代码注册顺序执行。