交易中的机器学习:理论、模型、实践和算法交易 - 页 28

 
mytarmailS:
我已经这样做了,神经网络不会在更大的地平线上学习我给它的目标。

我对你的话报以微笑。

它不是一个不学习的神经网络,而是你让它不学习,字面上的意思。神经网络会学习除噪音外的信号,但你的任务是在伟大的神经网络的帮助下将这些信号从噪音中分离出来,而不让它重新学习。

 
阿列克谢-伯纳科夫
这是一个比较正确的答案)。我将尝试不同的方法。

我曾经建议采用这种方法。

我们采取一个专家顾问,它可以是来自kodobase。最主要的是,它应该是满血的,如果是输了也无所谓。你可以设置初步要求。例如:趋势,三个窗口,没有SL和TP,MM,状态的错误恢复......。

我们应该看看损失的原因,并尝试用R来解决它。通过外推法解决低窗口的问题,在高窗口我们通过分类预测下一个条形。

 
阿列克谢-伯纳科夫

我关于特征选择的文章。

https://habrahabr.ru/company/aligntechnology/blog/303750/

读起来很有意思,感谢你的辛勤工作。我不明白关于实验6--为什么最后选择了Y和Z的预测器?Z是目标变量,它不应该出现在预测因子的列表中。

我喜欢采取3D兔子图并在其上训练模型的想法。说实话,起初我以为 "兔子 "是某种伪随机数据,在图表上看起来很好,而且只有在人类有能力在数字阵列中看到兔子的情况下才有意义。但并没有描述兔子的函数,对于任何模型来说,它只是一组在三维空间中形成特殊形状的点群。从我的角度来看,每个点的三个坐标之间没有任何关系和依赖,我预计没有任何算法可以处理它。在文章的最后,我感到很惊讶。

我用PCA做了同样的实验,结果如下。
我需要一个95%精度的组件,它使用X和Y。但是,预测算法不能用一个组件来工作,我至少需要两个。基本上它们都使用了X和Y(代码中没有显示,但你可以在图中看到),所以是可以的。
在样本A上训练模型,然后预测样本A的Z:R^2 = 0.04759303
在样本A上训练模型,然后预测样本B的Z:R^2 = 0.05325888

绘制了一个样本B的预测Z的三维图,结果很糟糕。该模型并没有真正找到任何依赖关系,它只是将所有的Z平均到一个平面上。兔子出来时是平的。你是否尝试过训练一些模型,并画出一个预测的兔子?我想知道对于不同的模型,它是如何运作的。

附上兔子和y-aware pca的代码。有一个小错误,预测器负载图由于某种原因而对成分进行排序。即他们是1,10,11,12,2,3,4,5,...。但按重要性排序,我们应按以下顺序寻找:PC1、PC2、PC3......。

附加的文件:
bunny_pca.txt  5 kb
 
mytarmailS:
我以前也这样做过,神经网络不会在更大的水平线上学习,我设置的目标是

我还没有尝试训练超过一个酒吧的神经元,但我假设其原理是一样的。我对它的处理方法如下。

1)从mt5收集尽可能多的原始数据 - ohlc、时间、指标。因为我不知道什么是有用的,什么是没用的,所以我把所有的东西都拿出来,并试图筛选出垃圾。我不能把所有的东西都发给neuronka,因为neuronka对垃圾进行了重新训练,在这种情况下,它在fronttest中犯了一个错误。筛选出垃圾并不容易,事实上,这个主题的所有28页都是关于如何做到这一点,到目前为止,一切都很模糊。我在数据中添加了一个目标变量--0或1,这取决于下一栏的价格下降/上升。

2) 适当的碎屑筛分。应该有一个函数来分析初始数据并给它打分。估计数越高--垃圾越少。我们尝试用源预测器(训练表中的列)的各种组合来喂养评估函数,并试图提高结果。最终会找到某一组预测因子,理论上不会导致过度训练。

3) 假设垃圾被消灭了。现在是训练神经网络的时候了。我使用R的nnet包,它的优点是没有超参数,如训练速度、加速度、延缓度、训练函数的类型。更少的超参数意味着更少的问题。你需要用交叉验证法进行训练。我把最初的表以70%/15%/15%的比例分成三行(新的表被称为训练/测试/验证)(代码可以从拨浪鼓日志中获取,我从它开始)。然后我在训练台上做例如10次训练神经元的迭代。我计算了预测误差R^2。我预测测试和验证表的结果,也为它们计算R^2。我又做了10次迭代训练,重复预测了3个表,看了看新的R^2。当某些表格上的R^2开始下降时,停止训练(它将永远只在训练表格上增长)。完成了。现在你可以再次重复这一切,使用不同数量的隐藏神经元和不同数量的交叉验证之间的训练迭代,希望最后三个表的最小R^2会比上次高。

