文章 "神经网络变得轻松(第二部分):网络训练和测试"

 

新文章 神经网络变得轻松(第二部分):网络训练和测试已发布:

在第二篇文章中,我们将继续研究神经网络,并研究在智能交易系统当中调用我们所创建 CNet 类的示例。 我们将操控两个神经网络模型,它们在训练时间和预测准确性方面都表现出相似的结果。

第一个训练期强烈依赖于在初始阶段随机选择的神经网络的权重。

经过 35 期的训练,统计数据的差异略有增加 - 回归神经网络模型的效果更好:

数值 回归神经网络 分类神经网络
根均方误差 0.68 0.78
命中率 12.68% 11.22%
未识别的分形 20.22% 24.65%

回归神经网络第 35 个训练期的结果(1 个输出神经元) 分类神经网络的第 35 个训练期的结果(3 个输出神经元)

测试结果表明,两种神经网络组织变体在训练时间和预测准确性方面产生的结果相似。 于此同时,获得的结果表明神经网络需要额外的时间和资源进行训练。 如果您希望分析神经网络的学习动态,请查看附件中每个学习期的屏幕截图。

作者:Dmitriy Gizlyk

 

这篇文章很有意思。我以前甚至没有尝试过研究神经网络,认为那是一片 "黑暗森林",而且我以前读到的关于这个主题的所有文章都被大量难以理解的文字所击退,但在这篇文章中,理论确实非常简单易懂,感谢作者!

我想澄清一下这句话,"两个 EA 的结果都差不多,命中率略高于 6%"。
而经过 35 个历元的训练后--只有 12%??

这样低的结果并不能促使我们进一步研究这个课题。

有什么方法可以提高预测的准确性?

 

下午好,迪米特里。

这个话题非常有趣,也很有必要。感谢您的这些文章)。

1.我有一个关于 Traine(... ) 方法代码的问题:

            TempData.Clear();
            bool sell=(High.GetData(i+2)<High.GetData(i+1) && High.GetData(i)<High.GetData(i+1));
            
            //в строчке ниже скорее всего не верно определяется Low фрактал  
            bool buy=(Low.GetData(i+2)<Low.GetData(i+1) && Low.GetData(i)<Low.GetData(i+1));
           
            //знаки сравнения нужно поменять наоборот
            buy=(Low.GetData(i+2)>Low.GetData(i+1) && Low.GetData(i)>Low.GetData(i+1));/

当我在训练中运行修改后的版本时,结果有所改善:

在第 8 个训练周期时,准确率已经达到了 16.98%,而旧版本在相同训练周期时的准确率为 10.87% 2.


2.为什么多层神经网络的准确率这么低,没有达到 50%?

 
Alexandr Ishkov:

下午好 迪米特里

这个话题非常有趣,也很有必要。感谢您的这些文章)。

1.我有一个关于 Traine(... ) 方法代码的问题:

当我在训练中运行修改后的版本时,结果有所改善:

在第 8 个训练周期时,准确率已达到 16.98%,而旧版本在同一训练周期时的准确率为 10.87

感谢您的评论,亚历山大。不幸的复制粘贴错误。

 
Alexandr Ishkov:

下午好 迪米特里

2.为什么多层神经网络的准确率这么低,达不到 50%?

我在第一篇文章中写道,我从具有标准参数的标准指标中随机抽取了指标。神经网络 是一个很好的工具,但不是超自然的东西。它可以在有规律的地方寻找规律。但如果原始数据中没有模式,它就不会自己找到模式。准确地找到分形是一项相当困难的任务,老实说,我并不指望能准确地找到分形。但我所得到的结果为进一步的工作提供了基础。

 
Dmitriy Gizlyk:

感谢您的评论,亚历山大。不幸的复制粘贴错误。

这种情况时有发生)

Dmitriy Gizlyk:

我在第一篇文章中写道,我从具有标准参数的标准指标中提取了随机指标。神经网络是一个很好的工具,但不是超自然的东西。它能在有规律的地方寻找规律。但如果原始数据中没有模式,它就不会自己找到模式。准确地找到分形是一项相当困难的任务,老实说,我并不指望能准确地找到分形。但我所得到的结果为进一步的工作提供了基础。

有道理)。

谢谢,无论如何,你的工作都很出色 )

 

德米特里,下午好!

