🚀 AI 一键生成 qmt 策略代码
立即体验
👉 AI 生成代码 👈

QMT 平台如何获取周线周期上一周的 CCI 值?(附 Python 源码)

qmt | 发布时间: 2026/5/29
以下内容由 EasyQuant 生成。

问题描述

call_vba 怎么调用 周线周期 上一个周的 的 cci值呢 ?

call_vba 怎么调用 周线周期 上一个周的 的 cci 值呢 ?

解决方案

在 QMT 平台的 Python API 中,虽然早期或某些特定公式系统中存在类似 call_vba 的调用方式,但在目前的 Python 策略开发中,最标准、最高效的做法是直接获取周线级别的历史数据,并使用平台内置的 TA-Lib 库来计算 CCI 指标

要获取“上一周”的 CCI 值,您只需要获取周线(1w)数据,计算出 CCI 序列后,取数组的倒数第二个值(索引为 -2)即可(因为倒数第一个值是当前正在运行的这一周的值)。

Python 实现代码示例

以下是一个完整的 QMT 策略代码示例,演示如何获取周线周期上一周的 CCI 值:

#coding:gbk
import talib
import numpy as np

def init(ContextInfo):
    # 设置需要计算的股票池,例如平安银行
    ContextInfo.set_universe(['000001.SZ'])

def handlebar(ContextInfo):
    # 确保只在最后一根 K 线执行,避免历史回测时重复打印过多信息
    if not ContextInfo.is_last_bar():
        return
        
    stock_list = ContextInfo.get_universe()
    
    for stock in stock_list:
        # 1. 获取过去 30 周的最高、最低、收盘价数据
        # period='1w' 表示获取周线数据
        df = ContextInfo.get_market_data(['high', 'low', 'close'], stock_code=[stock], period='1w', count=30)
        
        if df.empty or len(df) < 15:
            print(f"{stock} 数据不足,无法计算 CCI")
            continue
            
        # 提取价格数组
        high = df['high'].values
        low = df['low'].values
        close = df['close'].values
        
        # 2. 使用 TA-Lib 计算 CCI 指标,默认时间周期通常为 14
        cci = talib.CCI(high, low, close, timeperiod=14)
        
        # 3. 获取上一周的 CCI 值
        # cci[-1] 是本周(可能尚未走完)的 CCI
        # cci[-2] 是上一周(已确定)的 CCI
        if len(cci) >= 2 and not np.isnan(cci[-2]):
            last_week_cci = cci[-2]
            print(f"{stock} 上一周的 CCI 值为: {last_week_cci:.4f}")
        else:
            print(f"{stock} CCI 计算结果无效")

代码原理解析:

  1. ContextInfo.get_market_data:通过设置 period='1w',直接向 QMT 底层请求周线级别的数据。count=30 保证了有足够的数据点供 TA-Lib 计算(CCI 周期为 14 时,至少需要 14 个数据点才能产出第一个有效值)。
  2. talib.CCI:QMT 平台内置了 TA-Lib 库,这是量化界最权威的技术指标库。传入最高价、最低价、收盘价即可快速计算出 CCI 序列。
  3. 索引 -2:在量化数据序列中,最新的数据(本周)在最后一位(索引 -1)。由于本周可能还在交易中,K 线未走完,其 CCI 值是动态变化的。因此,上一周的固定 CCI 值对应的索引是 -2

这种方法比传统的 call_vba 更加灵活,且计算速度极快,非常适合在 QMT 的 Python 环境中使用。