问题描述
解决方案
在聚宽(JoinQuant)策略中,您可以通过 context 对象中的 run_params 属性来获取当前回测的配置信息。
context.run_params 是一个字典,包含了回测的起止日期、运行频率以及运行方式等信息。
获取方法
您可以在 initialize、handle_data 或其他接收 context 参数的函数中访问以下属性:
- 开始日期:
context.run_params['start_date']- 类型:
datetime.date对象
- 类型:
- 结束日期:
context.run_params['end_date']- 类型:
datetime.date对象
- 类型:
- 运行频率:
context.run_params['frequency']- 类型: 字符串 (
str) - 可能的值:
'day'(按天),'minute'(按分钟),'tick'(Tick级)
- 类型: 字符串 (
代码示例
以下代码展示了如何在策略初始化时打印这些信息:
# -*- coding: utf-8 -*-
def initialize(context):
# 获取回测参数字典
params = context.run_params
# 获取具体字段
start_date = params['start_date']
end_date = params['end_date']
frequency = params['frequency']
run_type = params['type'] # 运行方式:'simple_backtest'(编译运行), 'full_backtest'(回测), 'sim_trade'(模拟交易)
# 打印信息到日志
log.info("=" * 30)
log.info("策略运行参数检查:")
log.info("开始日期: %s (类型: %s)" % (start_date, type(start_date)))
log.info("结束日期: %s (类型: %s)" % (end_date, type(end_date)))
log.info("运行频率: %s" % frequency)
log.info("运行方式: %s" % run_type)
log.info("=" * 30)
def handle_data(context, data):
pass
常见问答 (Q&A)
Q: context.run_params['start_date'] 返回的是字符串还是日期对象?
A: 返回的是 datetime.date 对象。如果您需要字符串格式(例如 "2023-01-01"),可以使用 str(context.run_params['start_date']) 进行转换。
Q: 我可以在策略代码中修改 context.run_params 的值来改变回测时间吗?
A: 不可以。context.run_params 是只读的配置信息,反映的是您在回测界面设置的参数。在代码中修改它不会改变实际的回测周期。
Q: 如何判断当前是回测还是模拟交易?
A: 可以通过 context.run_params['type'] 来判断。如果是 'sim_trade' 则表示当前是模拟交易环境,如果是 'simple_backtest' 或 'full_backtest' 则表示是回测环境。
Q: frequency 属性在什么情况下会用到?
A: 当您的策略逻辑需要根据运行频率(日线或分钟线)来调整参数(例如均线周期、止损幅度)时,这个属性非常有用。例如:if context.run_params['frequency'] == 'minute': ...。