介绍
建立任何交易系统的最初目的是预测市场工具(例如货币对)的行为。预测的目标可以不同。我们将仅限于预测货币对报价的趋势,或者准确地说是预测货币对报价的增长(多头)或下降(空头)。
为了预测货币行为,交易者将几个指标附加到货币对图表上,并尝试找到具有预测能力的模式。
本文考虑使用Rattle软件包(R统计分析系统的一个库)对模式的自动选择及其初步评估。
1.关于拨浪鼓
我们将使用R来预测货币对的行为,这是预测金融市场的理想选择。话虽这么说,R主要是一种用于合格统计学家的编程语言,并且对许多交易者来说都是无法理解的。 R的复杂性因以下事实而加剧:用于预测R的基本功能的预测工具众多且散布在许多软件包中。
摇铃 (易于学习的R分析工具)组合了一组R程序包,这对开发交易系统很重要,但对于新手来说不容易单独使用。不必了解和理解R就可以开始使用Rattle。使用Rattle的结果将是R中的代码,可用于开发真实的交易系统。但是,现阶段将需要R的知识。
无论如何,在设计交易系统阶段,拨浪鼓是不可替代的工具。它甚至使初学者也可以快速查看各种想法的结果并进行评估。
摇铃(Williams,2009)是一个免费软件,具有作为软件包创建的开源代码,它是R的一部分(R开发工作组,2011)。由于它是免费软件,因此可以不受限制地获得Rattle和R的源代码。 摇铃源代码 是用С编写的,允许并鼓励用户学习代码,进行测试和扩展。
2.源数据描述
本文执行的计算基于一个数据集,该数据集包含六种货币对EURUSD,GBPUSD,USDCHF,USDJPY,EURGBP,USDCAD的报价,并且从10.01.2011至24.12.2013期间的收盘价为Н1。数据包括超过18 000 bar,这使计算可靠。基于上述货币对的数据集用于搜索预测多头和空头头寸的模式。
带有引号的数据集可以在名为kot60_110101_131231_UA.txt的附件中找到。
2.1。创建目标变量
在第一阶段,我们必须定义我们将要准确预测的内容。尽管看似简单,但选择正确的预测目标以及将作为一组数字表示该目标的数据是至关重要的。
至于预测趋势的想法,是基于与趋势进行交易的愿望。
根据“趋势”的定义,“上升趋势是指每个连续的价格都高于早先找到的价格”,而下降趋势则相反。因此,从定义中就可以预测出货币对的价格。如果欧元兑美元的初始汇率为1.3500,而预测的汇率为1.3550,则它是上升趋势,并提示购买。
但是,基本订单是“买”和“卖”,而预测是针对价格水平的。例如,价格水平在交易系统中用于预测水平突破。为了实现趋势交易的想法,必须进行附加的价格比较。显然,我们正在预测与我们要交易的东西不同的事物!
因此,如果交易系统的设计遵循趋势,则该模型必须预测趋势。必须训练模型以识别趋势,目标变量必须仅采用两个值“购买”和“出售”。在代码(分类)形式中,目标变量将看起来像“ 1”和“ -1”。
使用源数据的总体来计算金融工具价格的模型与将源数据的总体关联到一个类的模型之间存在根本区别。第一类模型属于回归模型,第二类模型属于分类模型。
回归类型的预测模型用于将来计算某些值。当这个未来到来时,我们将具有实际价值,可以将预测的价值与之进行比较。
分类类型的预测模型用于计算预测时接收到的源数据的总体将所属的类。两个类“长”和“短”将是这样。与其他任何资格类型模型一样,这两个类别没有指定的大小。因此,“长”类不能与“短”类相比。尽管为了方便起见,我们将“ long”编码为“ 1”,将“ short”编码为“ 0”,但这并不意味着“ long”大于“ short”。为了强调这一点,对于此类定性变量R,因此Rattle具有特殊类型的分类(标称)变量。
作为目标变量的多头和空头头寸不存在,这是与下文所述独立变量的主要区别。这方面与我们将预测当前时刻不存在的未来这一事实是一致的。我们可以根据历史数据得出趋势,因为我们知道与过去有关的未来。
为了区分历史数据的趋势,我们将使用ZigZag。对于历史数据而言,这是一个极好的指示,对于实际数据而言,这是毫无用处的,因为它是最后一个链接,有时还会重绘前一个链接。由于历史数据没有动态变化,因此我们可以使用此指标绘制出非常漂亮的趋势。
参数“反转点之间的距离”等于0.0035美元的ZigZag指标用于计算目标变量。图1表示结果。
图1.锯齿形调整浪指标
现在,指标值将转换为类别值,其中“长” = 1,“短” = 0。
结果如图2所示。
图2. ZigZag指标的分类形式
让我们对目标变量执行最后一个操作。如果我们将ZigZag指标向左移动,则当前条将对应于ZigZag指标的未来值。在本文中,移动了一个小节,等于对于提前一小时使用的数据的预测提前了一步。
可以针对更大数量的柱进行移动,并且它将与针对更大数量的柱的预测相关。此方法与其他预测方法不同,在其他预测方法中,先前值可用于预测几个未来值,从而导致预测误差的总和。
本文重点介绍的模型以及一般的分类模型不会累积错误。在分类模型中,对前面两根钢筋的预测误差具有自己的预测误差,该误差与前面一根钢筋的预测误差没有任何关系。
2.2。创建自变量
之所以称为自变量或预测变量,是因为它们是从外部进入模型的。它们是外部,可测量的变量或基于这些外部变量计算的变量。任何经济和金融数据,包括货币对的报价都是自变量,因为它们的值是市场参与者活动的结果。从技术指标接收的数据与基于报价所计算的数据属于同一类别。
选择自变量与选择目标变量同等重要。实际上,选择自变量定义了建模的成功。用于模型开发的大部分时间专用于分析和选择一组自变量。
可以将源文件kot60_110101_131231_UA中包含六个货币对报价(时间和日期)的变量定义为预测变量。
从此方法的角度来看,时间和数据非常有趣。一直有尝试在交易系统中使用时间和数据。在我们的模型中,分类模型可以自动显示在一天中的某天和一周中某天有关报价依赖性的一些隐藏数据。唯一要做的就是将这两个变量转换为分类形式。时间将成为具有24个级别的类别,而日期将成为具有五个级别的分类变量,以匹配工作日的数量。
除了源预测器外,我们还将创建其他预测器,我认为这些预测器揭示了源报价中趋势的存在。我们将使用众所周知的指标来创建其他预测变量。
将采用以下指标:5,10和15; MACD(12,26,9),RSI,周期为14,21,28。最重要的是,我们将使用报价和移动平均线的增量。所有这些转换都将应用于货币对的所有六个报价。
ZigZag指标将包含在自变量的数量中,以提供支持。它不会用于开发模型,因为在最右边的栏中它的值是未知的。
因此,我们有88个自变量,一个目标变量和一个服务变量(ZigZag)。每个变量的数据量为18083条。
该数据集具有R工作区的形式,可以在本文的附件中找到,名称为TC.RData。该数据集可以按如下方式使用:
- 负载R;
- 加载Rattle库;
- 选项卡文件/工作区;
- 在磁盘上找到TC.RData文件并加载它。
3.源数据的智能分析
摇铃软件包提供了一组用于初步或智能数据处理的工具-数据挖掘。
3.1。输入和预览
让我们考虑执行以上部分中提到的操作后可获得的一些机会。
结果可以在图3所示的图片上看到。
图3.拨浪鼓主屏幕
当我们从“数据”选项卡移至“日志”选项卡时,将在Rattle中开发模型。
摇铃的第一个选项卡是Data。根据其名称,此选项卡允许加载将来可以使用的数据。
电子表格和R数据集这两个按钮是我们特别感兴趣的。
电子表格按钮允许上传Excel文件。如果读者想测试他们的想法,他们可以准备自己的Excel文件,然后尝试Rattle。
要重复本文中描述的操作或对包含本文所附原始数据的文件执行一些其他操作,请使用R Dataset按钮。此按钮以R格式加载文件。该文件称为“工作目录”或“工作文件”。它们在.RData磁盘上具有扩展名。可以将该文件上传到R,然后单击该按钮即可使用。
上载我们准备好的文件,得到图4上图的上部和图5上图的下部。
图4.源文件的上部
图5.源文件的下部
3.2。目标变量与自变量的相关性
注意。 “运行”按钮起着至关重要的作用。该动作已准备好,但未执行。要执行任何操作,请按“运行”按钮。每次重复本文中描述的操作时都必须这样做。
图4显示了变量列表,它们的特征以及这些变量的作用。由于我们不会在模型中使用ZigZag指标,而且无论如何也无法做到这一点,因此我们将其标记为要忽略的指标,即设置为“忽略”。
除最后一个变量(用作目标变量)外,其他变量用作输入变量。
“分区”按钮对于证实信任级别对建模结果起着重要作用。如果需要,可以使用此按钮将数据集分为三部分。在此阶段,将指定用于训练,验证和测试模型的数据集的比例。
在下一个字段中,指定用于伪随机数传感器的种子。例如,为训练数据集收集的源数据中有70%是从源数据集中随机选择的。结果,其他15%的部分(如我们的情况)也是随机条形序列。
因此,从源数据集更改“种子”,就可以获得数量不确定的各种训练和其他数据集。
图6.变量的相关性
在收到的表中找到名称为ZZ.35的列。下表中显示的样本是从该列中获取的。
变量 | ZZ.35 |
---|---|
RSI_cad.14 | -0.0104122177 |
JPY.dif2 | -0.0088412685 |
EUR.dif3 | -0.0052379279 |
CHF.dif3 | -0.0049692265 |
GBP.dif3 | -0.0047409208 |
GBP.dif1 | 0.0044691430 |
MA_cad.15.dif1 | -0.0039004722 |
JPY.dif1 | -0.0023831247 |
GBP.dif2 | -0.0015356091 |
EUR.dif2 | -0.0013759749 |
CHF.dif2 | -0.0012447101 |
EUR.dif1 | 0.0005863149 |
MA_cad.10.dif1 | 0.0023981433 |
CHF.dif1 | 0.0024543973 |
MA_gbp.5.dif1 | 0.0043757197 |
MA_cad.5.dif1 | 0.0075424397 |
MA_gbp.10.dif1 | 0.0094964069 |
EURGBP.dif1 | 0.0095990416 |
CAD.dif1 | 0.0110571043 |
表格1。 变量相关
我们可以看到,与ZZ.35的相关性小于0.01的变量列表很长。小于0.1的相关水平不允许得出关于自变量对目标变量的影响的任何结论。
在这一阶段,我们将注意到这一事实,并在评估模型后适当使用它。
在分类模型中,预测变量对目标变量的影响程度起着非常重要的作用。在低相关级别,匹配预测变量被认为是模型中的噪声,从而导致对其进行重新训练。重新训练模型是指模型开始考虑细节和对目标变量无关紧要的预测变量时。
在相关级别上没有建议。通常,他们使用神奇的统计数字-5%。本质上是错误的。删除模型中的噪声即预测变量,可以减少预测误差。移除不是模型中的噪声的预测变量会导致预测误差的增加。因此,通过实验确定了对模型有用的最小预测变量列表。
3.3。缩放比例
一些模型,例如支持向量机(SVM),对不同规模的预测变量非常敏感,这意味着以下内容。例如,货币对EURUSD的数据在0.5的范围内变化,而USDJPY在几十个单位内的变化。要排除不同比例的预测变量,可以在“转换”选项卡中将其缩放到一个比例。预测变量的波动最好在[0-1]的范围内发生。
要执行缩放,请选择“变换/重新缩放/缩放[0-1]”。之后,我们勾选所有变量,然后按“运行”按钮。
3.4。转换为分类形式
转换为分类形式可以将数值变量的值转换为具有多个级别的因子。 RSI指标是第一个转换为多级因子的指标。据信,当其值接近零或100时,它显示出趋势反转。
要将RSI指标的值转换为分类形式,请选择:转换/重新编码/ KMeans。这样做,将因子级别数设置为8。勾选所有RSI指示器,然后按“运行”。
将ZZ.35变量设置为忽略之后,我们可以继续开发模型。
4.分类模型的通用算法
摇铃中提供以下型号:
- 树状分类模型(Tree);
- 随机森林模型(森林);
- 助推树模型(ada);
- 支持向量机模型(SVM);
- 广义线性模型(glm);
- 神经网络模型(NNET)。
尽管分类模型之间存在根本差异,但是(我们不仅仅讨论Rattle中可用的模型)它们都具有以下共同特征。
让我们采用由字符串组成的训练集(在我们的情况下为18030),其中包含预测变量的值(在我们的情况下为88)和目标变量的值(“ long”和“ short”)。
任何分类算法都解决了将对应于“长”的预测值的组合与对应于“短”的预测值的组合分离的问题。这是训练模型的阶段。
然后,进入验证模型的阶段。
当我们将源数据集分为三部分时,我们采用另一个数据集,并考虑将预测变量的组合与训练阶段收到的预测变量进行比较。如果预测变量的每个组合属于“短”或“长”,则将建立该组合。由于验证数据集包含那些已知值,因此将结果与事实数据进行比较。实际多头和空头头寸与预测头寸的比率是预测误差。
如果结果不适合我们,我们可以返回到智能数据分析阶段以改善结果。不幸的是,这个阶段的质量完全取决于交易者的经验。在源数据集中进行更改,然后再次开发模型。
如果我们发现在训练和验证数据集上获得的结果令人满意,那么我们将在测试数据集上验证模型,即尚未使用的模型。
模型质量不仅由较小的预测误差定义,而且由不同数据集上此误差的值之间的较小差异定义。这显示了模型的鲁棒性,没有再培训的机会,或者被贸易商称为超调整。
在本文中,将仅详细介绍随机森林模型。
5.随机森林模型
5.1。概要
交易者工作的算法如下。将一组指标添加到货币对的报价中,并根据当前报价和指标数据的总和做出交易决策。
在最简单的交易系统“移动平均线”中,如果当前价格高于移动平均线,他们将进行购买,如果当前价格低于移动平均线,则将其出售。他们可以添加其他条件,例如从RSI指示器接收的数据。结果,交易者得到了决策树。在那棵树的叶子中,有货币对的报价,移动平均线的值和RSI指标。树的根仅包含两个值-“购买”和“出售”。
所描述的构建树的过程在分类树的模型中是自动化的。结果,只有一棵树,或者在交易员的'语中,只有一种树。
单棵树的算法无法建立精确的模型,因为多样性会导致不稳定,这在构建单独的决策树时可以看出。
读者可以使用Rattle中的Tree模型自己验证此语句。该模型实现了所描述的构建树的算法。
随机森林模型的思想是在模型中包括许多分类树(模式),而不仅仅是一个。因此,随机森林倾向于对数据更改和噪声(即对目标变量影响很小的变量)具有更高的抵抗力。
随机森林算法使用的随机性体现在表行(观察)和预测变量的选择中。与独立树状分类器相比,这种随机性定义了对噪声,离群值和再训练的显着抵抗力。
概率还定义了显着的计算效率。通过建立独立的决策树,模型的开发人员可以选择训练数据集中可用的随机观察子集。此外,在建立树的过程的每个节点中,他们在确定最佳分割数据集比例时仅考虑所有可用变量的一小部分。这导致对计算性能要求的显着放松。
因此,出于多种原因,随机森林模型是开发模型的不错选择。通常情况下,由于不应该对数据进行标准化,并且需要灵活处理异常值,因此需要进行少量的初步数据处理。由于算法有效地选择了自己的变量集,因此可以避免选择变量的必要性。由于使用两级随机性(观测值和预测值)来构建大量树,因此每棵树都是有效的独立模型。该模型不易于在训练数据集上进行再训练。
随机森林的算法通常生成100到500棵树。开发最终模型时,通过对树进行相等处理来整合每棵树做出的决策。组装树木的最终决定将是组成树木的主要部分的决定。如果100棵树中有51棵树指向“长”,那么“长”的值将被接受,但置信度较低。
5.2。算法
5.2.1。从数据集中形成样本
形成随机树的算法使用自举聚合或装袋法生成许多决策树,简而言之就是将随机性引入样本形成过程。引导聚合是一种将观察结果的随机样本收集到袋子中的想法。许多以随机顺序形成的袋子包括从训练数据集上的源观测值接收到的选定观测值。
整理到袋子上进行替换。这意味着每个观察结果都有可能在某个袋子中多次出现。样本大小通常与完整数据集相同。实践表明,三分之二的观察值将被包含在一个袋子中(有重复项),而三分之一将不被考虑在内。每袋观察值都用作构建决策树的训练数据集。未说明的观察结果可以用作评估结果的独立样本。
5.2.2。形成预测因素的选择
随机性的第二个基本要素涉及用于拆分数据集的预测变量的选择。在创建单独的决策节点的每个步骤中,即在树的每个分割点处,选择随机且通常很小的一组预测变量。仅考虑在分割点选择的预测变量。对于构建树中的每个节点,他们会考虑不同的随机预测变量集。
5.2.3。随机性
它们形成数据和变量的随机集合,它们根据数据子集接收具有各种结果的决策树。这种变化使我们可以将这组树木作为具有不同能力水平,可以做出最可靠预测的合作专家团队来对待。
样品形成还具有另一个有意义的优势-计算效率。拆分数据集时,仅考虑预测变量总数的一小部分,可大大减少所需的计算量。
创建每个决策树后,形成随机树的算法通常不会削减决策树。具有超调整树的随机森林可以开发出非常好的模型,该模型在新数据上效果很好。
5.2.4。装配中的计算
当将许多决策树视为一个模型时,每棵树在最终决策中都同样重要。简单多数决定结果。这意味着51%的拆分和99%的拆分将产生相同的类,例如“ long”。
当用户以类的形式获取结果时,Rattle的计算是不完整的。如果在R中使用该模型,则可以使用类概率形式的结果。
5.3。开发随机森林模型
要构建模型,请选择“模型/林”。开始计算模型将需要几分钟的时间来获取我们的源数据。
我将计算结果分为几个部分,并对每个部分进行评论。
让我们回顾一下图7带来的结果。
图7.随机森林模型调整结果的上部
此图上的一些信息应突出显示。
TREND是目标变量。
建立此模型时生成了500棵树。在拆分树的每个节点时,使用了9个预测变量(变量)。此外,错误和OOB ROC按钮是我们特别感兴趣的。
然后遵循预测错误,如下所示:
OOB错误率估计: 15.97%
混淆矩阵:
0 | 1 | 类错误 | |
---|---|---|---|
0 | 4960 | 1163 | 0.1899396 |
1 | 858 | 5677 | 0.1312930 |
表2.训练集的误差矩阵列式表
应该将其解释为“出袋错误率为15.97%”。
所获得的预测误差是显着的。重要的是弄清楚它是如何获得的或精确的,如果它是“袋装”获得的。仅一部分训练数据集用于开发此模型。反过来,此模型构成了源数据集的70%。大约60%的训练数据集用于构建此模型,而40%的未使用。这40%的数据称为“ Out of bag”。在该数据上收到了15.97%的预测误差。
继续。
列联表或错误矩阵的解释如下。
第一行包含预测的空头和多头头寸。左侧列是一列实际的空头和多头头寸,它是从ZigZag指标接收的历史数据。
坐标为(0,0)的值4960是正确预测的空头和多头位置的数量。下一个值1163是预测为多头的空头数量。
坐标为(1,0)的858的值是预测为空头的多个多头头寸。 5677的值是正确预测的多头头寸的数量。
然后,我们继续进行建模的结果。
下面是包含该模型的所有变量的大表的几行。这是变量重要性的表。
0 | 1 | 平均降低精度 | 平均下降基尼 | |
---|---|---|---|---|
MA_eur.5.dif1 | 42.97 | 41.85 | 54.86 | 321.86 |
EUR.dif3 | 37.21 | 46.38 | 51.80 | 177.34 |
RSI_eur.14 | 37.70 | 40.11 | 50.75 | 254.61 |
EUR.dif2 | 24.66 | 31.64 | 38.24 | 110.83 |
MA_eur.10.dif1 | 22.94 | 25.39 | 31.48 | 193.08 |
CHF.dif3 | 22.91 | 23.42 | 30.15 | 73.36 |
MA_chf.5.dif1 | 21.81 | 23.24 | 29.56 | 135.34 |
表3.随机森林模型中变量的重要性
对于变量的重要性有几种评估。这里的“重要性”一词反映了某个变量对目标变量的影响程度。值越大,变量越“重要”。
该表提供了用于从模型中排除最低有效值的数据。在统计尤其是分类中,只要不牺牲模型的准确性,模型越简单越好。
“错误”按钮是“模型”选项卡中的最后一件重要的事情。按下它,我们将收到图8。
图8.建模误差对树数的依赖性
6.模型效率
在“评估”选项卡中可以对模型效率进行评估,其中Rattle可以访问该选项集。
在模型效率评估的可用选项列表中,我们将使用以前称为“偶然性表”的“误差矩阵”。
从“模型”选项卡移至“评估”选项卡时,将自动标记最后创建的模型。它符合Rattle中的一般工作原理:我们创建并建立模型,然后在“评估”选项卡中探索其效率。
为了评估模型,必须指定用于执行检查的数据集。 摇铃界面中的下一行选项是一组备用数据源。
数据的前四个选项对应于拆分“数据”选项卡中指定的数据集。选项包括“培训”,“验证”,“测试”和“完整”(整套)。已经讨论过将数据集分为训练,验证和测试的集合。
第一个选项应该在训练数据集上验证模型。通常这不是一个好主意。在训练数据集上评估模型的问题在于,模型是建立在该数据集上的。在那里,该模型将提供良好的结果,因为它最初是我们试图实现的目标。该模型旨在用于以前未知的数据。
需要一种方法来确保模型在新数据上的良好性能。同时,我们获得了模型误差的实际评分,反映了模型预测与实际数据之间的差异。对未知数据集(而不是训练数据集)的这种错误评级是评估模型效率的最佳方法。
我们使用Validation数据集在模型创建和建立时对模型效率进行验证。因此,在创建模型之后,将在此验证数据集上验证其效率。可以更改一些用于创建模型的设置选项。我们根据验证数据集将新模型与旧模型的效率进行了比较。从这个意义上讲,验证数据集在建模中用于开发最终模型。因此,如果我们依靠验证数据集,我们对模型效率的估计仍会发生变化。
测试数据集是完全没有用于创建模型的数据集。一旦我们根据培训和验证数据集确定了“最佳”模型,就可以在测试数据集上评估该模型的效率。这是对任何新数据的预期效率的评估。第四个选项使用完整数据集评估模型。完整的数据集是“培训,验证和测试”数据集。这不过是好奇心,当然不是试图获得精确数据的尝试。
通过样本条目提供的另一个机会是作为数据源。如果选择“分数”选项作为评估类型,则可以使用该选项。在这种情况下,将打开一个用于输入其他数据的窗口。
误差矩阵将用于预测分类目标变量。
误差矩阵显示了与预测结果相反的事实结果。有两个表。第一个显示定量结果,第二个显示百分比结果。
可以在Rattle的“评估”选项卡中找到错误矩阵。按下“运行”将在指定的数据集上实施所选模型,以预测该数据集中每个观测值的结果。然后将预测结果与实际观察结果进行比较。
图9表示先前计算的随机森林模型的误差矩阵。
图9.随机森林模型的评估结果
该图显示平均误差为0.167,即16.7%。在训练阶段,预测误差为15.97%。我们可以认为这些值相等。
让我们为“测试”数据集执行计算。结果如下:
TC [测试]上的随机森林模型的误差矩阵(计数):
预料到的 | 预料到的 | |
---|---|---|
实际 | 0 | 1 |
0 | 1016 | 256 |
1 | 193 | 1248 |
表4.以绝对值表示的随机森林模型的误差矩阵(测试数据集)
TC [测试]上的随机森林模型的误差矩阵(比例):
预料到的 | 预料到的 | ||
---|---|---|---|
实际 | 0 | 1 | 错误 |
0 | 0.37 | 0.09 | 0.20 |
1 | 0.07 | 0.46 | 0.13 |
表5.相对森林随机森林模型的误差矩阵(测试数据集)
总体错误:0.1654994,平均类错误:0.1649244
预测误差为16.4%。
所有三个数字都大致相等,这是建模结果合理的标志。
请注意,必须在МetaТrader4或MetaTrader 5的策略测试器中检查由Rattle计算的模型的效率。然后,应在小额模拟账户和真实账户中对其进行测试。只有在所有测试运行之后,我们才能得出有关该模型的最终结论。
7.改进模型
当我们探索伪变量ZZ.35与预测变量的相关性时,我们发现大量预测变量与目标变量的相关性较弱。
让我们删除相关系数小于0.01的预测变量。为此,在“数据”选项卡中将相关预测变量设置为“忽略”,然后在“模型”选项卡中重复计算随机森林模型。
我们得到以下结果:
- 袋外预测误差= 15.77%;
- 验证数据集的预测误差= 15.67%;
- 测试数据集的预测误差= 15.77%。
尽管误差无显着降低,但不同数据集的预测误差之间的差距已减小。这是模型稳定性的标志。
您可以继续删除相关表之后的预测变量。使用在计算模型时获得的预测变量重要性表中的数据,可以提高模型有效性,即降低预测误差。
在任何情况下,都可以删除预测变量,直到删除另一个预测变量导致模型效率降低。您可以在此停止,因为对于给定数量的预测变量,您拥有最小且最有效的模型。
8.在MetaTrader 4中使用模型
从理论上讲,可以通过以下方式组织使用Rattle进行交易。在白天和晚上,一些外部工具正在准备Excel中Rattle的输入数据。交易所关闭后,交易者获得所需的价格并将其放入源文件中。几分钟后,即可准备好第二天的预测,并可以从开幕之日起直接使用。
当天交易需要МetaТrader4终端或其类似物。
要使用Rattle组织自动或半自动交易,需要以下成分:
- 先前训练过的模型,已保存为R工作区;
- 终端与R合作的图书馆;
- R中的代码将每个新的数据块传递给模型,获取结果并将建模结果发送回终端。
上面已经考虑过训练Rattle中可用的六个模型之一。 R中可用的分类模型数量多达150个,但是Rattle对它们没有用。
R和МetaТrader4终端的交互库可以在CodeBase中找到: mt4R用于新的MQL4.
R中的代码(与经过训练的模型相对应)位于日志中(“日志”选项卡)。在模型开发中执行的所有操作均以R中的代码形式注册。这就是实际交易中要使用的内容。
结论
新手和经验丰富的交易者都将发现本文对初步评估和选择交易系统很有用。
使用Rattle,开发交易系统的主要智力挑战是正确选择目标变量和所需的预测变量。经验丰富的交易者已经在这一领域有所了解,新手将对Rattle进行必要的练习。
由MetaQuotes Software Corp.从俄语翻译而来。
来源文章: //www.tbxfkj.com/ru/articles/1165