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

 
桑桑尼茨-弗门科
在R中,"对象 "这个东西比许多编程语言要复杂得多。
对象没有什么不同,只是函数str、plot、summary和类似的函数被多次重载,每种类型都有自己的实现。
 
阿列克谢-伯纳科夫
我不太明白为什么要花这么长时间。optim_var_number是什么?应该在10以内。把它设置为1200秒,应该是有的。

我有很多预测因子(9602),这就是为什么它需要这么长时间。它们是为2015年取自eurusd d1,那里的各种价格、时间和指标。我还没有走出d1,所以训练实例的数量只有250多个,按一年的交易日数来算。没有跳过。

optim_var_number = 0.8662363

附加的文件:
trainData.zip  14378 kb
 
Dr.Trader:

我有很多预测因子(9602),这就是为什么它需要这么长时间。它们是为2015年取自eurusd d1,那里的各种价格、时间和指标。我还没有走出d1,所以训练实例的数量只有250多个,按一年的交易日数来算。没有跳过。

optim_var_number = 0.8662363

我会玩玩你的那一套。一切都应该飞起来。
 
桑桑尼茨-弗门科

最后一栏说,如果你只取PC1,那么0.9761的变异性被解释(累积比例),如果你取两个成分--PC1和PC2,那么0.99996被解释,等等。

PC1 PC2 PC3 PC4 PC5

标准差 2.2092 0.34555 0.01057 0.008382 0.004236

方差的比例 0.9761 0.02388 0.00002 0.000010 0.000000

累计比例 0.9761 0.99996 0.99998 1.000000 1.000000

结果是有点乱--这种方法只有在你与所有可能的组件一起工作时才有效。prcomp函数有一个参数 "tol",默认是空的。但它可以被赋予从0到1的任何数值,以减少发现的组件数量。它的工作原理是这样的:当搜索新的组件时,第一个组件的SDV被提取并乘以tol。只要新组件的SDV低于这个产品,新组件就不会被生成。例如,如果tol=0.1,那么所有sdev<0.22的成分都将被丢弃,所以你将只有两个主要成分。如果tol=0.003,那么只有sdev>0.0066276的成分将被保留,即只有四个。如果tol=NULL(默认),函数将生成最大数量的组件,但它需要太多的时间,所以我想缩短这个过程。如果我使用tol,那么一切工作都会更快,而且组件更少,但在这种情况下,它就会崩溃。它是以某种方式只根据发现的成分来计算的。最后发现的成分的累积比例将永远是1。即使只找到2个成分而不是数千个--第二个成分的累积传播将变为1(例如,在所有成分都产生的情况下从0.1),因此,PC1的累积传播也将增加。筛选出预测因素时,累积比例也 有可能发生错误的变化

因此,累积比例是不可信的,如果你认真地使用y-aware pca工作,那么你应该编写自己的函数来计算解释的变异性。

 
交易员博士

结果是有点糟糕--这种方法只有在你与所有可能的组件一起工作时才有效。prcomp函数有一个参数 "tol",默认是空的。但你可以把它设置为0到1的任何数值,以减少找到的组件的数量。它的工作原理是这样的:当搜索新的组件时,第一个组件的SDV被提取并乘以tol。只要新组件的SDV低于这个产品,新组件就不会被生成。例如,如果tol=0.1,那么所有sdev<0.22的成分都将被丢弃,所以你将只有两个主要成分。如果tol=0.003,那么只有sdev>0.0066276的成分将被保留,即只有四个。如果tol=NULL(默认),函数将生成最大数量的组件,但它需要太多的时间,所以我想缩短这个过程。如果我使用tol,那么一切工作都会更快,而且组件更少,但在这种情况下,它就会崩溃。它是以某种方式只根据发现的成分来计算的。最后发现的成分的累积比例将永远是1。即使只找到2个成分而不是数千个--第二个成分的累积传播将变为1(例如,在所有成分都产生的情况下从0.1),因此,PC1的累积传播也将增加。筛选出预测因素时,累积比例也 有可能发生错误的变化

