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

PTrade 平台如何结合 CCI 指标实现动态追踪止损?(附 Python 源码)

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

问题描述



Title: PTrade 风控进阶:利用 CCI 指标构建动态追踪止损算法

Question: 如何结合 CCI 指标在 ptrade 中实现动态追踪止损?

解决方案

什么是 CCI 指标与动态追踪止损?

**CCI 指标(Commodity Channel Index,顺势指标)**是一种超买超卖型指标,专门用于测量股价是否已超出常态分布范围。在量化交易中,CCI 能够敏锐地捕捉趋势的启动与反转。

**动态追踪止损(Trailing Stop Loss)**是一种高级风控保护机制。与固定止损不同,追踪止损点会随着股价的上涨而不断上移。一旦股价从最高点回撤达到设定比例,策略将立即触发止损,从而在保护利润的同时限制最大回撤。

在 PTrade 平台中,我们可以结合内置的 get_CCI 函数与持仓管理 API,轻松实现这一动态风控算法。


PTrade 核心 API 介绍

  1. get_CCI(high, low, close, n=14)
    • 参数high(最高价序列)、low(最低价序列)、close(收盘价序列)均为 numpy.ndarray 类型;n 为计算周期(默认 14)。
    • 返回:CCI 指标值的时间序列。
  2. get_history(count, frequency, field, security_list):用于获取历史 K 线数据,为指标计算提供输入。
  3. get_position(security):获取指定标的持仓信息,用于判断当前是否持有仓位及持仓数量。

策略构建逻辑

  1. 买入信号:当 CCI 指标从超卖区(低于 -100)向上突破 -100 时,视作超跌反弹或趋势启动信号,全仓买入,并记录买入时的初始最高价。
  2. 动态更新最高价:在持仓期间,实时监控股价。如果当前价格高于历史最高价,则更新最高价记录。
  3. 卖出/止损信号
    • 动态追踪止损:当股价从记录的最高价回撤超过 5%(可配置)时,触发追踪止损,清仓离场。
    • 指标多头离场:当 CCI 指标从超买区(高于 100)向下跌破 100 时,代表多头动能减弱,清仓锁定利润。

PTrade 策略 Python 源码实现

# -*- coding: utf-8 -*-

def initialize(context):
    # 设置操作的股票(以恒生电子为例)
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 初始化风控变量
    g.highest_price = 0.0      # 记录持仓期间的最高价
    g.stop_loss_pct = 0.05     # 追踪止损比例(5%)

def handle_data(context, data):
    sid = g.security
    
    # 1. 获取历史行情数据(计算CCI需要high, low, close)
    h = get_history(50, '1d', ['close', 'high', 'low'], security_list=sid)
    if h is None or len(h) < 14:
        return
        
    high_data = h['high'].values
    low_data = h['low'].values
    close_data = h['close'].values
    
    # 2. 计算 CCI 指标
    cci_array = get_CCI(high_data, low_data, close_data, 14)
    if cci_array is None or len(cci_array) < 2:
        return
    
    current_cci = cci_array[-1]
    prev_cci = cci_array[-2]
    
    # 获取当前持仓与最新价格
    pos = get_position(sid)
    current_price = data[sid]['close']
    
    # 3. 交易与风控逻辑
    if pos.amount == 0:
        # 无持仓:等待买入机会
        # CCI 从下往上突破 -100
        if prev_cci <= -100 and current_cci > -100:
            cash = context.portfolio.cash
            if cash > 0:
                order_value(sid, cash)
                g.highest_price = current_price  # 初始化最高价
                log.info(f"【买入提示】CCI突破-100,买入 {sid},当前价: {current_price}")
    else:
        # 已持仓:执行动态追踪止损与指标止盈
        
        # 更新持仓期间的最高价
        if current_price > g.highest_price:
            g.highest_price = current_price
            log.info(f"【更新最高价】当前最高价更新为: {g.highest_price}")
            
        # 计算当前动态止损价格
        stop_loss_price = g.highest_price * (1 - g.stop_loss_pct)
        
        # 触发追踪止损
        if current_price < stop_loss_price:
            order_target(sid, 0)
            log.info(f"【风控止损】股价跌破追踪止损线!最高价: {g.highest_price},止损价: {stop_loss_price},当前价: {current_price},执行清仓。")
            
        # 触发指标止盈:CCI 从上往下跌破 100
        elif prev_cci >= 100 and current_cci < 100:
            order_target(sid, 0)
            log.info(f"【指标止盈】CCI跌破100超买区,趋势转弱,当前价: {current_price},执行清仓。")

策略优势与注意事项

  • 优势:该策略将趋势跟踪指标(CCI)与主动风控(追踪止损)相结合。在单边上涨行情中,追踪止损能最大化锁住利润;在震荡或下跌行情中,能快速切断亏损。
  • 注意事项:在 PTrade 实盘交易中,限价单委托需注意价格精度。股票价格需保留两位小数,建议在下单前对 limit_price 进行 round(price, 2) 处理,避免因精度问题导致柜台废单。