所有这些可能看起来有点复杂,但事实上更复杂:),这些步骤中的每一步都有一堆问题。但它给出了一致的结果。

 
桑桑尼茨-弗门科

你没学会是件好事,因为你在噪音上教书。但如果你这样做,你会在圣杯上学习,在real....。

忙着在这里努力消除噪音。这就是为什么我们采取了这么多的预测因素,希望至少能保留一些东西。

你是想用噪音来做训练,你应该明白,如果随机指数(例如)有神奇的数字90,当指标有这样的数值时,市场就会下跌,我们就不需要任何网络了,它将是肉眼可见的。

1)在最好的情况下,你要做的是在100个可能的指标中按某种标准选择最好的10个指标,而指标有一个值的范围--比如说这100个值中只有3个有效,并不总是如此,但在某些情况下是如此。只有这3个值不是噪音 只有它们应该被保留,而不是指标,因为其余的值也是噪音,所以所有这些拒绝在质量上并不深入,因此不是很有效。

2)此外,还有属性不一致这样一个概念,比如,拿价格来说,它是客观的,不矛盾的,也就是说,如果价格在上涨,它就是在上涨,没有第二种(如果我们忽略趋势力等的细微差别),拿同样的随机指数来说,它可以在趋势平缓和上下波动时取90个值,即至于另一方面,这个指标对网络没有帮助,相反,它总是混淆市场,因为它的读数是不一致的,所以普通的指标不适用于 市场你甚至不考虑它,你只是把一切都填满,然后你告诉我噪音

我对我上面写的预测水平线不满意。

 
Dr.Trader:

读起来很有意思,感谢你的辛勤工作。我不明白关于实验6--为什么最后选择了Y和Z的预测器?Z是目标变量,它不应该出现在预测因子的列表中。

我喜欢采取3D兔子图并在其上训练模型的想法。说实话,起初我以为 "兔子 "是某种伪随机数据,在图表上看起来很好,而且只有在人类有能力在数字阵列中看到兔子的情况下才有意义。但并没有描述兔子的函数,对于任何模型来说,它只是一组在三维空间中形成特殊形状的点群。从我的角度来看,每个点的三个坐标之间没有任何关系和依赖,我预计没有任何算法可以处理它。在文章的最后,我感到很惊讶。

试着用PCA做同样的实验,结果是这样的。
95%的精确度需要一个组件,它使用X和Y。但预测算法对一个组件不起作用,你需要采取至少两个。基本上它们都使用了X和Y(代码中没有显示,但你可以在图中看到),所以是可以的。
在样本A上训练模型,然后预测样本A的Z:R^2 = 0.04759303
在样本A上训练模型,然后预测样本B的Z:R^2 = 0.05325888

绘制了一个样本B的预测Z的三维图,结果很糟糕。该模型并没有真正找到任何依赖关系,它只是将所有的Z平均到一个平面上。兔子出来时是平的。你是否尝试过训练一些模型,并画出一个预测的兔子?我想知道对于不同的模型,它是如何运作的。

附上兔子和y-aware pca的代码。有一个小错误,预测器负载图由于某种原因而对成分进行排序。即他们是1,10,11,12,2,3,4,5,...。但按重要性排序,你应该按以下顺序寻找:PC1,PC2,PC3,......。

那么,你在主要成分中是否有X和Y?这将是重要的理解。

第二,关于兔子的近似值。当然应该是这样!这是一个线性模型。它只会画一个有点斜率的平面(如果是X和Y),或一条线(如果是一个预测器)。这就是整个线性兔子模型 )这就是为什么我尝试使用非线性模型。

这就是如何用另一种方法(基于离散值)来重建兔子。

 
阿列克谢-伯纳科夫

那么,X和Y是否出现在主要成分中?了解这一点将是很重要的。

是的,只有X和Y。我还没有发现如何通过代码来做这件事,所有关于这个的文章都是用图表来操作的。要取的组件数量可以在 componentsToUse 变量中查看。在这种情况下, componentsToUse = 2,这意味着你只需要取那些在图表上有宽水平线 的PC1和PC2的预测因子。

