cci公式MATLAB,点宽专栏-宽客TAO学习贴:指标量化之超买超卖—EMV简易波动指标...

464b3844a7f78e3904a563a41c3f384b.png

致初学者:

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

宽客:Tao

简介

EMV简易波动指标,是为数不多的考虑价量关系的技术指标。它刻画了股价在下跌的过程当中,由于买气不断的萎靡退缩,致使成交量逐渐的减少,EMV 数值也因而尾随下降,直到股价下跌至某一个合理支撑区,捡便宜货的买单促使成交量再度活跃,EMV 数值于是作相对反应向上攀升。

当EMV 数值由负值向上趋近于零时,表示部分信心坚定的资金,成功的扭转了股价的跌势,行情不断反转上扬,并且形成另一次的买进信号。

基本用法

EMV 在0 以下表示弱势,在0 以上表示强势;EMV 由负转正应买进,由正转负应卖出。

EMV 上穿MAEMV 则买入;EMV 下穿MAEMV 则卖出。

EMV 大于0,买入;EMV 小于0,卖出。

本策略用法

EMV 在0 以下表示弱势,在0 以上表示强势;EMV 由负转正应买进,由正转负应卖出。

CCI计算方法

6e6a2b61c3db2ec3b0c43681e00fe1c5.png

策略代码

function AT_EMV(bInit,bDayBegin,cellPar)%EMV简易波动指标量化择时策略:%arrayfun函数:MATLAB的滚动窗口运行函数,具有并行运算效果,提高代码的运行效率%%%全局变量:global g_idxK;global g_idxAlpha;global TLen;global DayNum;global EMVvalue;global EMVconut;%赋值:Len = cellPar{1};DayTime=cellPar{2};freq = cellPar{3};%%if bInit   %初始化读取所有数据:   traderSetParalMode(false); %并行执行时方便设置断点调试   g_idxK=traderRegKData(freq,1); %数据提取   TLen = length(g_idxK(:,1)); %股票总数量   g_idxAlpha=traderRegUserIndi(@myEMV,{Len}); %策略逻辑实现   DayNum=0;   EMVconut=1;else   %主题策略部分:   if bDayBegin       %每日交易第一根Bar初始化设置:       DayNum=DayNum+1;   end   if DayNum==1||mod(DayNum,DayTime)==0       disp(DayNum);       %提取数据:       EMV = traderGetRegUserIndi(g_idxAlpha,1); %alpha因子值读取       if (sum(EMV==0)==TLen)           return;       else           if EMVconut               EMVvalue(:,2)=EMV;               EMVconut=0;               return;           else               EMVvalue=[EMVvalue(:,2),EMV];  %用于存储多个计算出的EMV值               %资金分配:               num=sum(EMVvalue(:,1)<0&EMVvalue(:,2)>0);  %准备下单的标的数               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=EMVvalue(:,1)<0&EMVvalue(:,2)>0&mp==0&shareNum>0;  %买入               B=EMVvalue(:,1)>0&EMVvalue(:,2)<0&mp~=0;  %卖出               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   endendendfunction value=myEMV(cellPar,bpPFCell)%全局变量声明:global g_idxK;global TLen;%赋值:Len  = cellPar{1};%提取数据:getKData = traderGetRegKData(g_idxK,Len+1,false,bpPFCell);%getKData:双标签矩阵:每8行表示一只标的,                                                       %八行中每行对应的数据为:(1)时间、(2)开盘价、(3)最高价、(4)最低价、(5)收盘价、(6)成交量、(7)成交金额、(8)持仓量。high=getKData(3:8:end,:);low=getKData(4:8:end,:);volume=getKData(6:8:end,:);value=zeros(size(high(:,1)));   %只返回每只标的当天计算的值if sum(isnan(high(:,1)))==TLen   return;else   %step1:   MID=((high(:,2:end)+low(:,2:end))/2)-((high(:,1:end-1)+low(:,1:end-1))/2);  %MID有可能等于0   %step2:   BRO=volume(:,2:end)./(high(:,2:end)-low(:,2:end));%BRO有可能为inf   %step3:   EM=MID./BRO;   %step4:   EMV=MEAN(EM,Len);   EMV(EMV==inf)=0;   EMV(isnan(EMV))=0;   value=EMV(:,end);endendfunction value = MEAN(A,N)value=cell2mat(arrayfun(@(L) mean(A(:,L-N+1:L),2),N:size(A,2),'UniformOutput',false));

