記事「取引におけるニューラルネットワーク:多変量時系列予測のためのエンドツーエンドモデル(最終回)」についてのディスカッション

新しい記事「取引におけるニューラルネットワーク:多変量時系列予測のためのエンドツーエンドモデル(最終回)」はパブリッシュされました:

時系列予測のためのニューラルネットワークフレームワークであるGinARフレームワークに関する連載の最終回です。 新たなデータを用いたモデルのテスト結果を分析し、実際の市場環境における頑健性を評価します。

そして今回、最も重要で、おそらく最も興味深い段階に進みます。GinARフレームワークを実際の環境に近い条件下で評価する段階です。 これまでに、アーキテクチャの設計、主要コンポーネントの実装、順伝播・逆伝播アルゴリズムの開発を完了しました。 各コンポーネントについても、金融時系列データ特有の性質を考慮しながら、開発・テスト・調整を進めてきました。 ここで、すべての要素を統合し、実際の性能を確かめることにします。つまり、GinARが実際の分析・予測タスクをどの程度効果的に処理できるのか、実地で検証する段階に入ります。

オフライン学習を終えた後、第2段階として、実際の市場に近い条件下でオンライン微調整を実施しました。 学習にはMetaTrader 5のストラテジーテスターを使用し、モデルはストリーミングモードで、ステップごと、ローソク足ごとに市場を分析しました。 この方法により、ノイズ、市場の歪み、ランダムな変動に対するモデルの耐性を検証できただけでなく、モデルを適応させるための重要な手段にもなりました。つまり、モデルは単にデータを記憶するのではなく、現実の予測不可能な環境で実際に機能する方法を学習したのです。 このアプローチにより、モデルの頑健性が大幅に向上し、過学習が抑制され、汎化能力も改善されました。

最後の段階では、まったく新しいデータ、すなわち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) といった関数は見当たらず、配列向けの実装しか提供されていないようです:

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 こんにちは……オンライン学習では具体的にどのようなことが行われているのか、よく分かりません。どの期間を選んだのか、実戦に近い条件にするために戦略テスターにどのような設定を適用したのでしょうか?