🚀 AI 一键生成 qmt 策略代码

QMT 策略参数:如何获取当前的无风险利率(国债收益率)?

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

问题描述

怎么获取当前的无风险利率用于计算夏普比率?

解决方案

在 QMT (Quantitative Trading Platform) 中,获取用于计算夏普比率(Sharpe Ratio)的无风险利率,可以使用平台内置的 API 函数 ContextInfo.get_risk_free_rate

该函数默认使用 十年期国债收益率 (CGB10Y) 作为无风险利率的标准。

1. 核心函数说明

  • 函数名: ContextInfo.get_risk_free_rate(index)
  • 参数: index (int),表示当前 K 线的索引号,通常使用 ContextInfo.barpos 获取。
  • 返回值: number,返回对应时间点的无风险利率数值。
  • 数据来源: 十年期国债收益率 (CGB10Y)。

2. 代码实现示例

以下是一个完整的 Python 策略示例,展示如何在 handlebar 函数中获取每个时间点的无风险利率:

# -*- coding: gbk -*-

def init(ContextInfo):
    # 初始化策略,设置股票池等
    ContextInfo.set_universe(['600000.SH'])
    print("策略初始化完成")

def handlebar(ContextInfo):
    # 1. 获取当前 K 线的索引位置
    index = ContextInfo.barpos
    
    # 2. 获取当前时间点的无风险利率
    # 注意:该函数返回的是十年期国债收益率
    rf_rate = ContextInfo.get_risk_free_rate(index)
    
    # 3. 获取当前时间(用于日志展示)
    timetag = ContextInfo.get_bar_timetag(index)
    import datetime
    date_str = datetime.datetime.fromtimestamp(timetag / 1000).strftime('%Y-%m-%d')
    
    # 4. 打印结果
    # 注意:通常返回的数值可能是百分比形式(如 3.5 代表 3.5%)或小数形式
    # 在计算夏普比率时,请务必检查数值单位是否与收益率单位统一
    print(f"日期: {date_str}, 无风险利率: {rf_rate}")

    # 示例:如果用于夏普比率计算 (Rp - Rf) / Sigma
    # 假设 rf_rate 返回的是 3.0 (即3%),而你的收益率是小数 0.15 (15%)
    # 你需要将 rf_rate 转换为 0.03
    # rf_decimal = rf_rate / 100

3. 注意事项

  1. 单位换算: API 返回的无风险利率数值通常是百分数(例如返回 3.5 代表 3.5%)。在计算夏普比率时,如果你的策略收益率是按小数计算的(例如 0.2 代表 20%),请务必将无风险利率除以 100 进行统一。
  2. 数据依赖: 该函数依赖于 QMT 基础数据中的宏观经济数据。如果在回测非常久远的日期或数据缺失,可能会返回 0 或空值。建议在代码中加入判空或默认值处理(例如:rf_rate = rf_rate if rf_rate else 3.0)。
  3. 固定值替代: 如果你希望在回测中使用固定的无风险利率(例如固定 3% 或 0%),可以直接在 init 中定义全局变量,而不使用该 API。

Q&A

Q: 为什么 ContextInfo.get_risk_free_rate(index) 返回的值是 0?
A: 这通常是因为当前回测的时间点缺少对应的十年期国债收益率数据,或者数据未下载完整。请尝试在“数据管理”中补充宏观或基础数据。如果数据缺失,建议在代码中设置一个默认值(如 0.03)作为兜底。

Q: QMT 中计算夏普比率的公式是什么?
A: 夏普比率 = (策略年化收益率 - 无风险利率) / 策略收益波动率。QMT 的回测报告中会自动计算该指标,但如果你需要在代码中手动计算,需要自行维护收益率序列并计算标准差。

Q: 这个函数支持实盘模式吗?
A: 支持。在实盘模式下,它会尝试获取最近的十年期国债收益率数据。