本例展示如何将数据分成训练集和测试集。我们将回测一个配对交易策略,在训练集上优化参数,在测试集上观察效果。

GLD代表黄金的现货价格,GDX是一揽子采金企业股票,两者的价格是高度相关的,故GLD和GDX可用于做配对交易。不过我要到第7章才会讲训练集上的协整分析,结果表明,GLD多头和GDX空头所形成的差价呈均值回归。通过训练集上的回归分析可得出GLD和GDX之间的对冲比率,并设定配对交易策略进出市场的阀值。从后面可以看到,阀值在训练集上的优化会改变策略在测试集上的业绩。(程序文件可从epchan. com/book/example3-6.m下载,数据文件为GLD. xls和GLD.xls。)程序使用滞后命令,将时间序列滞后一期,这在epchan.com/book中也能找到。还会使用“普通最小二乘法(OLS)”命令进行线性回归,在spatial-econometrics.com上可免费打包下载。

使用MATLAB

%清除工作空间已有变量

clear;

%将“GLD.xls”读入MATLAB

[num,txt]=xlsread('GLD');

%第一列(从第二行开始)是交易日,格式为mm/dd/yyyy

tdayl=txt(2:end,1);

%将时间格式转化为yyyymmdd

tdayl=…

datestr(datenum (tdayl,'mm/dd/yyyy'),'yyyymmdd');

%将数据字符串转化为单元型变量,再转化为数值型变量

tdayl =str2double(cellstr(tdayl));

%最后一列是调整后收盘价

adjclsl=num(:,end);

%读入“GDX. x1s”

[num,txt]=xlsread('GDX');

%第一列(从第二行开始)是交易日,格式为mm/dd/yyyy

tday2=txt(2:end,1);

%将时间格式转化为yyyymmdd

tday2=…

datestr(datenum (tday2,'mm/dd/yyyy'),'yyyymmdd');

%将数据字符串转化为单元型变量,再转化为数位型变量

tday2=str2double(cellstr(tday2));

%最后一列是调整后收盘价

adjcls2=num(:,end);

%找到两组数据的交集并按升序排列

[tday,idxl,idx2]=intersect(tdayl,tday2);

cll=adjclsl(idxl);

c12=adjcls2(idx2);

trainset=1:252;%定义训练集一标

%定义测评集下标

testset = trainset(end)+1:length(tday);

%用回归函数计葬得到对冲比率

results=ols(cll (trainset),c12(trainset));

hedgeRatio= results. beta;

%差价=GLD一对冲比率*GDX

spread=cll一hedgeRatio*c12;

plot(spread(trainset));

figure;

plot(spread(testset));

figure;

%训练集平均差价

spreadMean= mean(spread(trainset ));

%训练集差价标准差

spreadStd =std(spread(trainset));

%差价标准化(用z-scores方法)

zscore = (spread一spreadMean). /spreadStd;

%在组合价值向下跌破2倍标准差时,购买此差价组合

longs=zscore<=一2;

%当组合价值上升超过2倍标准差时,做空该差价组合

shorts=zscore>=2;

%当组合价值回到1倍标准差以内时,清仓

exits=abs(zscore) <=1;

写初始化头寸数组

positions=NaN(length Way),2);

%多头入市

positions(shorts,:)= repmat[一1 1],[length(find(shorts))1]);

%空头入市

positions(longs,:)=repmat([1一1],[length(find(longs))1]);

%清仓

positions(exits,:)=zeros(length(find(exits)),2);

%确保继续持仓,除非出现清仓信号

%positions= fillMissingData(positions);

cl=[cllc12];%合并两个价格序列

dailyret=(cl一lagl(cl))./lagl(cl);

pnl=sum(lagl(positions).*dailyret,2);

%训练集的夏普比应该足2.3

sharpeTrainset=…

sgrt(252)*mean(pnl(trainset(2:end)))./std(pnl(trainset(2:end)))

%测评集的夏普比应该是1.5

sharpeTestset =sgrt(252)*mean(pnl(testset))./std(pnl(testset))

