使用MATLAB的算法交易:规则选择

以前,我们开发了一个后退测试框架,以校准简单的交易策略以播出日内数据。在此演示中,我们将使用将方法扩展到三个信号:MA,RSI和Williams%r。

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

内容

加载数据

步骤= 153;%分钟间隔年度标准= SQRT(250*60*7/step);成本= 0.01;%而不是强迫客户定义和填充数据库,我们%将从准备好的数据文件中读取。如果愿意,你可以写%来自此文件的数据到您选择的数据库并调整%getMinudedatafromdb命令可以连接并从中读取。%lco = getminudedatafromdb('lco');加载Oildatalco = double(brent);清晰-除了LCO年度尺度成本lco = dsample(lco(:,2:4),步骤);

威廉姆斯%r

通过调整现有的移动平均策略的代码,我们可以根据相对强度指数和Williams%r制定其他交易策略。这里的关键是重复使用:我们只需要更改几行代码即可从一种策略更改为另一种策略。我们可以使用一个50天的窗口来查看此指标:

w = willpctr(LCO,50);IndiesatorChartwpr(w)

威廉姆斯%r交易策略

每次我们越过某些阈值时,都会产生交易信号(上涨,下降是卖出)。我们将把交易阈值设置为-20%和-80%,并且仅改变窗口的大小,但是当然,我们可以将这三个是免费参数。

WPR(LCO,50,年度规模,成本)

WPR性能

没有理由比其他可能性更喜欢50的窗口参数。让我们扫描许多值以识别最佳参数设置。

范围= {4:4:500};wfun = @(x)wprfun(x,lco,年度规模,费用);tic [maxsharpe,param,sh] = parameters -weep(wfun,range);TOC WPR(LCO,参数,年度尺度,成本)
经过的时间为2.333903秒。

生成交易信号

现在,我们将根据移动平均线,上述Williams%R以及相对强度指数生成三个不同的交易信号。每个模型的参数已经独立确定。如果我们愿意,我们可以轻松地确定最佳参数集。

%n = 25;M = 650;阈值= 80;p = 400;Q = 34;r = 10;n = 1;M = 129;p = 22;Q = 14;r = 24;阈值= 80;SMA = LeadLag(lco(:,end),n,m,年度尺度,成本);srs = rsi(lco(:,end),[p q],阈值,年度尺度,成本);swr = wpr(lco,r,年度规模,成本);信号= [SMA SRS SWR]; names = {'嘛',,,,'rsi',,,,'wpr'};

交易信号

绘制由信号代表的市场的“状态”。在底部地块上,绿色是一个长位置,红色是一个短位置。

indiacatorChartall(lco(:,end),名称,信号)

生成遗传算法的初始种群

产生信号的初始人口

i = size(信号,2);pop = initializepopulation(i);关全部情节(1,pop);目标功能定义%obj = @(pop)健身(流行,信号,lco(:end),年度尺度,成本);

用遗传算法求解

查找最佳交易规则和最大夏普比率(最小值比率)

选项= gaoptimset(“人口类型”,,,,'bitstring',,,,...“人口化”,大小(pop,1),...“初次人群”,流行音乐,...“跨界”, @Crossover,...'MutationFCN', @munt,...“ plotfcns”,@plotrules,...“矢量化”,,,,'在');最好
优化终止:健身价值的平均变化小于option.tolfun。最佳= 0 0 0 1 0 1 1 0 1 1 1

评估表现最好的人

以最佳价值评估目标,并以最佳夏普比率翻转符号约定。

[Minsh,S,R] = OBJ(最佳);sh = -minsh;Rurechartall(LCO,SH,S,R)