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

 
马克西姆-德米特里耶夫斯基

是的,它只是我的转换函数,带有cos和随机程度,不是内核。

RDF保存自己的文件结构,所以如果有太多的样本或功能--文件可能会过大,我不确定百万代理:)但你可以通过增加具有不同特征的代理数量来减少分类误差,提高模型的稳定性。

下一刻--根据我的经验,更大的数据!=对新的数据有更好的准确性。如果预测者不好,结果也会是一样的不好

而且gdmh可以处理极小的数据集,近似于对未来的数据有好处。

但是...我们可以应用一个简单的模型,如逻辑回归+gdmh(而不是RDF),所以学习过程会非常快,但不知道准确性如何。

关于GMDH,这正是你第一次提到关于GMDH时我告知你的。因为GMDH本身就是一个神经网络,因此,这里没有使用RDF。

 
马克西姆-德米特里耶夫斯基

是的,有区别。要用RDF做一个决定,它必须经过所有的节点和叶子。因此,如果RDF结构很大--它将为每个决定花费更多时间

对于这种方式,最好使用具有快速响应的极快模型(快速学习的NN)。或更好的硬件,包括GPU

还有一个问题--RDF对数据中的噪音很敏感,所以几乎总是过度拟合。为了减少这种噪音的影响,最好在算法中嵌入LDA或PCA层。

因此,这并不是一项乍看之下如此微不足道的任务。

你是说你现在的RDF实现和你以前的RDF版本完全不同?这个RDF版本是使用政策还是别的什么?我不确定".rl "文件的情况。我以为那些文件类似于你以前版本的 "Mtrees "文件。

让我看看培训和测试方面的情况。我注意到,模型和代理似乎不能正常运行到非常大的数值。例如,我只是把代理设置为100,模型设置为100。代理人工作了,但每个代理人的模型在50岁时停止工作。我不知道出于什么原因。

顺便说一下,我只是在用RDF测试我的算法,因为你已经实现了基本的代码,因为我已经在你以前的版本中做了成千上万的不同组合的优化和测试,因此,我对你以前的RDF版本有一个通透的理解。否则,我必须为 "ALPHA ZERO "中使用的 "蒙特卡洛 "算法编写完整的代码,以整合到我的算法中,这可能需要相当长的时间,因为我不是一个专业的程序员。

 
Maxim Dmitrievsky:

你好,先试着弄清楚这个代码。

在这里,我们用每1个特征(1个输入)学习RDF,并将最好的特征数字保存在一个排序的数组中(模型)。接下来我们可以选择几个最好的

下一步--我们必须将每个最佳预测器与其他预测器结合起来,再次检查错误,我认为,并保存结果。在这一步,我们可以应用一些多项式方程

好的,现在让我看看如何用这段代码实现GMDH。

你越能解释代码,我就能越快地找到一个桥梁。实际上,我的问题是我在一些基本的C++概念的语法上有点弱,如类、对象、数组等,因此,我需要更多的时间来理解这些概念的实现,否则,我将直接写出GMDH的类文件并交给你。

总之,让我看看。

请向我正确解释这3句话。我认为这里是我们需要应用GMDH的地方。

        m[i].Set(0,RDFpolicyMatrix[i][bf]); 
        m[i].Set(1,RDFpolicyMatrix[i][bf+1]);
        m[i].Set(2,RDFpolicyMatrix[i][bf+2]);

我的意思是请评论 这3行

我想在我之前的代码中,我在循环中犯了一些小错误。所以我认为这里提供了一个桥梁,如果你确切地知道你所写的RDF:))...因为我对矩阵的实现不是很了解...

 ///---Remaining values of Y starting from Y_1
  for(int i=1;i<3;i++)
  m[i]=CalculateNeuron(a);///---Calculate individual value of Y_1,Y_2,Y_3,...to feed to RDF inputs
 
 
马克西姆-德米特里耶夫斯基

这是一个2D数组(矩阵),"alglib "库格式,我们只需将预测器(bf)的数量填入其中(矩阵的索引0),接下来(1,2)是输出值。这里的错误 :)我们需要设置索引为 "features "和 "features-1 "的值

m - 我们目前的矩阵有1个特征和2个输出,但RDFpolicyMatrix包含所有的特征+输出

固定的

你可以在这里读到http://www.alglib.net/dataanalysis/generalprinciples.php#header0

好的,所以有一些误解......让我再检查一下代码,看看如何将这个链接到GMDH......

如果你有了想法,就向我报告,这样我就不必浪费我的时间去思考:))。

我认为RDF和GMDH是相似的,因此,相互之间的整合变得很困难......

让我再想想....

 
Maxim Dmitrievsky:

不,它很容易整合...我们只用gdmh来改变输入向量,只是一些转换。

在下一步,我们将检查预测器的组别,并将其与其他的预测器结合起来(只有少数来自先前的选择)。

然后,这个循环可以为你所指的特征转换做所有的事情。

接下来,这是计算Neuron的函数