plot(cumsum(pnl(testset )));

sharpeTestset = sqrt(252)*mean(pnl(testset))./std(pnl(testset))

plot(cumsum(pnl(testset)));

%保存头寸文件以便检查数据先窥偏差

save example3-6-positions positions;

文件lagl. m:

function y=lagl(x)

%y=lag(x)

if(isnumeric(x))

%第一个元素填充为NaN

y=[NaN(1,size(x,2));x(1:end一1,:)];elseif(ischar(x))

%第一个元素填充为”

Y=[repmat(””,[1 size(x,2)]);x(1:end一1,:)];else error('Can only be numeric or char array’);

End

此配对交易策略在训练集和测试集上的夏普比率都很高,因此可认为它是无数据迁就偏差的。但也许还有进一步改进的空间。若把建仓阀值改为1倍标准差、清仓阀值改为0.5倍标准差,训练集上的夏普比率会上升到2.9 ,测试集上的夏普比率会上升到2.1。显然,这一阀值集更佳。

不过,在训练集上进行参数优化也许会降低测试集上的业绩。这种情况下,应选择使得训练集和测试集上的业绩结果都较好(也许不是最好)的参数集。

我没有将交易成本考虑在内(下一节会讨论交易成本)。读者可以自己做练习。由于这一策略不是频繁交易,因此,交易成本对所得的夏普比率影响并不大。

为观察这一策略是如何工作的,读者可参见所显示的差价。你将看到差价走势呈现出很明显的均值回归。因此,不断地低买高卖是很管用的。

最后,还要检测任何可能的数据前视偏差。在上面的MATLAB代码“cl2=adjcls2 (idx2);”之后,添加以下代码。

%将最近的交易日数据移除掉

cutoff=60;%移除最近60天的数据

tday(end一cutoff+l:end,:)=[];

cll(end一cutoff +l:end,:)=[];

c12(end-cutoff+1:end,:)=[];

将以下代码放在上面MATLAB程序的结尾,取代“save example3_6_positions positions”。

%检测数据先窥偏差的第二步

oldoutput=load (’example3-6-positions');

oldoutput. positions(end一cutoff+1:end,:)=[];

if (any( positions~=oldoutput. positions))

fprintf(1.'Program has look-forward-bias!\n')

End

将新的代码保存为“example3 - 6 - 1. m”并运行,你会发现“Program has look-forward-bias”语句不会被打印出来,这说明算法通过测试了。

matlab将数据集分成训练集和测试集,如何将数据分成训练集和测试集?相关推荐

  1. 大数据ab 测试_在真实数据上进行AB测试应用程序

    大数据ab 测试 Hello Everyone! 大家好! I am back with another article about Data Science. In this article, I ...

  2. ES 7.6.2集群迁移(从一套ES集群迁移数据到另一套集群)

    有时有需要从ES集群中去除多个节点的需求,比如迁移一套ES集群到另外一套ES集群,这时可以先将新的ES节点加入到现有集群里,再将老ES节点下线. 一 实验环境  ​​​​​二 实验步骤 2.1 集群扩 ...

  3. python机器学习 train_test_split()函数用法解析及示例 划分训练集和测试集 以鸢尾数据为例 入门级讲解

    文章目录 train_test_split()用法 获取数据 划分训练集和测试集 完整代码脚手架 train_test_split()用法 python机器学习中常用 train_test_split ...

  4. R语言使用lm构建线性回归模型、并将目标变量对数化实战:模型训练集和测试集的残差总结信息(residiual summary)、模型训练(测试)集自由度计算、模型训练(测试)集残差标准误计算

    R语言使用lm构建线性回归模型.并将目标变量对数化实战:模型训练集和测试集的残差总结信息(residiual summary).模型训练(测试)集自由度计算.模型训练(测试)集残差标准误计算(Resi ...

  5. 为什么神经网络模型在测试集上的准确率高于训练集上的准确率?

    为什么神经网络模型在测试集上的准确率高于训练集上的准确率? 种花家的奋斗兔 2020-03-21 17:28:37  5847  已收藏 11 分类专栏: Deep Learning 文章标签: dr ...

  6. NLP文本情感分析:测试集loss比训练集loss大很多,训练集效果好测试集效果差的原因

    NLP情感分析:测试集loss比训练集loss大很多 一.前言 二.原因 一.前言 最近在学习神经网络自然语言处理的相关知识,发现运行的之后测试集的loss比训练集的loss大很多,而accuracy ...

  7. 在数据中随机抽取一定比例的数据为训练集,剩下的为测试集的小方法

    在进行常见机器学习任务中,我们经常会随机抽取一定比例的数据为训练集,而剩下的为测试集.一般情况下都比较繁琐,所以看了其他的博客之后,准备了一个小函数实现这个功能. EG: def getRandomI ...

  8. 训练softmax分类器实例_一个值得深思的问题?为什么验证集的loss会小于训练集的loss...

    编辑:zero 关注 搜罗最好玩的计算机视觉论文和应用,AI算法与图像处理 微信公众号,获得第一手计算机视觉相关信息 在本教程中,您将学习在训练自己的自定义深度神经网络时,验证损失可能低于训练损失的三 ...

  9. [caffe学习笔记]用自己的数据进行训练和测试

    我今天尝试制作一个自己的训练数据集,参考薛开宇的学习方式,模仿搭建自己的数据库. 1.因为我的电脑里有整个ImageNet_ILSVRC2012的数据集,所以从训练集ILSVRC2012_img_tr ...

  10. 一个值得深思的问题?为什么验证集的loss会小于训练集的loss

    在本教程中,您将学习在训练自己的自定义深度神经网络时,验证损失可能低于训练损失的三个主要原因. 我的验证损失低于训练损失! 怎么可能呢? 我是否意外地将训练和验证loss绘图的标签切换了? 潜在地. ...

最新文章

  1. 【Fiddler学习】Fiddler抓包HTTPS请求和手机抓包
  2. 联想云:借助云计算助力中国企业数字化转型
  3. APK加密方法:某社交类Android APP加密分享
  4. 结对项目-WordCount
  5. QComboBox可以随意设置itemData的数值
  6. 数据库死锁_死锁荔枝_解决方法
  7. DataOutputStream 类 和DatainputStream类 的主要方法简单介绍,及代码演示。
  8. MongoDB副本集学习(一):概述和环境搭建
  9. Best quotes from The Vampire Diary(《吸血鬼日记》经典台词)
  10. 【优化预测】基于matlab粒子群算法优化DBN预测【含Matlab源码 1420期】
  11. 破解密码很难?利用Python自动编写暴力破解字典,***必学技能!
  12. cmos逻辑门传输延迟时间_组合逻辑电路详解、实现及其应用
  13. 有线网口设备转为无线wifi,RJ45网口转wifi,即插即用,网卡转无线wifi完全透传
  14. 致联系报考我免试研究生的同学们-山世光 研究员-中科院计算所
  15. 操作系统独木桥问题解法
  16. 【积水成渊-逐步定制自己的Emacs神器】1:Emacs入门
  17. 5G系统——UE移动性
  18. python数字华容道算法_Python 3*3数字华容道源代码
  19. 编程极简入门(python)-07-批量处理
  20. 一个小项目--银行项目

热门文章

  1. 超级实用springBoot学习
  2. CAD中属性编辑操作——对象属性
  3. 蔡学镛谈Java学习
  4. [蓝桥杯python] Sine之舞 :最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功。所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐
  5. 分布式存储问题及解决方案
  6. 控制工程中的数学建模(1)——二阶有源低通滤波器(之一)
  7. linux鼠标指针隐藏,触摸屏鼠标指针隐藏消失方法
  8. 微信美食菜谱小程序系统毕业设计毕设(6)开题答辩PPT
  9. yuki翻译器钩子_最新YUKI GALGAME翻译器下载地址电脑版-CC软件
  10. 推荐一款使用快捷的免费文字识别OCR(图片转文字)在线服务