使用MATLAB进行算法交易:移动平均规则

此演示使用MATLAB使用指数移动平均线开发和测试简单的交易策略。

版权所有2010-2012,Mathworks,Inc。保留所有权利。

内容

(重新)加载数据

data = xlsread('brent_1d.xlsx');lcoclose =数据(:,3);每年= SQRT(250);

使用函数来自动执行我们的工作流程

引领LAG.函数从上一个脚本中复制大多数功能,并以可重用的格式将其放置。我们所需的只是指定的是历史数据,我们的领先和滞后日长度,以及我们的缩放参数。

我们可以通过将前平均值设定为1(即,完全不是平均值)和滞后的平均值来证明这种功能的使用和滞后的平均值。

Leadlag(Lcoclose,1,20,年度级)

执行简单的参数扫描

执行参数扫描以识别给定最佳滞后参数,给出1的前望值1。

夏普=南(100,1);为了m = 1:100 [〜,〜,夏普(m)] =铅液(Lcoclose,1,m);结尾[〜,mxind] = max(灰色);Leadlag(Lcoclose,1,Mxind,年度级)

估计在一系列值范围内的参数

允许移动平均长度变化并识别最佳组合。

夏普=南(100,100);Tic.为了n = 1:100为了m = n:100 [〜,〜,锐利(n,m)] = leglag(lcoclose,n,m,年度级);结尾结尾TOC.%我们可以再次使用绘图工具来创建自定义图。在这种情况下,%我们以前导和滞后的函数显示锐利比率% 天。MATLAB可以轻松地使用曲面和曲面展开3D数据%轮廓图。Sweepplotma(夏普)
经过时间为4.412662秒。

绘制最佳锐利比率

[〜,最好] = max(夏普(:));最大值的%(线性)位置[BESTM,BESTN] = IND2SUB(100,最佳);%铅和滞后最佳值Leadlag(Lcoclose,Bestm,Bestn,年度级)

更多自动化和更真实的考虑因素

接下来,我们将添加与出价/询问传播相关的交易成本。这将使我们更接近我们期望的实际利润。作为练习,您应该将此扩展到额外的交易费用和滑动考虑因素。

另请注意,我们已经自动化了我们的参数扫描过程。就像以前一样,当我们调整脚本进入引领LAG.功能,我们现在正在服用双| |循环上面并将其转换为自己的功能。

成本= 0.05;%出价/问蔓延范围= {1:120,1:120};%前导和滞后的平均参数范围llfun = @(x)Leadlagfun(x,lcoclose,年度尺寸,成本);TIC [MAXSHARPE,PARAM,SH,VAL] =参数Weep(Llfun,Range);TOC.%绘图夏普表面Sweepplotma(vars {1},vars {2},sh)%plot最佳锐利比率图Leadlag(Lcoclose,Param(1),Param(2),年度级,成本)
经过时间为1.811124秒。