matlab中Cci,【指标量化】超买超卖 |
您所在的位置:网站首页 › 超买超卖指标特点 › matlab中Cci,【指标量化】超买超卖 |
本帖最后由 TaoZzzzz 于 2018-4-16 15:30 编辑 【指标量化】超买超卖——CCI 顺势指标 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: step2: MATP表示在第t时刻,求最近n日TP的移动平均线。 step3: meanDev表示在第t时刻,求最近n日TP的一阶均差。 step4: 其中, \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%的流动资金下单交易。 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |