3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant (聚宽) 平台中,handle_data 函数的运行频率不是通过代码参数来设置的,而是由您在创建回测或模拟交易时选择的**“运行频率”**决定的。
另外,您给出的示例 handle_data(context, '399001.XSHE') 存在语法错误。handle_data 的标准定义是 def handle_data(context, data):,第二个参数 data 是一个包含当前时间切片数据的字典,不能直接传入标的代码。
要实现每分钟运行一次策略,您有以下两种方法:
handle_data 并设置回测频率为“分钟”handle_data 的标准写法。这样设置后,引擎会自动在交易时间的每一分钟调用一次 handle_data。
def initialize(context):
# 初始化设置
g.security = '399001.XSHE'
# 只要在界面选择了“分钟”频率,这个函数就会每分钟执行一次
def handle_data(context, data):
# 获取当前分钟的收盘价
current_price = data[g.security].close
log.info("当前时间:%s, 价格:%s" % (context.current_dt, current_price))
run_daily 定时函数(官方更推荐)聚宽官方文档建议尽量使用 run_daily 来代替 handle_data,因为 run_daily 的时间控制更加灵活和明确。您可以使用 time='every_bar' 参数来实现每分钟运行。
注意:使用此方法同样需要在回测界面将频率设置为“分钟”。
def initialize(context):
g.security = '399001.XSHE'
# 注册定时运行函数,time='every_bar' 表示在每个 Bar(分钟频率下即每分钟)运行
run_daily(my_minute_strategy, time='every_bar')
# 自定义策略函数,注意参数只有 context
def my_minute_strategy(context):
# 在 run_daily 调用的函数中,不再提供 data 参数,需要使用 API 获取数据
current_data = get_current_data()
current_price = current_data[g.security].last_price
log.info("当前时间:%s, 最新价格:%s" % (context.current_dt, current_price))
handle_data 还是 run_daily(..., time='every_bar'),要实现分钟级运行,必须在回测/模拟配置界面选择“分钟”频率。handle_data)的默认参数结构。run_daily 结合 get_current_data() 或 get_price()/history() 来编写策略,结构更清晰。