楼主: 挖矿专家
4024 8

[源码分享] 经验模态分解下的日内趋势交易策略 附源码 [推广有奖]

  • 0关注
  • 74粉丝

讲师

22%

还不是VIP/贵宾

-

威望
0
论坛币
2016 个
通用积分
5.2622
学术水平
21 点
热心指数
21 点
信用等级
21 点
经验
6055 点
帖子
403
精华
0
在线时间
151 小时
注册时间
2017-2-8
最后登录
2017-6-27

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
策略分析过程参考  广发证券的研究报告。
其中EMD库的安装参考 
1.指标
在每天分钟数据积累mlen个bar的位置,将今日的数据通过EMD分解为噪声部分和趋势部分。 定义信噪比
                                    SNR =  std(趋势数据)/std(噪声数据)

2.交易逻辑
当SNR小于一定的范围
   此时收盘价大于此日开盘价时做多
   此时收盘价小于此日开盘价时做空

3.止损止盈
固定点数止损
跟踪回撤止盈:即盈利达到一定幅度后回撤一定比例则被平仓

回测曲线(由Auto-trader提供回测报告)

经验模态.png

策略源码:

function EMDStrategy(bInit,bDayBegin,cellPar)%%% 函数说明%  上面的三个参数是一种固定结构。%  当在调用该函数如 DualThrust(a1,a2,a3,a4,a5,...).所有的参数都会被赋值给cellPar,即cellPar={a1,a2,a3,a4,a5,...}%  bInit,在策略逻辑运行前为1,类似优矿等平台的initialize函数。当bInit为0时,交易启动。%  bDayBegin判断是否为一天的开始。%% 外部和全局参数声明    % 这是一个固定结构.    % 日数据是分钟数据的合成.如在日中获取日数据,仅是已出现分钟数据的合成,不包含之后的数据。    global g_idxKDay;    global g_idxKMin;    global openPrice;   % 记录开盘价    global histExtre;   % 记录历史达到的有利极值,用于跟踪止盈    global TLen;    global startBar;    global Range;    global TSNR; %SIGNAL-NOISE RATIO的累积    mlen=cellPar{1};    Freq=cellPar{2};    lens = cellPar{3};    ThresHold = cellPar{4};    stopGap = cellPar{5};    profitGap = cellPar{6};    dropGap = cellPar{7}; %% 初始化回测帐户       if bInit        % 数据只有先注册才能使用        % 基本数据注册        % traderRegKData('day',Freq).Freq为bar的周期。数据的更新频率依据外部运行命令。分钟获取,将'day'变为'min'。        % 因子注册        % traderRegUserIndi(@Fun,{para1,para2,...})。        % Fun为自定义函数,其固定结构参考后面代码,大括号内为函数输入参数。        traderSetParalMode(false);%%默认是true,因子计算函数并行执行,速度快,不能调试,false串行执行可以设断点调试        g_idxKDay=traderRegKData('day',1);         g_idxKMin=traderRegKData('min',Freq);         TLen = length(g_idxKDay(:,1));        openPrice = nan(1,TLen);        histExtre = nan(1,TLen);        Range = nan(1,TLen);        startBar = 0;        for t = 1:TLen            TSNR(t).value =  [];        end %% 交易逻辑%   交易启动、先平后开          else         [mp,~,~]=traderGetAccountPositionV2(1,1:TLen); % 获取仓位信息        [BarNum,BarTime] = traderGetCurrentBarV2();  % 获取当下时间        dateVec = datevec(BarTime);             % datevec将时间转化为序列。对应[年,月,日,时,分,...]        nowTime = dateVec(4)*100 + dateVec(5);          if bDayBegin            startBar= BarNum;            Range = nan(1,TLen);            for i = 1:TLen                regKMatrix = traderGetRegKData(g_idxKDay(i,:),lens+1,false);                 regKMatrix(:,any(isnan(regKMatrix),1))=[];                [~,KLen]=size(regKMatrix);                if KLen>lens                    hh = max(regKMatrix(3,end-lens:end-1));                    ll = min(regKMatrix(4,end-lens:end-1));                    hc = max(regKMatrix(5,end-lens:end-1));                    lc = min(regKMatrix(5,end-lens:end-1));                    Range(i)= max(hh-lc,hc-ll);                end            end        end               %% 日内 14:50 - 15:30 平仓        if nowTime >= 1450 && nowTime <= 1530            for i=1:TLen                if mp(i) ~= 0                      traderPositionToV2(1,i,0,0,'market','close');                end            end            return;         end              for i=1:TLen           dataDay = traderGetRegKData(g_idxKMin(i,:),6,false);           dataDay(:,any(isnan(dataDay),1))=[];           [~,KLen]=size(dataDay);          %% 数据有效:长度足够;非空;成交价不为0;高低不同           if KLen==0 || dataDay(6,end) ==0 || dataDay(3,end)- dataDay(4,end)==0                continue;           end          if mp(i)~=0             %% 记录历史达到的最大有利值               if mp(i)>0                   histExtre(i) = max(histExtre(i),dataDay(3,end));               elseif mp(i)<0                   histExtre(i) = min(histExtre(i),dataDay(4,end));               end             %% 平仓,信号依次为反转平仓、止损平仓、跟踪止损平仓               %多单平仓条件               closeBuy1 = mp(i)>0 && (dataDay(5,end)<openPrice(i)-stopGap*Range(i));               closeBuy2 = mp(i)>0 && (histExtre(i)>openPrice(i)+profitGap*Range(i)) && dataDay(5,end)<histExtre(i)-dropGap*Range(i) ;               %空单平仓条件               closeSell1 = mp(i)<0 && (dataDay(5,end)>openPrice(i)+stopGap*Range(i));               closeSell2 = mp(i)<0 &&  (histExtre(i)<openPrice(i)-profitGap*Range(i)) && dataDay(5,end)>histExtre(i)+dropGap*Range(i);               %平仓操作               if closeBuy1 + closeBuy2 + closeSell1 + closeSell2 >0                   traderPositionToV2(1,i,0,0,'market','close');               end          end       end               %% EMD 分解       if BarNum-startBar >=mlen && BarNum-startBar<mlen + Freq &&  nowTime>=0930 &&  nowTime<=1430           for i=1:TLen               dataDay = traderGetRegKData(g_idxKMin(i,:),mlen,false);               dataDay(:,any(isnan(dataDay),1))=[];               dataDays = traderGetRegKData(g_idxKDay(i,:),3,false);               dataDays(:,any(isnan(dataDays),1))=[];               [~,KLen]=size(dataDay);              %% 数据有效:长度足够;非空;成交价不为0;高低不同               if KLen<mlen || dataDay(6,end) ==0 || dataDay(3,end)- dataDay(4,end)==0                    continue;               end               imf = emd(dataDay(5,:),'MAXMODES',4);               R = imf(end,:);% 原函数去除本征态函数后余下的趋势部分               noise = dataDay(5,:)-R;               SNR = log(std(noise)/std(R));               TSNR(i).value = [TSNR(i).value,SNR];               TSNR(i).value = TSNR(i).value(max(end-39,1):end);               amount =1;               if length(TSNR(i).value)>10 && SNR < mean((TSNR(i).value)) && abs(dataDay(5,end)-dataDay(5,1))> ThresHold*Range(i)                   if  dataDay(5,end)> max(dataDay(5,1),dataDays(2,end))                            traderDirectBuyV2(1,i,amount,0,'market','buy1');%开多单                          openPrice(i)=dataDay(5,end);                          histExtre(i) = dataDay(5,end);                   elseif  dataDay(5,end)< min(dataDay(5,1),dataDays(2,end))                          traderDirectSellV2(1,i,amount,0,'market','sell1');%开空单                          openPrice(i)=dataDay(5,end);                          histExtre(i) = dataDay(5,end);                   end               end           end        end     endend
更多免费策略源码下载请登录DigQuant社区-策略资源下载~





