问题描述
如何让我的策略在每个交易日上午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
# 您的其他策略逻辑...
关键点说明
- 函数位置:
run_daily必须在initialize(context)中调用。 - 参数说明:
- func:第一个参数是您自定义的函数名(如上例中的
my_trade_func),该函数必须接受context作为参数。 - time:设置为字符串格式的时间,例如
'10:00'。支持24小时制。
- func:第一个参数是您自定义的函数名(如上例中的
- 运行机制:设置后,回测或模拟交易引擎会在每个交易日的 10:00:00 调用一次
my_trade_func函数。 - 注意事项:
- 如果您使用了
run_daily指定具体时间,建议不要同时在handle_data中写复杂的定时逻辑,以避免逻辑冲突或重复运行。 run_daily指定的函数中,无法直接通过参数获取data对象,如果需要获取行情数据,请在函数内部使用get_price、history或attribute_history等API。
- 如果您使用了