关于神经网络的系列文章非常有趣。目前,我正在尝试为网络设置不同的指标和任务。我决定为网络设置一个任务,即确定下一交易栏出现的概率,是高位比当前交易栏的开仓水平高 100 点,还是低位比当前交易栏的开仓水平低 100 点。

         if(add_loop && i<(int)(bars-MathMax(HistoryBars,0)-1) && i>1 && Time.GetData(i)>dtStudied && dPrevSignal!=-2)
           {
            TempData.Clear();
            double DiffMin=100;
            double DiffLow=Open.GetData(i+1)-Low.GetData(i);
            double DiffHigh=High.GetData(i)-Open.GetData(i+1);
            bool sell=(DiffLow>=DiffMin);
            bool buy=(DiffHigh>=DiffMin);
            TempData.Add((double)buy);
            TempData.Add((double)sell);
            TempData.Add((double)(!buy && !sell));
            Net.backProp(TempData);
	    ...
           }

测试智能交易系统 时,预测分形的标签会显示在图表上,但正确预测和未找到分形的统计数据没有更新,始终等于 0.00%。

        if(DoubleToSignal(dPrevSignal)!=Undefine)
              {
               if(DoubleToSignal(dPrevSignal)==DoubleToSignal(TempData.At(0)))
                  dForecast+=(100-dForecast)/Net.recentAverageSmoothingFactor;
               else
                  dForecast-=dForecast/Net.recentAverageSmoothingFactor;
               dUndefine-=dUndefine/Net.recentAverageSmoothingFactor;
              }
            else
              {
               if(sell || buy)
                  dUndefine+=(100-dUndefine)/Net.recentAverageSmoothingFactor;
              }
Как протестировать торгового робота перед покупкой
Как протестировать торгового робота перед покупкой
  • www.mql5.com
Покупка торгового робота в MQL5 Маркете имеет одно большое преимущество перед всеми другими подобными предложениями -  вы можете устроить комплексную проверку предлагаемой автоматической системы прямо в терминале MetaTrader 5. Советник перед покупкой можно и нужно тщательно прогнать во всех неблагоприятных режимах во встроенном тестере торговых...
 
altec3:

迪米特里,下午好!

关于神经网络的系列文章非常有趣。目前,我正在尝试为网络设置不同的指标和任务。我决定为网络设置一项任务,即确定下一交易栏出现的概率,是高位比当前交易栏的开仓水平高 100 点,还是低位比当前交易栏的开仓水平低 100 点。

测试智能交易系统 时,预测分形的标签显示在图表上,但正确预测和未找到分形的统计数据没有更新,始终等于 0.00%。

下午好,
,您指定的 Diff=100 据我所知是以点为单位的。而差值是按价格计算的。例如,欧元兑美元的计算结果是 1.16715-1.15615=0.01。因此,您没有可比较的数据,卖出和买入总是错误的。

 
Dmitriy Gizlyk:

您好,
,您指定的 Diff=100 据我所知是以点为单位的。差值按价格计算。例如,欧元兑美元的计算结果是 1.16715-1.15615=0.01。因此,您没有可比较的数据,卖出和买入总是错误的。

谢谢!的确,只要我把所有东西都归结为一个共同点,问题就迎刃而解了。
 

我有一个问题:如果这个神经网络的准确性几乎可以忽略不计,那为什么还要研究这个主题,而且还写了一整套深奥的文章 ....?我认为,要么中止这个话题,要么改进 EA。

我想补充一点,我的神经网络比你的要 "复杂 "得多,但它能保证 70-80% 的正确输入,同时结构也简单得多......

我还想补充一点,还有很多其他神经网络的准确性比你的高得多。

总的来说,我觉得你的文章是花钱买来的,但却毫无用处......对不起。

我也不同意 "神经网络很简单 "这个标题,那些从事大数据机器学习的人都知道--这并不简单...:-)

>要评估网络的性能,您可以使用预测的均方误差、正确预测的分形百分比、遗漏的分形百分比。

我完全不同意这种说法--结果只是最终余额、净利润,而不是其他......这不是为科学而科学,而是为利润而科学。

我甚至可以告诉你为什么:有一些专家顾问的准确率只有 60%...但由于采用了巧妙的系统,它们比准确率为 80% 的顾问更有利可图......

如果没有统计数据,或者不符合我的要求,我就会立即拒绝,然后你就根本读不下去了,下面是我不太聪明的神经元卡的测试结果

站立

 
Boris Egorov:

您应该从您的 EA 的最终交易状态图开始阅读,否则就没有意义了,我会立即把它关掉,如果没有状态图或者它不符合我的要求,那么您就根本无法阅读,下面是我这个不太聪明的 neuronka 的测试。

那么您就不需要文章部分了。

对于您的要求--盈利的 Steith,Codobase 和 Market 部分是合适的。

是的,顺便说一句,即使您的留言也不符合您的要求,所以也可以忽略不计?)))


您需要文章,需要它们来正确测试基于神经网络工作的 EA,您的状态很有可能来自测试器,而不仅仅来自 MT4,但您可能没有将训练样本分为训练/测试/验证。

您需要通过文章来学习如何编写结构良好、可读性强的代码--我认为文章中作者的代码非常适合这些要求。