二维码

扫码加我 拉你入群

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

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


沙发
ghjktdf 发表于 2017-3-27 14:59:28 |只看作者 |坛友微信交流群
看曲线还不错~

使用道具

藤椅
65425856 发表于 2017-3-27 18:32:10 |只看作者 |坛友微信交流群
学习中~

使用道具

板凳
ajaxboy 发表于 2017-4-20 14:03:38 |只看作者 |坛友微信交流群
henhao de1 celue

使用道具

报纸
挖矿专家 发表于 2017-4-24 18:26:13 |只看作者 |坛友微信交流群
感谢支持

使用道具

地板
wanghaiss 发表于 2017-4-25 20:20:02 来自手机 |只看作者 |坛友微信交流群
谢谢,学习一下

使用道具

7
ghjktdf 发表于 2017-6-12 14:42:03 |只看作者 |坛友微信交流群
ghjktdf 发表于 2017-3-27 14:59
看曲线还不错~
很好的策略

使用道具

8
挖矿专家 发表于 2017-6-13 17:01:03 |只看作者 |坛友微信交流群
ghjktdf 发表于 2017-6-12 14:42
很好的策略
感谢支持

使用道具

9
windwine 发表于 2017-7-4 11:45:32 |只看作者 |坛友微信交流群
xiexie

使用道具

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

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

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

GMT+8, 2024-4-24 00:00