算法交易与MATLAB:规则选择

之前,我们开发了一个回溯测试框架,以校准一个简单的交易策略,以盘中数据。在这个演示中,我们将把方法扩展到三个信号:MA, RSI和Williams %R。

版权所有:The MathWorks, Inc.版权所有。

内容

加载数据

Step = 153;%分钟间隔annualScaling =√(250*60*7/step);成本= 0.01;而不是强迫客户定义和填充数据库,我们%将从准备好的数据文件中读取。如果你愿意,你可以写信%将此文件中的数据转移到您选择的数据库中,并对% GETMINUTEDATAFROMDB命令连接到它并从中读取。% LCO = getMinuteDataFromDB('LCO');负载oilData双份(布伦特);clearvarsLCO一步annualScaling成本LCO = dsample(LCO(:,2:4), step);

威廉姆斯R %

通过调整现有的移动平均线策略代码,我们可以根据相对强度指数和威廉姆斯%R制定其他交易策略。这里的关键是重用:我们只需要更改几行代码就可以从一种策略更改到另一种策略。我们可以看看这个指标,比如说,50天的窗口期:

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

威廉姆斯交易策略

每次我们越过一定的阈值时产生一个交易信号(向上是买入,向下是卖出)。我们将把我们的交易阈值设置为-20%和-80%,只改变窗口的大小,但当然,我们可以让这三个参数都是自由的。

wpr (LCO, 50、annualScaling、成本)

WPR性能

没有理由选择窗口参数50而不是其他选项;让我们浏览许多值来确定最佳参数设置。

范围= {4:4:500};wfun = @(x) wprFun(x,LCO,annualScaling,成本);tic [maxSharpe,param,sh] = parameterSweep(wfun,range);toc wpr (LCO,参数、annualScaling、成本)
运行时间为2.333903秒。

产生交易信号

现在我们将根据移动平均线、前面描述的威廉姆斯%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, annualScaling, cost);srs = rsi(LCO(:,end), [P Q], thresh, annualScaling,成本);swr = wpr(LCO, R, annualScaling,成本);信号= [sma SRS swr]; names = {“马”“肢体重复性劳损症”“WPR”};

交易信号

绘制由信号所代表的市场“状态”。下图中,绿色为多头,红色为空头。

indicatorChartALL(LCO(:,end),名称,信号)

为遗传算法生成初始种群

生成信号的初始填充

I = size(signals,2);pop = initializpopulation (I);关闭所有plotRules(流行);目标函数定义obj = @(pop) fitness(pop,signals,LCO(:,end),annualScaling,cost);

遗传算法求解

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

选项= gaoptimset(“PopulationType”“位”...“PopulationSize”、大小(流行,1),...“InitialPopulation”、流行、...“CrossoverFcn”@crossover,...“MutationFcn”@mutation,...“PlotFcns”@plotRules,...矢量化的“上”);最好= ga (obj,大小(流行,2 ),[],[],[],[],[],[],[], 选项)
优化终止:适应度值的平均变化小于options.TolFun。最佳= 0 0 0 1 0 1 1 0 1 1

评估最佳员工

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

[minSh,s,r] = obj(最佳);sh = -minSh;ruleChartALL(LCO, sh, s, r)