找到一组指标来输入神经网络的输入。讨论。一个评估结果的工具。

 

向所有论坛参与者和访客问好。


我想提供所有感兴趣的人讨论和寻找一套最适合输入神经网络的指标。

在我的程序中,神经元组的盈利能力可以作为一个估计工具,我也可以用训练好的神经元组来布置MQL4专家顾问。当然,在合理的限度内。


我自己写的(java)perseptron,每层有任意数量的神经元,我用JGAP库(http://jgap.sourceforge.net/)的遗传算法训练它。

第一层的神经元数量等于输入的数量,在第二层--任意地,在第三层1个神经元。神经元组产生交易信号(神经元组的输出>0.5 - 买入,神经元组的输出<-0.5 - 卖出)。 这些信号由一个自行编写的交易测试器处理,该测试器根据神经元组的信号逆转头寸(或进入市场,如果没有开仓)。遗传算法的 目标函数 是产生的利润。在我看来,这样的方法使我们能够最大限度地减少所有可能的错误,使培训尽可能地接近真实的交易。我将训练好的网络导出到MQL4专家顾问中,并在MT4的策略测试器中测试。我在MT4指标中形成神经网络的输入,并将其下载到一个文件中。 指标和专家顾问由程序形成并写入文件(减少混乱和错误)。

对我来说,4层网络并不比3层网络带来更多的利润(通常更少),但它们需要更长的时间来训练。
我在Core2 Quadro 2.3上训练了一个8-10-1网络4天。10个具有不同初始种群的平行线程在竞争,看 "谁的利润最大"。4天过去了,大约4000代,一个种群有200条染色体。在前2000代中获得了最大的利润,在这之后,利润没有增加。最大的利润增长是在前100代。

我已经在MT4策略测试器中检查了这个网络的结果。我发现,网络几乎从未达到+-0.5的阈值,交易信号也没有被触发。原因不清楚,也就是说,我检查了输出到MQL4的正确性(在Java和MQL4中输入相同的值,网络给出相同的值,也许整个输入流应该被提交,而不是一些随机的值)。我把阈值降到了0.4,似乎可以了......。然后我发现,专家顾问不能一次性地扭转头寸...我的专家顾问将关闭该栏,价格在下一个栏之前有时间移动。在学习期(我在1-08-09至1-10-09学习),MT4的利润比我的测试器少,在MT4的测试期(1-10-09至1-11-09),净值是盈利的。我看了一下哪些点出现了无利可图的条目,我的印象是,进入神经网络的数据携带的信息不足......。

I输入神经网络:(k=100)。

a[0]=(iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k;
a[1]=(iMA(NULL,0, 21,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[2]=(iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[3]=(iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[4]=(iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[5]=(iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.9;
a[6]=(iMA(NULL,0, 233,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.8;
a[7]=(iMA(NULL,0, 377,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.6;
我了解指标的工作原理,但我对它们和市场的了解还不足以自己选择最小数量的指标......

我在论坛上搜索了一下,发现(我的想法来自于哪个帖子的作者,很遗憾,我不记得了)。

a[0]=(iMA(NULL,0, 3,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 5,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[1]=(iMA(NULL,0, 5,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 8,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[2]=(iMA(NULL,0, 8,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[3]=(iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[4]=(iMA(NULL,0, 21,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[5]=(iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[6]=(iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i))*140;
a[7]=(iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i))*130;
a[8]=(iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 233,0,MODE_EMA,PRICE_CLOSE, i))*120;
在10个线程,200代,种群大小为200的情况下研究了1-08-09至1-10-09(我的java测试器给出了结果)。
网络9-10-1:利润10521
9-20-1净利润:10,434
9-30-1网络:利润10361
9-50-1网络:利润10059
结果是好的,但用以前的版本似乎更好......我必须把它与以前的输入结合起来(我没有保存上次训练的结果)。

需要额外的乘数来调整从-1到+1范围内的数值


看了我写的东西后,我开始思考在将训练好的神经网络导出到专家顾问时可能出现的错误--应该再次测试。

P.S. 现在我正在写一个任意结构的递归神经网络(根据我的理解,递归神经网络不仅要考虑数值,还要考虑斜率角度)。

 

这个问题与你很接近。方法是不同的。

我更不是一个遗传学家,而不是一个工程师,但我大致上了解它。

让我问你几个问题,最大化分数的目标函数不是最好的选择。如果我从上面的例子中理解正确的话--你要搜索一组系统,在你的案例中--9个,好吧,一目了然的优化止损利润+更多的幻想总的来说,至少有一个系统(这里我们使用一个指标)至少有2-3百种可能的变体。我们不会得到框架内的那些变体,比如说CCI或RSI会落在视野之外。然后我们有一个神奇的指标,用于当前时刻。让它成为mov(20) -mov(10) > < 0。如何估计或至少估计情况会持续多久.

 
iliarr >> :

我有一个自己写的(java)perseptron,有任意数量的层和每层的神经元,我用JGAP库(http://jgap.sourceforge.net/)的遗传算法训练它。

你是如何进行培训的?请描述训练算法。

如果我没记错的话,JGap只是一个遗传算法的库,仅此而已,与NS无关。也许问题在于基因组是如何形成的,以及健身函数选择的正确性。

 

在用Ga训练网络 时,有许多陷阱,你不太可能解决这些问题。至少在我看来,在用Ga进行训练时,"网络能和训练时一样工作多久?"这个问题是不可能的。

我建议用ns-i去解决一个标准的预测问题。

 
rip >> :

你是如何进行培训的?请描述训练算法。

如果我没记错的话--JGap只是一个基因算法的库,仅此而已,它与NS无关。也许问题在于基因组是如何形成的,以及健身函数的正确性。

JGap是一个实现遗传算法的库。对我来说,它是一个黑匣子,需要给它一个目标函数,它取决于一定长度的向量。这个库的遗传算法选择这个向量的值,使目标函数达到最大。

ivandurak>>

这个问题与你很接近。方法是不同的。

我不是一个遗传学家,也不是一个工程师,但我明白其中的要点。

让我问你几个问题,目标函数最大化分数并不是最好的选择。如果我从上面的例子中理解正确的话--你要搜索一组系统,在你的案例中--9个,好吧,一目了然的优化止损利润+更多的幻想总的来说,至少有一个系统(这里我们使用一个指标)至少有2-3百种可能的变体。我们不会得到框架内的那些变体,比如说CCI或RSI会落在视野之外。然后我们有一个神奇的指标,用于当前时刻。让它成为mov(20) -mov(10) > < 0。如何估计或至少估计良性状况会持续多久.

不幸的是,我没有足够的计算资源来搜索最佳指标(网络9-10-1在10个线程,200代,种群大小200从1-08-09到1-10-09学习了一个小时,虽然神经元权重的数量(遗传算法拾取的向量长度)=181)。

我需要一套反映市场情况的指标。指标应该是简单的,最好是标准的MT4(执行和可能的错误问题),只有30个。没有目标 指标应该给出市场走向的信息。我需要它们从价格波动中获得尽可能多的信息。


我喜欢这里...我认为如何写,写什么,制定,更多的理解出现......感谢论坛,感谢你ivandurak。:)

 
iliarr >> :

JGap是一个实现遗传算法的库。我的目标函数是一个黑匣子,需要给它一个目标函数,它取决于一定长度的向量。这个库的遗传算法适合这个向量的值,以便目标函数达到最大值。

这正是我的意思...


你如何形成一个向量,然后传递给JGap,它只是一个W值的向量,还是编码的W值。

什么是目标F函数。我可以举个例子--如果我们把f函数E[i](t)=D[i](t)-Y[i](t)作为目标,其中E是误差,D是输出的预期值,Y是输入训练样本X时获得的值,i是神经元常数,t是历时数。如果我们在一些任务上采取E[i](t)=Sign(D[i](t)-Y[i](t))*(D[i](t)-Y[i](t))^2,结果会好很多。比方说,如果我们形成一系列反映经典动力系统(洛伦兹、亨农、罗斯勒......)的吸引子,我们甚至可以训练网络来近似这些数据,虽然不深入,但还是可以的。


我没有试过:)因为我认为它不会起作用:)。

 
有了这样的设计,你可以实现近乎垂直的疏散而不打滑。你会解决神经元的过度训练问题吗?
 
IlyaA >> :
有了这样的设计,你可以实现近乎垂直的撤离,而且没有滑落。你要解决在神经元上重新训练的问题吗?

而且可能不会有任何再培训......。如果作者在测试样本上画出错误的图形,你就可以马上知道重新训练会发生什么。

 
rip >> :

而再培训可能不会发生......。如果作者引用作为测试样本的误差图,你可以一目了然地知道过度训练会发生什么。


我同意。它与黑匣子一起工作。过度训练是非常有可能的。尊敬的伊利亚尔,你能否公布一个培训时间表。
 
iliarr >>:.............

你不应该使用挥舞的手臂。或者说,你不应该只使用移动平均线。试着用一套不同类型的指标进行实验,最好每个指标的算法都要与其他指标有根本的不同。然后你会得到更多的网络信息。

还有一点。

你正在使用一个基于NN信号的反向交易系统。这与标准的muvingaverage专家完全一样。没有更好或更坏。

寻找在NN的帮助下确定SL和TP大小的方法,以及伴随开放头寸的方法。也有可能随机打开。


StatBars 写道:>>

在网络培训中,有很多陷阱,你很难解决这些陷阱。至少,解决 "网络在多长时间内会像训练时一样工作?"在我看来,用Ga训练时,根本不可能。

我建议去找一个标准的ns-ey预测问题解决方案。

GA只是一个优化工具(机器的螺丝刀)。只要有最小的差异,你可以使用它或任何其他优化算法(螺丝刀)。

 

你好

我一直有兴趣学习NS,但当我开始阅读一些关于这个主题的文献时,我的头脑开始沸腾,最后我甚至无法理解NS是什么。

你能不能举一个简单的例子(可以说是在手指上)来解释它是什么?

谢谢你