python 经验模态分解_经验模态分解下的日内趋势交易策略 附源码
策略分析过程参考 广发证券的研究报告。
其中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 经验模态分解_经验模态分解下的日内趋势交易策略 附源码相关推荐
- 【Python】基金/股票 最大回撤率计算与绘图详解(附源码和数据)
如果你想找的是求最大回撤的算法,请跳转:[Python] 使用动态规划求解最大回撤详解 [Python]基金/股票 最大回撤率计算与绘图详解(附源码和数据) 0. 起因 1. 大成沪深300指数A 5 ...
- 用Python玩人脸融合,想知道你未来孩子的长相?(附源码)
这次花了点时间,将百度智能云里面的人脸识别功能与python结合,进行了一场实验.结果还是蛮有成就感的,过程也挺简单,不会复杂,说不定,你就能融合出你孩子的长相了耶~ 下面我们一起敲起键盘吧! 前期预 ...
- animation基础练习源码_用vue简单写一个音乐播放组件「附源码」
作者:vipbic 转发链接:https://segmentfault.com/a/1190000022980992 前言 上次小编也分享一个关于Vue 开发过音乐播放对项目: 基于 electron ...
- Python 自动化收取蚂蚁森林能量,不错过暗恋的她(附源码)
作者 | 锅g头 来源 | Crossin的编程教室 最近在家远程工作,结果作息更混乱了,早上起不来,导致我蚂蚁森林能量天天被偷,严重影响我沙漠造树"大业".于是我决定用pytho ...
- python bokeh教程_手把手教你用Bokeh进行可视化数据分析(附源码)
Bokeh与Python可视化领域中的流行库Matplotlib和Seaborn不同,它使用HTML和JavaScript渲染其图形,这使得它在构建基于Web的应用中成为一个非常理想的候选者.它对于探 ...
- python屏幕文字识别_学会python就是如此任性,15行代码搞定图片文字识别,附源码...
python作为一门高级编程语言,它的定位是优雅.明确和简单.阅读Python编写的代码感觉像在阅读英语一样,这让使用者可以专注于解决问题而不是去搞明白语言本身.Python虽然是基于C语言编写,但是 ...
- python小程序贪吃蛇_微信小程序实现的贪吃蛇游戏【附源码下载】
本文实例讲述了微信小程序实现的贪吃蛇游戏.分享给大家供大家参考,具体如下: 先来看看运行效果: 具体代码如下: 界面布局 pages/snake/snake/snake.wxml: snake 得分 ...
- python 网格交易源码_网格交易策略[tb源码]
Params Numeric InitMP(0); // 初始仓位,+-表示多空 Numeric FirstGrid(3); // 第一格的间距,点数 Numeric To ...
- Python启发式算法中爬山法的讲解及解方程问题实战(超详细 附源码)
一.启发式算法 还有一类重要的迭代法,它的迭代关系式不依赖问题的数学性能,而是受某种自然现象的启发而得到,称为启发式算法(Heuristic Algorithm),如爬山法.遗传算法.模拟退火算法.蚁 ...
最新文章
- TensorFlow与PyTorch之争,哪个框架最适合深度学习
- castle之动态代理
- php匿名函数use,深入理解 PHP 匿名函数关键字 use 的 Runtime Context
- 文巾解题 704. 二分查找
- Java享元模式之字符串享元
- 火了这么久的 AI,现在怎么样了?
- QT消息/事件循环机制与多线程的关系
- ubuntu安装环境软件全文档
- 信息学奥赛一本通 1072:鸡尾酒疗法 | OpenJudge NOI 1.5 18
- 虚拟机网络无法连接问题解决(超简单)
- 数据分析之pandas-profiling
- HashSet、LinkedHashSet和TreeSet三者区别与联系
- 短信接口怎么对接?看完这篇文章你就知道了!
- Python基于Snap7与PLC建立连接并读写数据
- 一个简单的跑酷引擎-------bibibibi
- Unity TimeLine实用功能讲解
- python计算活了多少天计算器_年龄计算器-实际岁数计算器-周岁计算器-虚岁计算器-生日天数计算-活了多少天计算-虚岁怎么算...
- 数学建模 数理统计模型
- android 8 奕骆,这才是超级手机 奕骆6000mAh称霸全球 USB Type-C
- lt路由器的虚拟服务器如何使用,路由器设置局域网内服务器