matlab中Cci,【指标量化】超买超卖——CCI 顺势指标

本帖最后由 TaoZzzzz 于 2018-4-16 15:30 编辑

【指标量化】超买超卖——CCI 顺势指标

06f8b76533fddee0370b44699f26bccc.png

1523335607(1).png (60.65 KB, 下载次数: 13)

2018-4-16 15:29 上传

致初学者:

大家好,我是一个马叉虫的宽客:Tao,从本期开始,我将为大家带来一系列的量化指标。众所周知,认识技术指标是作为一个从事二级市场必不可少的技能。相信开始对量化感兴趣的宽客们都有一两个自己擅长的技术指标,而对技术指标进行量化策略的构建是最简单最基本的量化实现,宽客们,通过本期学习,一起来实现并尝试改善专属于自己的技术指标吧!

研究基地及产出地

DigQuant点宽网,全网唯一基于 MATLAB 的专业在线量化社区,“不是人人都能成为宽客”,成为宽客的你都是独特的!

点宽网策略资源池全面开放216+基于MATLAB的量化投资策略,随你下载,任你玩!点宽量化策略研究平台auto-trader支持股票、期货、期权等多品种标的回测、实盘交易。

简介

CCI顺势指标,由唐纳德拉姆伯特所创,是通过测量股价的波动是否已超出其正常范围,来预测股价变化趋势的技术分析指标。属于超买超卖类指标中较特殊的一种,波动于正无限大和负无限大之间,但是,又不须要以0中轴线,这一点也和波动于正无限大和负无限小的指标不同。CCI主要测量脱离价格正常范围的变异性,同时适用于期货商品及股价。

参考文献

[1]百度百科:CCI

[2]MBA智库百科:顺势指标

本策略基本用法

1、当 CCI 上穿 100,买入。

2、当 CCI 下穿 -100,卖空。

CCI计算方法

step1:

b426f09890b82ce7b03364b34923c7b7.gif

step2:

0791821fca3f68eb68e30c8b6b1d5ae3.gif

MATP表示在第t时刻,求最近n日TP的移动平均线。

step3:

d0f0dfec4411c1bbfbbc3343caeb50e3.gif

meanDev表示在第t时刻,求最近n日TP的一阶均差。

step4:

6e3d12edde8061a4c643aec4b8dbd009.gif

其中, \alpha=0.015,n为计算周期,一般取20.

策略代码

请到点宽策略资源池下载:【指标量化】超买超卖——CCI顺势指标

策略函数:

function AT_CCI(bInit,bDayBegin,cellPar)

%RSRS阻力支撑相对强度市场择时策略:

%arrayfun函数:MATLAB的滚动窗口运行函数,具有并行运算效果,提高代码的运行效率

%%

%全局变量:

global g_idxK;

global g_idxAlpha;

global TLen;

global DayNum;

%赋值:

Len = cellPar{1};

alpha=cellPar{2};

s1=cellPar{3};

s2=cellPar{4};

DayTime=cellPar{5};

freq = cellPar{6};

%%

if bInit

%初始化读取所有数据:

traderSetParalMode(false); %并行执行时方便设置断点调试

g_idxK=traderRegKData(freq,1); %数据提取

TLen = length(g_idxK(:,1)); %股票总数量

g_idxAlpha=traderRegUserIndi(@myCCI,{Len,alpha}); %策略逻辑实现

DayNum=0;

else

%主题策略部分:

if bDayBegin

%每日交易第一根Bar初始化设置:

DayNum=DayNum+1;

end

if DayNum==1||mod(DayNum,DayTime)==0

disp(DayNum);

%提取数据:

CCI = traderGetRegUserIndi(g_idxAlpha,1); %alpha因子值读取

if (sum(CCI==0)==TLen)

return;

else

%资金分配:

num=sum(CCI>s1);

mp=traderGetAccountPositionV2(1,1:TLen); %仓位读取

[~,MarketCap,~,~,~] = traderGetAccountInfoV2(1); %获取动态权益

Stock_flow = ((MarketCap)*0.4)/num; % 每只股票分配的资金

