楼主: 点宽DigQuant
906 0

[其他] 【点宽专栏】宽客TAO学习贴:指标量化之超买超卖—EMV简易波动指标 [推广有奖]

  • 0关注
  • 4粉丝

本科生

25%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
1.5552
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
990 点
帖子
35
精华
0
在线时间
34 小时
注册时间
2020-12-14
最后登录
2023-3-24

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币


致初学者:
大家好,我是一个马叉虫的宽客:Tao,从本期开始,我将为大家带来一系列的量化指标。众所周知,认识技术指标是作为一个从事二级市场必不可少的技能。相信开始对量化感兴趣的宽客们都有一两个自己擅长的技术指标,而对技术指标进行量化策略的构建是最简单最基本的量化实现,宽客们,通过本期学习,一起来实现并尝试改善专属于自己的技术指标吧!
宽客:Tao
简介
EMV简易波动指标,是为数不多的考虑价量关系的技术指标。它刻画了股价在下跌的过程当中,由于买气不断的萎靡退缩,致使成交量逐渐的减少,EMV 数值也因而尾随下降,直到股价下跌至某一个合理支撑区,捡便宜货的买单促使成交量再度活跃,EMV 数值于是作相对反应向上攀升。
当EMV 数值由负值向上趋近于零时,表示部分信心坚定的资金,成功的扭转了股价的跌势,行情不断反转上扬,并且形成另一次的买进信号。
基本用法


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


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


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



本策略用法

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


CCI计算方法



策略代码


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
   end
end
end

function 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);
end
end
function value = MEAN(A,N)
value=cell2mat(arrayfun(@(L) mean(A(:,L-N+1:L),2),N:size(A,2),'UniformOutput',false));
回测分析


回测设置


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


回测结果


  • 权益曲线




  • 绩效分析




结论


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智库百科:简易波动指标



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:指标量化 EMV accountinf arrayfun function

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 08:10