🚀 AI 一键生成 joinquant 策略代码

如何利用 context.run_params 让 JoinQuant 策略自动适应不同回测参数?

joinquant | 发布时间: 2025/12/18
以下内容由 EasyQuant 生成。

问题描述

如何让我的策略知道当前回测的开始日期、结束日期和运行频率?

解决方案

在聚宽(JoinQuant)策略中,您可以通过 context 对象中的 run_params 属性来获取当前回测的配置信息。

context.run_params 是一个字典,包含了回测的起止日期、运行频率以及运行方式等信息。

获取方法

您可以在 initializehandle_data 或其他接收 context 参数的函数中访问以下属性:

  1. 开始日期: context.run_params['start_date']
    • 类型: datetime.date 对象
  2. 结束日期: context.run_params['end_date']
    • 类型: datetime.date 对象
  3. 运行频率: 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': ...