🚀 AI 一键生成 ptrade 策略代码
立即体验

PTrade 平台如何使用 get_CCI 函数编写顺势指标突破策略?(附 Python 源码)

ptrade | 发布时间: 2026/7/30
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: PTrade 技术指标开发:使用 get_CCI 实现顺势指标突破策略

Question: 在 PTrade 中如何使用 get_CCI 函数计算 CCI 指标并编写突破交易策略?

解决方案

PTrade 技术指标开发:使用 get_CCI 实现顺势指标突破策略

在量化交易中,顺势指标(Commodity Channel Index, CCI) 是一种常用于判断标的超买超卖以及趋势突破的技术指标。PTrade 量化平台提供了内置函数 get_CCI,可以帮助开发者高效获取 CCI 计算结果。


一、get_CCI API 接口说明

get_CCI 函数用于获取顺势指标 CCI 的计算结果,仅在回测与交易模块可用。

1. 语法格式

get_CCI(high, low, close, n=14)

2. 参数说明

  • high (numpy.ndarray): 最高价的时间序列数据。
  • low (numpy.ndarray): 最低价的时间序列数据。
  • close (numpy.ndarray): 收盘价的时间序列数据。
  • n (int): 计算周期,默认值为 14。

3. 返回值

  • 返回 CCI 指标值的时间序列,类型为 numpy.ndarray

二、CCI 顺势突破策略逻辑

CCI 指标以 0 为中心,通常在 +100 到 -100 之间波动:

  1. 买入信号:当 CCI 指标从下向上突破 +100 时,表明市场进入强势多头趋势,全仓买入。
  2. 卖出信号:当持仓股票的 CCI 指标从上向下跌破 -100跌破 0 时,表明多头趋势结束,卖出平仓。

三、完整策略源码

以下是在 PTrade 平台运行的完整 CCI 顺势突破策略代码:

def initialize(context):
    # 设置目标交易股票
    g.security = '600570.SS'  # 恒生电子
    set_universe(g.security)
    # 设置策略参数:CCI计算周期
    g.cci_period = 14

def handle_data(context, data):
    security = g.security
    
    # 1. 获取过去 100 天的历史最高价、最低价和收盘价
    df = get_history(100, '1d', ['high', 'low', 'close'], security_list=security, fq=None, include=False)
    
    if df.empty:
        return
        
    high_data = df['high'].values
    low_data = df['low'].values
    close_data = df['close'].values
    
    # 2. 调用 PTrade API 计算 CCI
    cci_series = get_CCI(high_data, low_data, close_data, n=g.cci_period)
    
    # 取最新及上一个周期的 CCI 值用于突破判断
    current_cci = cci_series[-1]
    previous_cci = cci_series[-2]
    
    # 获取当前可用资金与持仓
    cash = context.portfolio.cash
    position_amount = get_position(security).amount
    
    # 3. 交易逻辑判断
    # 向上突破 +100,买入信号
    if previous_cci <= 100 and current_cci > 100 and position_amount == 0:
        order_value(security, cash)
        log.info("CCI突破+100,买入 %s,当前CCI: %.2f" % (security, current_cci))
        
    # 向下跌破 0,卖出平仓信号
    elif current_cci < 0 and position_amount > 0:
        order_target(security, 0)
        log.info("CCI跌破0,卖出 %s,当前CCI: %.2f" % (security, current_cci))

四、注意事项与优化建议

  1. 历史数据长度:调用 get_history 时,传入的数据长度应大于 CCI 的周期 n,建议至少获取 n * 2 以上的数据以保证指标计算稳定。
  2. 止损止盈机制:CCI 属于趋势/摆动类指标,在震荡市中可能出现频繁假突破,建议结合 ATR 或固定百分比止损控制风险。
  3. 限价单精度:在实盘交易中,若使用限价单(limit_price),需注意股票价格需保留两位小数,避免因精度问题导致报单失败。