策略分析过程参考  广发证券的研究报告。

其中EMD库的安装参考

1.指标

在每天分钟数据积累mlen个bar的位置,将今日的数据通过EMD分解为噪声部分和趋势部分。 定义信噪比

SNR =  std(趋势数据)/std(噪声数据)

2.交易逻辑

当SNR小于一定的范围

此时收盘价大于此日开盘价时做多

此时收盘价小于此日开盘价时做空

3.止损止盈

固定点数止损

跟踪回撤止盈:即盈利达到一定幅度后回撤一定比例则被平仓

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

2017-3-24 17:04:30 上传

下载附件 (43.96 KB)

策略源码:

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)0 && (histExtre(i)>openPrice(i)+profitGap*Range(i)) && dataDay(5,end)openPrice(i)+stopGap*Range(i));               closeSell2 = mp(i)<0 &&  (histExtre(i)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=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 KLen10 && 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社区-策略资源下载~

python 经验模态分解_经验模态分解下的日内趋势交易策略 附源码相关推荐

  1. 【Python】基金/股票 最大回撤率计算与绘图详解(附源码和数据)

    如果你想找的是求最大回撤的算法,请跳转:[Python] 使用动态规划求解最大回撤详解 [Python]基金/股票 最大回撤率计算与绘图详解(附源码和数据) 0. 起因 1. 大成沪深300指数A 5 ...

  2. 用Python玩人脸融合,想知道你未来孩子的长相?(附源码)

    这次花了点时间,将百度智能云里面的人脸识别功能与python结合,进行了一场实验.结果还是蛮有成就感的,过程也挺简单,不会复杂,说不定,你就能融合出你孩子的长相了耶~ 下面我们一起敲起键盘吧! 前期预 ...

  3. animation基础练习源码_用vue简单写一个音乐播放组件「附源码」

    作者:vipbic 转发链接:https://segmentfault.com/a/1190000022980992 前言 上次小编也分享一个关于Vue 开发过音乐播放对项目: 基于 electron ...

  4. Python 自动化收取蚂蚁森林能量,不错过暗恋的她(附源码)

    作者 | 锅g头 来源 | Crossin的编程教室 最近在家远程工作,结果作息更混乱了,早上起不来,导致我蚂蚁森林能量天天被偷,严重影响我沙漠造树"大业".于是我决定用pytho ...

  5. python bokeh教程_手把手教你用Bokeh进行可视化数据分析(附源码)

    Bokeh与Python可视化领域中的流行库Matplotlib和Seaborn不同,它使用HTML和JavaScript渲染其图形,这使得它在构建基于Web的应用中成为一个非常理想的候选者.它对于探 ...

  6. python屏幕文字识别_学会python就是如此任性,15行代码搞定图片文字识别,附源码...

    python作为一门高级编程语言,它的定位是优雅.明确和简单.阅读Python编写的代码感觉像在阅读英语一样,这让使用者可以专注于解决问题而不是去搞明白语言本身.Python虽然是基于C语言编写,但是 ...

  7. python小程序贪吃蛇_微信小程序实现的贪吃蛇游戏【附源码下载】

    本文实例讲述了微信小程序实现的贪吃蛇游戏.分享给大家供大家参考,具体如下: 先来看看运行效果: 具体代码如下: 界面布局 pages/snake/snake/snake.wxml: snake 得分 ...

  8. python 网格交易源码_网格交易策略[tb源码]

    Params Numeric InitMP(0);        // 初始仓位,+-表示多空 Numeric FirstGrid(3);        // 第一格的间距,点数 Numeric To ...

  9. Python启发式算法中爬山法的讲解及解方程问题实战(超详细 附源码)

    一.启发式算法 还有一类重要的迭代法,它的迭代关系式不依赖问题的数学性能,而是受某种自然现象的启发而得到,称为启发式算法(Heuristic Algorithm),如爬山法.遗传算法.模拟退火算法.蚁 ...

最新文章

  1. TensorFlow与PyTorch之争,哪个框架最适合深度学习
  2. castle之动态代理
  3. php匿名函数use,深入理解 PHP 匿名函数关键字 use 的 Runtime Context
  4. 文巾解题 704. 二分查找
  5. Java享元模式之字符串享元
  6. 火了这么久的 AI,现在怎么样了?
  7. QT消息/事件循环机制与多线程的关系
  8. ubuntu安装环境软件全文档
  9. 信息学奥赛一本通 1072:鸡尾酒疗法 | OpenJudge NOI 1.5 18
  10. 虚拟机网络无法连接问题解决(超简单)
  11. 数据分析之pandas-profiling
  12. HashSet、LinkedHashSet和TreeSet三者区别与联系
  13. 短信接口怎么对接?看完这篇文章你就知道了!
  14. Python基于Snap7与PLC建立连接并读写数据
  15. 一个简单的跑酷引擎-------bibibibi
  16. Unity TimeLine实用功能讲解
  17. python计算活了多少天计算器_年龄计算器-实际岁数计算器-周岁计算器-虚岁计算器-生日天数计算-活了多少天计算-虚岁怎么算...
  18. 数学建模 数理统计模型
  19. android 8 奕骆,这才是超级手机 奕骆6000mAh称霸全球 USB Type-C
  20. lt路由器的虚拟服务器如何使用,路由器设置局域网内服务器

热门文章

  1. 使用Docker还是Rocket?也许可以一起来
  2. 2019-mathorcupB题-环形穿梭机调度模型(思路篇)
  3. idea2018永久破解
  4. QTreeView使用总结--序
  5. Python输出绝对值
  6. 道路设计标高p1p2php3p4,西南交通大学19春《道路工程》在线作业12
  7. 大数据_数据中台建设的成熟度评估模型
  8. 优启通制作系统u盘_优启通U盘启动盘制作工具BIOS+UEFI版v3.3.2019.0605
  9. 如何安装Ruby和RubyGems
  10. ftpvsftpd服务