因此,不应该相信累积比例,如果你认真地使用y-aware pca工作,那么你应该写自己的函数来计算解释的变异性。

这是个有趣的想法,我一直鼓动你去看一看,这不是没有道理的。
 
Dr.Trader:

我有很多预测因子(9602),这就是为什么它需要这么长时间。它们是为2015年取自eurusd d1,那里的各种价格、时间和指标。我还没有走出d1,所以训练实例的数量只有250多个,按一年的交易日数来算。没有跳过。

optim_var_number = 0.8662363

我看了你的这套书。要么是我不明白什么,比如不是所有的变量都进来了,要么就是你犯了一个大错误。你有很多原始价格值,例如,1.1354(MA和其他)。你没有办法做到这一点,因为它是完全非平稳的数据。所有的数据都应该是DIFFERENT或振荡的指标,并且是全方位的。在这样的数据中寻找依赖关系是一个完全没有意义的工作。
 

对了,我忘了,你已经说过,数据必须要特别准备。我拿了原始数据。指标中也有振荡器,我将尝试只取它们。

顺便说一下,PCA模型对这样的数据也有效,但它需要对源数据进行大量的居中、缩放和一些旋转。对于神经元学来说比较容易,它只需要对[0...1]中的数据进行归一化。

 
Dr.Trader:

对了,我忘了,你已经说过,数据必须要特别准备。我拿了原始数据。指标中也有振荡器,我将尝试只取它们。

顺便说一下,PCA模型对这样的数据也有效,但它需要对源数据进行大量的居中、缩放和一些旋转。对于神经元学来说比较容易,它只需要对[0...1]中的数据进行归一化。

不,你肯定不大理解非平稳性的重要性。不管是NS模型、线性模型还是我的模型,如果你的数据是非平稳的,那么在上面发现的依赖关系保证不会出现在样本之外。你拥有的所有数据,如:原始价格、MA(原始价格)、条形开盘(原始价格)等,都需要从模型中删除。你必须取其与最后已知价格的差异。

这里不可能扩展到一个区间。

 
阿列克谢-伯纳科夫

如果你有非平稳的数据,那么可以保证在其上发现的依赖关系不会在样本之外发生。

只是有一个有趣的细微差别,让人怀疑这种数据的再现是否充分(与以前的数值不同)。

1)例如,如果我们有一个价格。

2)我们产生其差异

3) 我们选取两个在结构上非常接近的差异段(让它是欧几里得的)。

4)这些区域几乎100%地属于射频或相同的神经元中的一个集群,并被认为是相同的情况。

5)然后我们把这两部分(差异)再还原成初始价格,即累积起来。

而我们看到这些部分是完全不同的,往往一个部分的趋势是向上的,另一个是向下的,也就是说,没有任何相似之处,而算法认为这些是相同的部分......

你怎么看,阿列克谢? 作为一个有经验的人,你的评论很有意思。

 
mytarmailS:

只是有一个有趣的细微差别,让人怀疑这种数据的再现是否充分(与以前的数值不同)。

1)例如,如果我们有一个价格。

2)我们产生其差异

3) 我们选取两个在结构上非常接近的差异段(让它是欧几里得的)。

4)这些区域几乎100%地属于射频或相同神经元的一个集群,并被认为是相同的情况。

5)然后我们把这两部分(差异),并把它们返回到它们的初始价格,即累积它们

而我们看到,这些部分完全不同,往往一个部分的趋势是向上的,另一个部分的趋势是向下的,也就是说,没有任何相似之处,而算法认为这些是相同的部分......

你怎么看,阿列克谢? 作为一个有经验的人,听到你的评论很有意思。

为什么会这样呢?如果差值相同,那么积分系列将完全重合。如果它们只是相似,那么积分序列将是相似的(按趋势)。

我想告诉交易员阅读数据准备的基本知识。没有人提交原始价格的条目。这已经上演了十万次。不稳定的数据会导致不稳定的依赖关系。