在上面那张图中,请看PC1和PC2这两列(第一和第二主成分),然后看绿色的水平线。如果该线远离0(无论是正数还是负数),那么该预测因子就被用于相应的主成分。PC1使用y_clean("_clean "会在缩放数据时自动添加,以避免与原始预测器混淆),PC2使用x_clean。这是PCA成分分析的结果--你需要取x_clean和y_clean。

继续前进,PC3将使用input_noise_3_clean。这只是举例,在这种情况下不需要PC3。

这实际上效果非常好。X和Y在图上明显突出。我早些时候曾发布过同样的外汇图表,其中一切都很糟糕。

 
Dr.Trader:

是的,只有X和Y。我还没有发现如何通过代码来做这件事,所有关于这个的文章都是用图表来操作的。要取的组件数量可以在 componentsToUse 变量中查看。在这种情况下, componentsToUse = 2,这意味着你只需要取那些在图表上有宽水平线 的PC1和PC2的预测因子。

在上面那张图中,请看PC1和PC2这两列(第一和第二主成分),然后看绿色的水平线。如果这条线远离0(无论它是正数还是负数),那么该预测器就被用于相应的主成分。PC1使用y_clean("_clean "会在缩放数据时自动添加,以避免与原始预测器混淆),PC2使用x_clean。

继续前进,PC3将使用input_noise_3_clean。这只是一个例子,在这种情况下不需要使用PC3。

这一次实际上效果很好。X和Y在图中明显突出。我以前也贴过同样的外汇图表,但那里的情况不是很好。

这里的预测器选择原来是通过线性方法。好吧,我很高兴你感到惊讶。这意味着你看到了新的东西 )
 
Dr.Trader:

我还没有尝试训练一个超过一栏的神经元,但我想原理应该是一样的。我对它的处理方法如下。

1)从mt5收集尽可能多的原始数据 - ohlc、时间、指标。因为我不知道什么是有用的,什么是没用的,所以我把所有的东西都拿出来,并试图筛选出垃圾。我不能把所有的东西都发给neuronka,因为neuronka对垃圾进行了重新训练,在这种情况下,它在fronttest中犯了一个错误。筛选出垃圾并不容易,事实上,这个主题的所有28页都是关于如何做到这一点,到目前为止,一切都很模糊。我在数据中添加了一个目标变量--0或1,这取决于下一栏的价格下降/上升。

2) 适当的碎屑筛分。应该有一个函数来分析初始数据并给它打分。估计数越高--垃圾越少。我们尝试用源预测器(训练表中的列)的各种组合来喂养评估函数,并试图提高结果。最终会找到某一组预测因子,理论上不会导致过度训练。

3) 假设垃圾被消灭了。现在是训练神经网络的时候了。我使用R的nnet包,它的优点是没有超参数,如训练速度、加速度、延缓度、训练函数的类型。更少的超参数意味着更少的问题。你需要用交叉验证法进行训练。我把最初的表以70%/15%/15%的比例分成三行(新的表被称为训练/测试/验证)(代码可以从拨浪鼓日志中获取,我从它开始)。然后我在训练台上做例如10次训练神经元的迭代。我计算了预测误差R^2。我预测测试和验证表的结果,也为它们计算R^2。我又做了10次迭代训练,重复预测了3个表,看了看新的R^2。当某些表格上的R^2开始下降时,停止训练(它将永远只在训练表格上增长)。完成了。现在你可以再次重复这一切,使用不同数量的隐藏神经元和不同数量的交叉验证之间的训练迭代,希望最后三个表的最小R^2会比上次高。

所有这些可能看起来有点复杂,但事实上更复杂:),这些步骤中的每一步都有一堆问题。但它给出了一致的结果。

我有不同的观点,而你却不理解。
 

桑桑尼茨-弗门科
如果你在这一步之前取前10个(算是),而把其余的丢掉呢?

我画了一个R^2和胜诉百分比与所用组件数量的函数图。前端测试的最佳结果是使用41个组件(增益约70%,非常好)。但你无法从回测图表中看出这一点,它们只是一直在上升。如果我们依靠组件的重要性,我们应该采取73,这不是前沿测试的最佳结果。

fronttest的R^2即使在胜出>50%的情况下也可能是负的,这是因为所需的结果不平衡,"0 "和 "1 "类的数量不同,所以它们的平均数不是0.5,由此产生的R^2略差。