3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
顺势指标(Commodity Channel Index,简称 CCI)是一种常用于判断标的超买超卖状态以及趋势突破的动量指标。在 ptrade 量化交易平台中,我们可以直接调用内置的 get_CCI 接口快速获取 CCI 值,从而实现高效率的突破交易策略。
CCI 指标通过计算价格与移动平均线的偏离程度来衡量动量:
get_CCI 接口说明get_CCI 是 ptrade 平台提供的内置技术指标计算函数。
get_CCI(high, low, close, n=14)
high:最高价的时间序列数据,numpy.ndarray 类型。low:最低价的时间序列数据,numpy.ndarray 类型。close:收盘价的时间序列数据,numpy.ndarray 类型。n:计算周期,默认 14,int 类型。numpy.ndarray 类型,通过 [-1] 可获取最新周期的 CCI 值。以下是一个基于 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,清仓卖出。")
get_history 返回的 DataFrame 需提取 .values 转为 numpy.ndarray 后再传入 get_CCI。n),建议至少取 50~100 根 K 线以确保指标计算精确。order() 传入 limit_price,股票需保持两位小数,可转债/ETF 需保持三位小数,避免柜台报单失败。