文章 "神经网络在交易中的应用:一种端到端多变量时间序列预测模型(结论)"

新文章 神经网络在交易中的应用:一种端到端多变量时间序列预测模型(结论)已发布:

我们很高兴为您呈现关于 GinAR 系列文章的最后一部分 — GinAR 是一个用于时间序列预测的神经网络框架。在本文中,我们分析了模型在新数据上的测试结果,并评估了其在真实市场条件下的稳健性。

现在我们来到了最关键 — 或许也是最有趣的 — 部分:评估 GinAR 框架在真实世界条件下的性能。我们已经完成了架构设计阶段、关键组件的实现阶段以及前向和反向传播算法的开发阶段。系统的所有组件都已得到充分开发、测试,并适应了金融时间序列的特定特征。现在,是时候将它们整合在一起,正如他们所说,对它们进行测试 — 看看 GinAR 在处理实际分析和预测任务时有多高效。

在完成离线训练后,我们进入了第二阶段 — 在线微调,这一阶段目前是在类似真实市场的条件下进行的。训练是在MetaTrader 5 策略测试器中进行的,该模型以流式模式逐根 K 线分析市场。这不仅使得测试模型对噪声、市场扭曲和随机波动的抵御能力成为可能,而且还是一种重要的适应工具:模型并非仅仅死记硬背;它实际上学会了在真实且不可预测的条件下运行。这种方法显著提高了模型的适应能力,减少了过拟合,并提高了模型的泛化能力。

最后一步是用全新的数据(2025 年1 月至3 月的报价)来测试该模型。训练期间使用的所有参数和内部设置均保持不变。因此,所得结果不仅可用于客观评估所提方法的准确性,还可评估其实用可靠性。

模型测试结果客观地展示了其在训练样本之外的实际有效性和稳健性。初始存款 100 美元增长至 1,087.74 美元,相当于资本增长了 10 倍以上 — 乍一看,这一结果似乎令人印象深刻。然而,仔细观察后,一个明显的模式变得清晰起来:模型在测试期开始时表现非常出色,但随着数据离训练样本越来越远,其性能开始下降。


作者:Dmitriy Gizlyk

默认参数的重新定义 NeuroNet.mqh 13794 177
没有一个重载可以应用于该函数调用 Math.mqh 66 20

bool Math::MathPow(const double&[], const double, double&[]) Math.mqh 2976 6

他们又在那儿搞了些关于函数调用的 花样……请帮我搞清楚一下,拜托……

无法识别

double Math::MathPow(double a) 这种形式,却只提供了针对数组的实现:

bool Math::MathPow(const double&[], const double, double&[])Math.mqh

这些到底是干什么用的,完全搞不懂?!(((

Andrew_7543 关于函数调用的 花样……请帮我搞清楚一下,拜托……

无法显示

double Math::MathPow(double a) 假设 a 只提供了数组的实现:

bool Math::MathPow(const double&[], const double, double&[])Math.mqh

这些到底是用来干什么的,完全搞不懂?!(((

在出现错误的位置,将MathPow 替换为::MathPow, 这样就可以调用编译器提供的函数,而不是类中声明的函数。

谢谢)其实,除此之外还能怎么办呢——所以我才走上了这条路……
Dmitriy Gizlyk MathPow 替换为::MathPow, 这样就可以调用编译器的函数,而不是类中声明的函数。
此外,NeuroNet.mqh 模块中也存在类似问题:

 call resolves to 'bool CNeuronPSBlock::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,float,ENUM_OPTIMIZATION,uint)' instead of 'bool CNeuronConvSAMOCL::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,uint,ENUM_OPTIMIZATION,uint)' due to new rules of method hiding NeuroNet.mqh 3513 25
   see declaration of function 'CNeuronPSBlock::Init' NeuroNet.mqh 48451 22
   see declaration of function 'CNeuronConvSAMOCL::Init' NeuroNet.mqh 11308 22
no one of the overloads can be applied to the function call NeuroNet.mqh 21835 18
could be one of 2 function(s) NeuroNet.mqh 21835 18
   bool CNeuronConvSAMOCL::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,uint,ENUM_OPTIMIZATION,uint) NeuroNet.mqh 11308 22
   bool CNeuronConvSAMOCL::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,uint,float,ENUM_OPTIMIZATION,uint) NeuroNet.mqh 11309 22
call resolves to '<NA>' instead of 'bool CNeuronConvOCL::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,ENUM_OPTIMIZATION,uint)' due to new rules of method hiding NeuroNet.mqh 21835 18
   see declaration of function 'CNeuronConvOCL::Init' NeuroNet.mqh 10973 22
no one of the overloads can be applied to the function call NeuroNet.mqh 21840 18
could be one of 2 function(s) NeuroNet.mqh 21840 18
   bool CNeuronConvSAMOCL::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,uint,ENUM_OPTIMIZATION,uint) NeuroNet.mqh 11308 22
   bool CNeuronConvSAMOCL::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,uint,float,ENUM_OPTIMIZATION,uint) NeuroNet.mqh 11309 22
call resolves to '<NA>' instead of 'bool CNeuronConvOCL::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,ENUM_OPTIMIZATION,uint)' due to new rules of method hiding NeuroNet.mqh 21840 18
   see declaration of function 'CNeuronConvOCL::Init' NeuroNet.mqh 10973 22
no one of the overloads can be applied to the function call NeuroNet.mqh 21846 18
could be one of 2 function(s) NeuroNet.mqh 21846 18
   bool CNeuronConvSAMOCL::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,uint,ENUM_OPTIMIZATION,uint) NeuroNet.mqh 11308 22
   bool CNeuronConvSAMOCL::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,uint,float,ENUM_OPTIMIZATION,uint) NeuroNet.mqh 11309 22
