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

如何利用 ptrade 的 get_CCI 接口开发顺势突破策略?

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

问题描述

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

Title: ptrade 顺势指标 (CCI) 突破交易策略编写指南

Question: 如何利用 ptrade 的 get_CCI 接口开发顺势突破策略?

解决方案

ptrade 顺势指标 (CCI) 突破交易策略编写指南

顺势指标(Commodity Channel Index,简称 CCI)是一种常用于判断标的超买超卖状态以及趋势突破的动量指标。在 ptrade 量化交易平台中,我们可以直接调用内置的 get_CCI 接口快速获取 CCI 值,从而实现高效率的突破交易策略。


1. CCI 指标逻辑与突破策略

CCI 指标通过计算价格与移动平均线的偏离程度来衡量动量:

  • CCI > +100:表明市场进入强势多头突破行情(买入信号)。
  • CCI < -100:表明市场进入弱势空头突破或超卖恢复行情。
  • 突破卖出逻辑:当持仓标的的 CCI 从高位回落跌破 +100 或跌破 0 轴时进行平仓止盈/止损。

2. ptrade get_CCI 接口说明

get_CCI 是 ptrade 平台提供的内置技术指标计算函数。

接口定义:

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

参数说明:

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

返回值:

  • 返回 CCI 指标的时间序列 numpy.ndarray 类型,通过 [-1] 可获取最新周期的 CCI 值。

3. 完整策略 Python 源码

以下是一个基于 ptrade 平台的完整 CCI 突破交易策略源码:

# ptrade 顺势指标(CCI)突破策略示例

def initialize(context):
    # 设置交易标的(以恒生电子为例)
    g.security = '600570.SS'
    set_universe(g.security)
    # 设置参考基准
    set_benchmark('000300.SS')
    # 设置CCI计算周期
    g.cci_period = 14

def handle_data(context, data):
    security = g.security
    
    # 1. 获取过去 100 天的历史 K 线行情数据
    df = get_history(100, '1d', ['high', 'low', 'close'], security_list=security)
    if df is None or len(df) < g.cci_period:
        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)
    
    current_cci = cci_series[-1]
    previous_cci = cci_series[-2]
    
    # 3. 获取当前账户资金与持仓
    cash = context.portfolio.cash
    position_amount = get_position(security).amount
    
    # 4. 交易逻辑判断
    # 买入信号:前一周期 CCI <= 100 且 当前周期突破 100(向上突破+100强势区)
    if previous_cci <= 100 and current_cci > 100 and cash > 0:
        order_value(security, cash)
        log.info(f"[买入触发] {security} 当前 CCI: {current_cci:.2f} 突破 +100,全仓买入。")
        
    # 卖出信号:当前持仓且 CCI 跌破 100(动量减弱回落)
    elif previous_cci >= 100 and current_cci < 100 and position_amount > 0:
        order_target(security, 0)
        log.info(f"[卖出触发] {security} 当前 CCI: {current_cci:.2f} 跌破 +100,清仓卖出。")

4. 策略注意事项

  1. 数据获取与数据类型get_history 返回的 DataFrame 需提取 .values 转为 numpy.ndarray 后再传入 get_CCI
  2. K线数量要求:获取的历史数据长度必须大于等于 CCI 的计算周期(n),建议至少取 50~100 根 K 线以确保指标计算精确。
  3. 限价单精度:若在交易场景中使用限价单 order() 传入 limit_price,股票需保持两位小数,可转债/ETF 需保持三位小数,避免柜台报单失败。