回测分析

回测设置:

1、回测标的:HS3002、回测时间:20050901-20180101,共13年3、初始资金:1千万4、资金分配:40%流动资金均等分配给准备下单的股票。

回测结果:

权益曲线

d847d46a5a66b7b96484da174b3960b5.png

绩效分析

c9871f43b2547dcef38a27cbdc77a902.png

结论

1、EMV 策略操作简单,策略回测效果一般。

2、该策略在2008年金融危机以及2015年证券危机时段并没有判断出熊市趋势。

3、下面我们来探讨就以上两个亏损点的主要原因。

对于亏损点一:

回顾EMV 指标计算公式,若行情没有经历或者短暂经历价格下跌伴随着成交量放大的情况,而快速过渡到量价起升的阶段,这使得EMV 数值不会这么快回复到0(这种情况往往是行情阶段底部V 字反转的形态。

对于亏损点二:

指标在0 附近波动,意味着小的价格移动或者大的成交量。

参考文献

[1]百度云盘:技术指标系列(九)——EMV指标改进用法识别尖部能力强 ,密码:q71s

https://pan.baidu.com/share/init?surl=WgDaG6KceH_1SA7ur0e_Rw

[2]百度百科:EMV指标[3]MBA智库百科:简易波动指标

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[2023-05-31 11:07:02] Started by user coding [2023-05-31 11:07:02] Running in Durability level: MAX_SURVIVABILITY [2023-05-31 11:07:04] [Pipeline] Start of Pipeline [2023-05-31 11:07:06] [Pipeline] getContext [2023-05-31 11:07:07] [Pipeline] node [2023-05-31 11:07:07] Running on Jenkins in /root/codingci/tools/jenkins_home/workspace/2553946-cci-31810232-464995 [2023-05-31 11:07:07] [Pipeline] { [2023-05-31 11:07:08] [Pipeline] withEnv [2023-05-31 11:07:08] [Pipeline] { [2023-05-31 11:07:08] [Pipeline] withDockerRegistry [2023-05-31 11:07:08] [Pipeline] { [2023-05-31 11:07:08] [Pipeline] isUnix [2023-05-31 11:07:08] [Pipeline] sh [2023-05-31 11:07:08] + docker inspect -f . public/docker/nodejs:18-2022 [2023-05-31 11:07:08] /root/codingci/tools/jenkins_home/workspace/2553946-cci-31810232-464995@tmp/durable-221f7a67/script.sh: 1: docker: not found [2023-05-31 11:07:08] [Pipeline] isUnix [2023-05-31 11:07:08] [Pipeline] sh [2023-05-31 11:07:09] + docker inspect -f . coding-public-docker.pkg.coding.net/public/docker/nodejs:18-2022 [2023-05-31 11:07:09] /root/codingci/tools/jenkins_home/workspace/2553946-cci-31810232-464995@tmp/durable-4892b310/script.sh: 1: docker: not found [2023-05-31 11:07:09] [Pipeline] isUnix [2023-05-31 11:07:09] [Pipeline] sh [2023-05-31 11:07:09] + docker pull coding-public-docker.pkg.coding.net/public/docker/nodejs:18-2022 [2023-05-31 11:07:09] /root/codingci/tools/jenkins_home/workspace/2553946-cci-31810232-464995@tmp/durable-0770ad1b/script.sh: 1: docker: not found [2023-05-31 11:07:09] [Pipeline] } [2023-05-31 11:07:09] [Pipeline] // withDockerRegistry [2023-05-31 11:07:09] [Pipeline] } [2023-05-31 11:07:09] [Pipeline] // withEnv [2023-05-31 11:07:09] [Pipeline] } [2023-05-31 11:07:09] [Pipeline] // node [2023-05-31 11:07:09] [Pipeline] End of Pipeline [2023-05-31 11:07:09] ERROR: script returned exit code 127 [2023-05-31 11:07:09] Finished: FAILURE
最新发布
06-01

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值