问题描述
在handle_data(context, data)函数中,没发现怎么设置日线级别还是分钟级别的回测参数,想问下怎么设置?
解决方案
在 JoinQuant(聚宽)平台中,handle_data(context, data) 函数本身的参数中并没有用于设置日线级别还是分钟级别的参数。它的运行频率是由您在网页端的回测/模拟交易配置界面中设置的。
1. 如何设置回测频率?
handle_data 的调用频率完全取决于您在启动回测时选择的**“运行频率”**:
- 在网页端设置:在聚宽策略编写页面的右上方(或回测配置面板中),有一个**“频率”选项。您可以选择“每天”或“每分钟”**。
- 按天回测:如果您选择了“每天”,
handle_data就会在每个交易日调用一次(通常在 9:30 左右触发,具体取决于底层撮合机制)。此时传入的data是前一天的日线数据。 - 按分钟回测:如果您选择了“每分钟”,
handle_data就会在交易时间的每一分钟调用一次(每天 240 次)。此时传入的data是上一分钟的分钟线数据。
2. 官方推荐的替代方案:使用定时运行函数
虽然 handle_data 可以通过界面设置频率,但聚宽官方目前更推荐使用定时运行函数(如 run_daily、run_weekly、run_monthly)来替代 handle_data。使用定时运行函数可以让您在代码中精确控制策略的执行时间,而不需要依赖全局的频率设置。
示例:使用 run_daily 替代 handle_data
def initialize(context):
# 每天 9:30 运行一次(相当于按天回测的 handle_data)
run_daily(my_trade_logic, time='09:30')
# 如果你想每分钟运行一次,可以这样设置(前提是网页端频率必须选“按分钟”):
# run_daily(my_trade_logic, time='every_bar')
def my_trade_logic(context):
# 在这里编写你的交易逻辑
# 注意:定时运行函数只接受 context 参数,不再提供 data 参数
# 你可以使用 get_price 或 attribute_history 来获取数据
pass
总结
handle_data的频率:在网页右上角的回测设置中选择“每天”或“每分钟”。- 最佳实践:建议在
initialize中使用run_daily等定时函数来显式指定运行时间,这样代码的意图更清晰,且灵活性更高。注意,如果在一个策略中同时使用了run_daily和handle_data,可能会导致逻辑混乱,官方建议不要在同一个策略中混用。