call resolves to '<NA>' instead of 'bool CNeuronConvOCL::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,ENUM_OPTIMIZATION,uint)' due to new rules of method hiding NeuroNet.mqh 21846 18
   see declaration of function 'CNeuronConvOCL::Init' NeuroNet.mqh 10973 22
no one of the overloads can be applied to the function call NeuroNet.mqh 30722 16
could be one of 2 function(s) NeuroNet.mqh 30722 16
   bool CNeuronConvOCL::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,ENUM_OPTIMIZATION,uint) NeuroNet.mqh 10973 22
   bool CNeuronConvOCL::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,uint,ENUM_OPTIMIZATION,uint) NeuroNet.mqh 10974 22
call resolves to '<NA>' instead of 'bool CNeuronProofOCL::Init(uint,uint,COpenCLMy*,int,int,int,ENUM_OPTIMIZATION,uint)' due to new rules of method hiding NeuroNet.mqh 30722 16
   see declaration of function 'CNeuronProofOCL::Init' NeuroNet.mqh 10856 22
no one of the overloads can be applied to the function call NeuroNet.mqh 30730 16
could be one of 2 function(s) NeuroNet.mqh 30730 16
   bool CNeuronConvOCL::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,ENUM_OPTIMIZATION,uint) NeuroNet.mqh 10973 22
   bool CNeuronConvOCL::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,uint,ENUM_OPTIMIZATION,uint) NeuroNet.mqh 10974 22
call resolves to '<NA>' instead of 'bool CNeuronProofOCL::Init(uint,uint,COpenCLMy*,int,int,int,ENUM_OPTIMIZATION,uint)' due to new rules of method hiding NeuroNet.mqh 30730 16
   see declaration of function 'CNeuronProofOCL::Init' NeuroNet.mqh 10856 22
no one of the overloads can be applied to the function call NeuroNet.mqh 30755 16
could be one of 2 function(s) NeuroNet.mqh 30755 16
   bool CNeuronConvOCL::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,ENUM_OPTIMIZATION,uint) NeuroNet.mqh 10973 22
   bool CNeuronConvOCL::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,uint,ENUM_OPTIMIZATION,uint) NeuroNet.mqh 10974 22
call resolves to '<NA>' instead of 'bool CNeuronProofOCL::Init(uint,uint,COpenCLMy*,int,int,int,ENUM_OPTIMIZATION,uint)' due to new rules of method hiding NeuroNet.mqh 30755 16
   see declaration of function 'CNeuronProofOCL::Init' NeuroNet.mqh 10856 22
wrong parameters count, 12 passed, but 15 requires NeuroNet.mqh 64222 22
   bool CNeuronTimeMoEAttention::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,uint,uint,uint,uint,uint,uint,ENUM_OPTIMIZATION,uint) NeuroNet.mqh 63529 22
call resolves to 'bool CNeuronTimeMoEAttention::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,uint,uint,uint,uint,uint,uint,ENUM_OPTIMIZATION,uint)' instead of 'bool CNeuronCrossDMHAttention::Init(uint,uint,COpenCLMy*,uint,uint,uint,uint,uint,uint,uint,ENUM_OPTIMIZATION,uint)' due to new rules of method hiding NeuroNet.mqh 64222 22
   see declaration of function 'CNeuronTimeMoEAttention::Init' NeuroNet.mqh 63529 22
   see declaration of function 'CNeuronCrossDMHAttention::Init' NeuroNet.mqh 50759 22
7 errors, 8 warnings 7 8
Andrew_7543 #:
此外,NeuroNet.mqh 模块中也存在同样的问题

修正后的库收录于文章《交易中的神经网络:分解而非缩放——模块构建》——MQL5相关文章

Нейросети в трейдинге: Декомпозиция вместо масштабирования — Построение модулей
Нейросети в трейдинге: Декомпозиция вместо масштабирования — Построение модулей
  • 2025.08.08
  • www.mql5.com
В этой статье продолжаем практическое знакомство с SSCNN — архитектурным решением нового поколения, способным работать с фрагментированными временными рядами. Вместо слепого масштабирования — разумная модульность, внимание к деталям и точечная нормализация. Мы шаг за шагом создаём вычислительные блоки в среде MQL5 и закладываем основу для надёжного прогнозного анализа.
谢谢)一切都恢复到终端更新前的状态了……对这篇文章表示特别的敬意!!!!
@Dmitriy Gizlyk,您好……我不太清楚在线学习时具体是如何进行的:选择了哪个时间段?为了更接近实战环境,在策略测试器中使用了哪些设置?