getKData = traderGetRegKData(g_idxK,1,false);%获取K线数据

Close=getKData(5:8:end,1);

shareNum = 100*floor((Stock_flow./Close)/100); %计算购买股票数量;

%信号设置:

A=CCI>s1&mp==0&shareNum>0;  %买入

B=CCI

idx=1:TLen;

%进仓:

arrayfun(@(x) traderDirectBuyV2(1,x,shareNum(x),0,'market','buy1'), idx(A==1), 'UniformOutput', false);

%平仓:

arrayfun(@(x) traderPositionToV2(1,x,0,0,'market','sell'), idx(B==1), 'UniformOutput', false);

end

end

end

end

function value=myCCI(cellPar,bpPFCell)

%全局变量声明:

global g_idxK;

global TLen;

%赋值:

Len  = cellPar{1};

alpha  = cellPar{2};

%提取数据:

getKData = traderGetRegKData(g_idxK,Len,false,bpPFCell);%getKData:双标签矩阵:每8行表示一只标的,

%八行中每行对应的数据为:(1)时间、(2)开盘价、(3)最高价、(4)最低价、(5)收盘价、(6)成交量、(7)成交金额、(8)持仓量。

high=getKData(3:8:end,:);

low=getKData(4:8:end,:);

close=getKData(5:8:end,:);

value=zeros(size(high(:,1)));   %只返回每只标的当天计算的值

if sum(isnan(close(:,1)))==TLen

return;

else

%step1:

TP=(high+low+close)/3;

%step2:

MATP=MEAN(TP,Len);

%step3:

meanDev=MEAN(TP-MATP,Len);

%step4:

CCI=(TP-MATP)./(alpha*meanDev);

CCI(abs(CCI)==inf)=0;

CCI(isnan(CCI))=0;

value=CCI(:,end);

end

end

function value = MEAN(A,N)

value=cell2mat(arrayfun(@(L) mean(A(:,L-N+1:L),2),N:size(A,2),'UniformOutput',false));

end复制代码

执行脚本:

tic;

%读取证券数据:

targetList = traderGetCodeList('hs300');

%参数设置:

Len = 20; %计算长度

alpha=0.015; %计算系数

s1=100;

s2=-100; %阈值

DayTime=1;

freq='day';

initTime = 20050901;

lastTime = 20180101;

% 在回测时设置初始资本10 000 000元、手续费率0.000026、无风险利率0.02、滑价0、默认1下一个bar的开盘价、默认0成交价、默认0直接成交

traderSetBacktest(10000000,0.000026,0.02,0,1,0,0);

AccountList(1) = {'StockBackReplay'};

traderRunBacktestV2('runAT_CCI',@AT_CCI,{Len,alpha,s1,s2,DayTime,freq},AccountList,targetList,freq,1,initTime,lastTime,'FWard');

toc;

回测分析

一、回测设置:

1、回测标的:HS300

2、回测时间:20050901-20180101,共13年

3、初始资金:1千万

4、资金分配:40%流动资金均等分配给准备下单的股票。

二、回测结果:

权益曲线:

绩效分析:指标名称指标值指标名称指标值指标名称指标值

初始资金收益率314.27%最大回撤率34.53%夏普比率0.88

算术年化收益率26.41%净利/最大潜在亏损3.54Calmar比率0.31

几何年化收益率12.69%手续费/净利0.1446Sortino比率1.21

盈利因子1.18胜率49.48%平均盈利/平均亏损1.2

结论:

1、从该指标的设计来看,在一般常态行情下,CCI指标不会发生作用。

2、当CCI扫描到异常股价波动时,也就是当CCI突破+/-100时,抓住市场趋势。但是在上涨/下跌行情中出现短暂反方向运动时,该策略会出现误判,又因为策略的信号频率不高,也因此带来比较大的回撤。

3、回测收益与光大证券研报【技术指标系列(五)——CCI的顺势而为】不一致,有可能是资金分配不一致导致的,本策略每次交易仅仅使用40%的流动资金下单交易。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值