接下来,Y_Final=Y_All+Y_0。

我们现在已经把输入分成了3块,如果需要,我们可以把它扩展到任何数量......

这里的输入是特征或预测,权重是随机权重......我们最初可以从随机函数中获取这些权重,之后这些权重将在训练后存储在RDF中。

 
马克西姆-德米特里耶夫斯基

试着为矩阵重新制作它))。

但是...我们不需要一个总和,我们需要每一步都有独立的预测器,只需要扩大我们的矩阵,加入额外的特征,然后再次检查错误。

好的,给我一些时间,很快就会准备好。

好吧,那就没问题了,只要去掉独立预测器的 "+"号,就可以得到单独的预测器。

/// --- Remaining values ​​of Y starting from Y_1 
  for ( int a = 1 ; a < 3 ; a ++) 
  Y_All [a]=CalculateNeuron (a); /// --- Calculate the individual value of Y_1, Y_2, Y_3, ... to feed to RDF inputs...Here feature transformation done

但如果你有更好的方法,那也很好:))。 因为这将是非常缓慢的,因为有多个for循环......所以一个非常粗略的实现:))

我在一个小时内就写好了这段代码,所以我甚至不喜欢这段代码:))

黑客帝国没有进入我的大脑:)))))))))))))))))))))))))))))))))
 
马克西姆-德米特里耶夫斯基

嘻嘻...2D矩阵的排序如何?:)

另外,我将要求你在EA的最终版本中至少实现更多品种的预测器。

1.一些震荡器指标

2.一些趋势指标

3.一些音量指示器

4.一些来自较高时间段的指标(对嘈杂信号的良好过滤)。

5.一些直接关闭的价格

否则,当我要添加一些东西时,我必须不断地问你:)))。

如果它能根据市场变化从一个系统即时切换到另一个系统,那么它将是真正伟大的!......事实上,这就是我对这个版本的最初期望,当你提到关于花键、特征转换和内核 技巧等......内核技巧将有助于使计算更快,即使在普通服务器上的大数据也是如此......所以现在我们只能依靠完美的训练模型和快速转换。

顺便说一下,从过去两天的正向测试来看,我不得不说这个版本的RDF与之前的RDF相比,似乎更加稳定和可靠......我的意思是正向测试与回测有些吻合......但之前的版本大多对优化数据过度拟合。

 
Maxim Dmitrievsky:

以前的版本只是一个概念,有基础的想法

你可以添加一个指标本身,而不是收盘价。

不,不是一个指标......我是说当我在 "ag1.agent "的数组循环中同时应用多个指标时,我感到很困惑。

当我使用总共100个特征,但50个是收盘价,50个是高价时,我应该用什么来代替"ArraySize(ag1.agent)"?

for(int i=0;i<ArraySize(ag1.agent);i++)///---here
     {   
      CopyClose(_Symbol,0,0,50,ag1.agent[i].inpVector);
      normalizeArrays(ag1.agent[i].inpVector);
     }
for(int i=0;i<ArraySize(ag1.agent);i++)///---here
     {   
      CopyHigh(_Symbol,0,0,50,ag1.agent[i].inpVector);
      normalizeArrays(ag1.agent[i].inpVector);
     }

那么上面的代码对于像下面这样的代理声明是否正确?

CRLAgents *ag1=new CRLAgents("RlExp1iter",5,100,50,regularize,learn);///----Here

好吧,我是第一个在你的英文论坛上发表评论的人:)))....f从那天起,我在我所有的服务器和所有类型的组合设置中至少运行了超过20000个不同的测试和优化,因此,我对整体概念有了更好的理解...但我的主要问题是有时我甚至被简单的代码所困....。

我可以向你保证,即使这个算法可以随着时间的推移开始有所收敛,那么我可以优化代码,使其性能至少比你将发布的内容好2到3倍:))......所有这些都是我的经验和观察。)

还是下面这个代码是正确的?

Or

for(int i=0;i<50;i++)///---here
     {   
      CopyClose(_Symbol,0,0,50,ag1.agent[i].inpVector);
      normalizeArrays(ag1.agent[i].inpVector);
     }
for(int i=50;i<100;i++)///---here
     {   
      CopyHigh(_Symbol,0,0,50,ag1.agent[i].inpVector);
      normalizeArrays(ag1.agent[i].inpVector);
     }
 
马克西姆-德米特里耶夫斯基

非常感谢......现在,我想我可以做更多的指标:))))))))

 
Maxim Dmitrievsky:

或者像这里,更简单

是的,我喜欢......这是我喜欢的类型:)

前面的例子是非常有条件的,不能增加更多的预测因子....。

顺便说一下,我用这个方法来模拟随机蜡烛......但我必须改变交易的进入和退出价格,也是为了训练,因此,我感到困惑......

现在我将尝试这些指标方法......并对其进行测试,稍后我将尝试蜡烛模拟方法......因为如果它将取得成功,那么这将是在外汇市场上创建的任何机器学习EA的最后版本:))))。