🚀 AI 一键生成 qmt 策略代码

如何使用 QMT 的 paint 函数在 K 线图上绘制策略的计算结果?

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

问题描述

我计算出了一个自定义指标,怎么能把它画在K线图上观察?

解决方案

在 QMT 中,如果你计算出了一个自定义指标,想要将其画在 K 线图上进行观察,主要使用的是 ContextInfo.paint() 函数。

该函数需要在 handlebar(ContextInfo) 中调用,QMT 会逐根 K 线执行该函数,从而将指标数值连成线或画成柱状图。

核心函数说明

ContextInfo.paint(name, value, index, line_style, color, limit)
  • name (string): 指标名称(显示在图表左上角)。
  • value (number): 当前 K 线对应的指标数值。
  • index (number): 索引位置,通常填 -1,表示在当前主图对应的 K 线位置画图。
  • line_style (number): 线型。
    • 0: 曲线(默认)
    • 42: 柱状线
  • color (string): 颜色(如 'red', 'blue', 'yellow', 'white' 等)。
  • limit (string): 控制选项(可选)。
    • 'noaxis': 不影响坐标轴缩放(即画在图上但不改变主图的纵坐标范围)。
    • 'nodraw': 不画线(仅显示数值)。

代码示例

下面是一个完整的策略代码示例。为了演示,我计算了一个简单的自定义指标:典型价格 (Typical Price),计算公式为 (最高价 + 最低价 + 收盘价) / 3,并将其画在图上。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 初始化函数,这里不需要做特殊设置
    pass

def handlebar(ContextInfo):
    # 1. 获取当前主图品种的代码
    stock_code = ContextInfo.stockcode
    
    # 2. 获取当前 K 线的数据(开高低收)
    # count=1 表示只取最新的一根(当前正在运行的这根 K 线)
    # 注意:get_market_data 返回的是 pandas DataFrame 或 Series
    data = ContextInfo.get_market_data(
        ['high', 'low', 'close'], 
        stock_code=[stock_code], 
        count=1, 
        period=ContextInfo.period, 
        dividend_type=ContextInfo.dividend_type
    )
    
    # 3. 确保获取到了数据
    if data.empty:
        return

    # 4. 提取数值 (由于返回的是结构化数据,我们需要提取出具体的 float 值)
    # 注意:这里根据返回数据的结构,可能需要根据实际情况调整索引方式
    # 在 handlebar 中单品种 count=1 通常返回 DataFrame,行索引为时间,列为字段
    try:
        current_high = data['high'].values[0]
        current_low = data['low'].values[0]
        current_close = data['close'].values[0]
    except:
        return # 数据异常则跳过

    # 5. 计算自定义指标:典型价格 (Typical Price)
    custom_indicator_value = (current_high + current_low + current_close) / 3

    # 6. 将指标画在图上
    # 参数说明:名称, 数值, 索引(-1), 线型(0为线), 颜色, 限制
    ContextInfo.paint("典型价格", custom_indicator_value, -1, 0, "yellow")
    
    # 示例:再画一条柱状图,例如显示收盘价,用红色柱状表示
    # ContextInfo.paint("收盘柱状", current_close, -1, 42, "red")

如何在 QMT 界面中查看

  1. 创建策略:将上述代码复制到 QMT 的【策略编辑器】中。
  2. 设置显示位置
    • 在策略编辑器的右侧(或“基本信息”设置中),找到 “位置” 选项。
    • 主图叠加:如果你希望指标和 K 线画在一起(例如均线),选择“主图叠加”。
    • 副图:如果你希望指标单独显示在 K 线图下方(例如 MACD、RSI),选择“副图”。
  3. 运行:点击“运行”或“回测”。
  4. 观察:随着 K 线的推进,你会看到黄色的线(典型价格)绘制在图表上。

补充提示

  • 文字和图标:除了画线,你还可以使用 ContextInfo.draw_text() 在特定位置写字,或使用 ContextInfo.draw_icon() 标记买卖点图标。
  • 坐标轴影响:如果你的指标数值非常大或非常小(与股价不在一个数量级,例如成交量),请务必将策略位置设置为 “副图”,否则会导致主图 K 线被压缩成一条直线看不清楚。或者在 paint 函数最后一个参数使用 'noaxis'