English Русский 中文 Español Português
preview
取引におけるニューラルネットワーク:多変量時系列予測のためのLSTMの最適化(最終回)

取引におけるニューラルネットワーク:多変量時系列予測のためのLSTMの最適化(最終回)

MetaTrader 5トレーディングシステム |
12 25
Dmitriy Gizlyk
Dmitriy Gizlyk

はじめに

前回の記事では、複雑な多変量時系列の予測タスクに対応するために設計されたDA-CG-LSTMフレームワークの理論的基盤について解説しました。 

現代の金融市場は、マクロ経済指標、ニュースイベント、金利の変動、大口市場参加者の行動、さらには多くの潜在的な要因など、数多くの要素が絶えず相互作用する複雑な動的システムです。価格や出来高の推移を表す時系列データは、これらのプロセスを理解するための主要な情報源となります。しかし、このようなデータを分析するには、長期的なトレンドと短期的な変動を同時に捉え、さらに真に重要なシグナルと背景ノイズを識別できるモデルが求められます。

従来の時系列解析手法では、このような多様な市場要因に十分柔軟に対応することが難しく、重要な特徴や時間区間に選択的に着目する能力にも限界があります。その結果、市場のボラティリティが高い環境では予測精度が低下しやすくなります。こうした課題を解決するために開発されたのが、デュアルアテンション機構と改良型再帰ブロックを組み合わせたDA-CG-LSTMフレームワークです。

DA-CG-LSTMの大きな特長の1つは、マルチモーダルデータを柔軟に処理できる点にあります。実際の取引では、価格だけでなく、各種テクニカル指標や外部の経済イベントも同時に分析する必要があります。本フレームワークは、各時間ステップにおいて特徴量の重要度の変化へ動的に適応し、最も重要な情報源へ注意を自動的に再配分します。その結果、多数の特徴量間に存在する複雑な関係を効果的に捉え、市場環境に応じて予測を柔軟に調整することができます。

特に重要なのが、アーキテクチャに組み込まれた2段階のアテンション機構です。第1段階では、各特徴量に注目し、現在の市場動向に最も大きな影響を与えている特徴を特定します。第2段階では、時間方向へ注意を移し、将来の最も可能性の高い値動きを予測するうえで、過去データのどの区間が最も有益かを評価します。この2段階の処理により、情報を深くフィルタリングし、大きなトレンド転換から局所的な異常まで、本当に重要なシグナルに集中しながら、それ以外の情報を効果的に排除できます。

DA-CG-LSTMのもう1つの重要な利点は、ノイズを多く含むデータに対する高い頑健性です。これは実際の金融市場への適用において非常に重要な特性です。金融時系列には、市場の市場の根底にあるメカニズムではなく、さまざまな外部・内部の確率的要因によって生じるランダムな変動が数多く含まれています。本フレームワークのCG-LSTMブロックは、ノイズの影響を動的に抑制できる適応型フィルタとして機能します。特徴量および時間ステップの重みを管理する内部機構により、モデルは安定して繰り返し現れる価格変動パターンを重点的に学習できるため、予測性能を大幅に向上させることができます。

さらに、DA-CG-LSTMは、短期的な変化への感度を維持したまま長い時系列を効率的に処理できる点も特徴です。従来の再帰型ニューラルネットワークでは、入力系列が長くなるほど勾配消失が発生しやすくなり、長距離依存関係を学習する能力が低下する傾向があります。本フレームワークでは、初期段階でのアテンションによる情報フィルタリングと、CG-LSTMブロックにおける特殊なメモリ構造によって、この問題を軽減しています。その結果、長期トレンドを維持しながら、ニュース発表や日中の急激なボラティリティ変動といった短期的なイベントにも迅速に対応できます。

このように、DA-CG-LSTMフレームワークは、多次元データへの適応性、高度な情報フィルタリング能力、ノイズに対する頑健性、そして長期時系列に対する優れた学習性能を兼ね備えています。これらの特性により、現代的な時系列予測システムを構築するための強力な基盤となります。

DA-CG-LSTMアルゴリズムでは、複数の主要モジュールを通じてデータを順次処理します。

最初の段階では、多変量時系列の入力表現が一次アテンションモジュールへ入力されます。このモジュールでは、各時間ステップにおける特徴量の重要度を評価し、重要な情報を強調するとともに、不要な情報ノイズを抑制します。これにより、モデルは最も関連性の高い情報を圧縮・強調しつつ、不要な情報ノイズを除去することが可能になります。

続いて、処理済みデータは二次アテンションモジュールへ入力され、時間方向の重要度が評価されます。ここでは、過去データのどの時間区間が将来の予測に決定的な役割を果たすかをモデルが判断します。

その後、処理済みデータは改良型CG-LSTMブロックへ入力されます。このブロックでは、特徴量の重要度と相互作用を考慮しながら情報が統合されます。CG-LSTMブロックは、通常のLSTMとは異なり、特徴量および時間区間の重要度に応じてメモリセルの動作を制御する追加機構を備えています。そのため、市場要因間の複雑な多次元依存関係をより高い精度でモデル化できます。

2段階のアテンション機構とCG-LSTMブロックによって生成された最終的な特徴表現は、将来の資産価格や価格変動方向など、目的変数の予測に利用されます。

この多段階アーキテクチャにより、モデルは短期的・長期的な依存関係を同時に学習し、ノイズの影響を最小限に抑えながら、市場環境の変化に応じてデータ処理戦略を適応的に変更できます。

DA-CG-LSTMフレームワークに関する著者らの概念図を以下に示します。

著者らによるDA-CG-LSTMフレームワークの可視化

本稿では、DA-CG-LSTMフレームワークの著者らが提案した手法について、MQL5による独自実装をさらに発展させます。今回は、主にモデルアーキテクチャの設計に焦点を当てて解説します。



モデルアーキテクチャ

前述したように、DA-CG-LSTMフレームワークは、アテンションモジュールと改良型CG-LSTM再帰ブロックという2つの基本構成要素を中心に構築されています。これらを組み合わせることで、金融市場への適用に求められる柔軟性、ノイズ耐性、および複雑な多段階の時間的依存関係を捉える能力を備えた堅牢なアーキテクチャが実現されています。市場のボラティリティが高く、不確実性が大きい環境では、このような特性は単なる利点ではなく、信頼性の高い取引システムを構築するための不可欠な要件です。

前回の記事の実践的なセクションでは、MQL5CG-LSTMブロックを実装する手順について詳しく解説しました。完成したコンポーネントは、不要なノイズを除去する特徴量フィルタリング、長期的な情報を保持するための内部状態の効率的な管理、および複数の時間スケールにわたるデータの統合という、3つの重要な機能を実現しています。構造化されていないノイズを抑制しながら安定した学習を維持できるため、長期間の履歴データに対しても高い予測精度を維持するモデルを構築できます。

特徴量間および時間系列間の関係を抽出・解析するために、DA-CG-LSTMの著者らは改良版の線形アテンション機構を提案しています。本実装では、Hidformerフレームワークの開発時に作成したCNeuronLinearAttentionオブジェクトを利用することにしました。両者はアーキテクチャの細部こそ異なるものの、その基本的な考え方は共通しています。

このような理由から、追加の修正を加えることなく既存のアテンションモジュールをそのまま利用することにしました。この判断により、開発期間を大幅に短縮するとともに、十分に検証されていない新しい実装を統合する際のリスクも最小限に抑えることができます。その結果、DA-CG-LSTMフレームワークを構築するために必要なすべての構成要素が揃いました。

次の段階では、これらのコンポーネントを基盤として学習可能なモデルアーキテクチャを設計します。ここでは、単に将来の時系列値を予測するという従来の課題を超えた設計を採用しました。金融市場では価格変動を予測するだけでなく、その予測をトレーディングの意思決定へ効果的に活用し、リスクと期待収益の双方を最適化することが重要だからです。

この目的を達成するために、ノイズ抑制性能と複雑な非線形依存関係の処理能力で高い評価を得ているHiSSDアーキテクチャの優れたアイデアを取り入れました。DA-CG-LSTM構造をエンコーダに統合し、市場環境の状態を記述するエージェントの大域的・局所的スキルのための潜在空間を構築しました。この潜在空間は、その後の分析および意思決定プロセスの基盤となります。

さらに、この基盤構造の上にActor-Director-Critic強化学習フレームワークを実装しました。この統合により、システムは単に予測を生成するだけでなく、期待収益を最大化するための戦略的な行動選択もおこなえるようになります。

学習モデルのアーキテクチャは、CreateDescriptionsメソッドで定義されています。このメソッドは、モデル全体の各階層に対応する6つの動的配列オブジェクトへのポインタを受け取ります。

  • 環境状態エンコーダ:エージェントの大域的スキルを表す潜在空間を構築します。現在の市場状態を包括的に表現し、市場の変動に影響を与える要因間の潜在的な関係を抽出します。
  • 低レベルコントローラー:解析された市場特徴に基づいてエージェントの局所的スキルを生成します。これらを大域的スキルと組み合わせて解釈することで、短期・長期の市場トレンドを考慮した、有望な取引シナリオを表す行動テンソルを生成します。
  • Actor:コントローラーから受け取った行動テンソルを、現在の口座状態、リスク水準、および事前に定義された戦略目標と照らし合わせて評価し、許容可能な損失を管理しながら利益の最大化を目指す最終的な取引判断を生成します。
  • 確率的トレンド予測モデル:市場の将来方向に関する確率的な表現を付加することで、大域的スキルをより豊かな情報で補強します。これにより、市場の確率的な性質を考慮した、より堅牢な戦略の構築が可能になります。
  • Director:行動を事前にフィルタリングし、過度に高いリスクを伴う意思決定の可能性を低減します。Actorの方策を、現在の市場環境に適した、より保守的で信頼性の高いシナリオへ誘導します。
  • Critic:将来の時間軸における選択した戦略の有効性を評価し、累積利益の最大化と適切なリスク水準の維持を両立できるようにエージェントの行動を調整します。

CreateDescriptionsメソッドでは、渡された各ポインタを厳密に検証し、必要に応じてレイヤー記述オブジェクトの新しいインスタンスを生成することで、モデル構築のあらゆる段階においてアーキテクチャの整合性と正当性を確保します。

bool CreateDescriptions(CArrayObj *&encoder,
                        CArrayObj *&task,
                        CArrayObj *&actor,
                        CArrayObj *&probability,
                        CArrayObj *&director,
                        CArrayObj *&critic
                       )
  {
//---
   CLayerDescription *descr;
//---
   if(!encoder)
     {
      encoder = new CArrayObj();
      if(!encoder)
         return false;
     }
   if(!task)
     {
      task = new CArrayObj();
      if(!task)
         return false;
     }
   if(!actor)
     {
      actor = new CArrayObj();
      if(!actor)
         return false;
     }
   if(!probability)
     {
      probability = new CArrayObj();
      if(!probability)
         return false;
     }
   if(!director)
     {
      director = new CArrayObj();
      if(!director)
         return false;
     }
   if(!critic)
     {
      critic = new CArrayObj();
      if(!critic)
         return false;
     } 

まず、環境状態エンコーダのアーキテクチャについて説明します。これまでの実装と同様に、生の入力データは十分な次元数を持つ完全結合層へ入力されます。この層はモデルへの入力ゲートウェイとして機能し、事前に手作業で特徴量を加工することなく、生の入力データをそのまま受け入れます。

//--- Encoder
   encoder.Clear();
//--- Input layer
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronBaseOCL;
   int prev_count = descr.count = (HistoryBars * BarDescr);
   descr.activation = None;
   descr.optimization = ADAM;
   if(!encoder.Add(descr))
     {
      delete descr;
      return false;
     }

情報源として使用するのは、取引ターミナルから直接取得されるデータです。具体的には、価格データ、取引量、市場センチメント指標、およびその他の関連パラメータが含まれます。意図的に、モデル外部で行う前処理は一切採用していません。この方針は、モデルに自己学習能力やノイズ除去能力をより高いレベルで求めるため、学習を難しくすることは間違いありません。しかし、その代わりに、実運用時にははるかに高い頑健性を得ることができます。

学習済みモデルが実運用において安定した再現性のある結果を示すためには、運用時に入力されるデータが学習時と同様の分布に従っていることが重要です。モデル外部で手作業による前処理をおこなうと、予測不能な分布の変化が生じるリスクが高まります。フィルタやそのパラメータにわずかな変更を加えただけでも、入力データの性質は大きく変化する可能性があります。そのため、データ前処理はモデルアーキテクチャそのものに組み込まれるべき機能であると考えています。

これらのリスクを最小限に抑え、学習品質を向上させるために、初期データ処理の段階をエンコーダ構造へ直接組み込みました。この役割を担うのが、ノイズ注入機構を備えたバッチ正規化層CNeuronBatchNormWithNoiseです。バッチ正規化により、異種かつマルチモーダルなデータを共通のスケールへ正規化し、学習の安定性を向上させるとともに、モデルの収束を高速化します。さらに、少量のノイズを用いたデータ拡張を組み合わせることで、モデルの汎化性能が向上し、限られたデータセットで学習する際の過学習リスクを低減できます。

//--- layer 1
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronBatchNormWithNoise;
   descr.count = prev_count;
   descr.batch = 1e4;
   descr.activation = None;
   descr.optimization = ADAM;
   if(!encoder.Add(descr))
     {
      delete descr;
      return false;
     }

正規化されたデータは、その後、各時間ステップ内における特徴量間の依存関係を解析する線形アテンションモジュールへ入力されます。

この段階では、データの内部構造を正しく解釈することが特に重要になります。モデルが扱うのは時系列データですが、各時間ステップでは常に、市場環境の状態を記述する同一の特徴量集合が入力されます。

このように、すべての時間ステップでデータ構造が共通していることから、本実装では、すべての時間ステップの解析に単一の学習可能なパラメータ行列を共有して使用することにしました。言い換えれば、モデルは時系列全体に対して共通のユニバーサルなアテンション機構を適用します。この設計には、以下のような重要な利点があります。

  • 異なる時間区間にわたって特徴量の解釈に一貫性を持たせることができる。
  • 学習可能なパラメータ数を大幅に削減できるため、特に学習データが限られている場合に有利である。
  • 過学習を抑制し、モデルの汎化性能を向上させることができる。
  • 計算量の削減により、学習を高速化できる。

//--- layer 2
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronLinerAttention;
   prev_count = descr.count = HistoryBars;
   descr.window = BarDescr;
   descr.layers = 1;
   descr.window_out = 32;
   descr.batch = 1e4;
   descr.optimization = ADAM;
   descr.activation = None;
   if(!encoder.Add(descr))
     {
      delete descr;
      return false;
     }

各時間ステップにおける特徴量間の依存関係を解析した後、次に重要となるのが、入力データの時間方向の解析です。この処理をおこなうために、まず元のテンソルを転置し、それぞれの特徴量を時間方向に並んだ観測系列として扱えるようにします。

転置されたテンソルは、その後、時間的ダイナミクスの解析専用に設計された第2の線形アテンションモジュールへ入力されます。

ここで重要なのは、テンソルを転置することによって、それぞれが単一の特徴量の時間的変化を表す複数の単変量時系列が得られる点です。これらの特徴量は異なるデータモダリティに属している可能性があり、同じ市場イベントに対してもモダリティごとに異なる応答特性を示すことがあります。そのため、この段階では、より柔軟なアプローチを採用し、各単変量系列に対して独立した学習可能なパラメータ行列を割り当てます。この仕組みにより、次のような利点が得られます。

  • 各モダリティ固有の特性を考慮しながら、その時間的ダイナミクスを解釈できる。
  • 同一の市場イベントに対する特徴量ごとの固有の応答パターンを学習できる。
  • 個々のデータチャネルに含まれる弱いながらも重要なシグナルに対する感度を高めることができる。
  • 本質的に異なる種類の特徴量に由来する情報が混在することを防ぐことができる。

このようなアーキテクチャは、金融市場において特に効果的です。金融市場では、異種のデータソースが、ファンダメンタルズ要因やテクニカル要因に対して、それぞれ異なる速度、振幅、および方向性で反応することが一般的だからです。

//--- layer 3
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronTransposeOCL;
   descr.count = HistoryBars;
   descr.window = BarDescr;
   descr.batch = 1e4;
   descr.optimization = ADAM;
   descr.activation = None;
   if(!encoder.Add(descr))
     {
      delete descr;
      return false;
     }
//--- layer 4
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronLinerAttention;
   descr.count = 1;
   descr.window = HistoryBars;
   descr.layers = BarDescr;
   descr.window_out = 32;
   descr.batch = 1e4;
   descr.optimization = ADAM;
   descr.activation = None;
   if(!encoder.Add(descr))
     {
      delete descr;
      return false;
     }

2つのアテンション層を通過した後、入力データは大幅に豊かな表現を獲得します。この時点で、データには特徴量間の内部的な関係だけでなく、各モダリティ固有の時間的依存関係に関する情報も含まれています。しかし、金融市場において効果的な意思決定戦略を構築するためには、これらの情報を、よりコンパクトで意味のある表現へ集約する必要があります。

内部表現が強化されたデータは、その後CG-LSTMブロックへ入力されます。ここでは、前段階で生成された各単変量系列が独立して解析されます。この点は、DA-CG-LSTMフレームワークの著者らが提案した元のアーキテクチャとは大きく異なります。従来のDA-CG-LSTMでは、各時間ステップに対応するマルチモーダル表現を再帰セルが処理することで、異なるモダリティ間に存在する複雑な依存関係を学習します。

一方、本プロジェクトでは、意図的に異なる戦略を採用しました。これは、HiSSDアーキテクチャで導入した考え方をさらに発展させたものです。HiSSDでは、各エージェントに対応する単変量系列を独立して予測することを重視しています。このアプローチにより、各モダリティ固有の振る舞いをより柔軟かつ高い精度で学習できるだけでなく、異なるデータソース間で発生するクロスモーダルノイズの影響を最小限に抑えることができます。

このようなCG-LSTMにおけるデータ処理方式には、次のような利点があります。

  • データの特定の側面に対して、隠れ状態をより明確に特化させることができる。
  • 市場情報の構造変化に対するモデルの頑健性を向上できる。
  • 各スキルベクトルが解析対象データの特定のモダリティに対応するため、大域的スキルの解釈性が向上する。

再帰ブロックを設計する際には、重要なアーキテクチャ上の判断を行いました。各CG-LSTM要素の隠れ状態の次元を、個々のエージェントが持つ大域的スキルベクトルの次元と同じに設定したのです。これにより、各単変量系列は、その長期的な振る舞いの本質的な特徴を符号化した固定長の出力表現を生成できるようになります。これらの表現は、その後の意思決定プロセスの基盤となります。

また、大域的スキル行列は完全に学習可能な形で構築される点も重要です。モデル自身が、実際の取引環境において成功するために、どの特徴量の振る舞いが最も重要であるかを自律的に学習します。

//--- layer 5
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronCGLSTMOCL;
   descr.count = NSkills;                      // Common Skkills
   descr.window = HistoryBars;                 // Sequence
   descr.layers = BarDescr;                    // Variables
   descr.batch = 1e4;
   descr.activation = None;
   descr.optimization = ADAM;
   if(!encoder.Add(descr))
     {
      delete descr;
      return false;
     }

ここで、HiSSDフレームワークの高レベルプランナーが、次のシステム状態を高精度に予測することを目的として潜在状態を符号化し、大域的スキルを学習することを思い出してください。同様に、DA-CG-LSTMフレームワークの主たる目的も、マルチモーダル時系列を可能な限り高い精度で予測することにあります。そのため、このフレームワーク全体のアーキテクチャは、この目的を達成するために設計されています。高度なアテンション機構、強力な再帰ブロック、そしてデコーダは、いずれも隠れたパターンを抽出し、予測性能を向上させるためのものです。

しかし、本プロジェクトでは、これとは根本的に異なるアプローチを採用し、このアーキテクチャを別の目的のために意図的に再利用しています。その目的とは、可能な限り情報量の多い潜在表現、すなわちエージェントの大域的スキルを学習することです。私たちが重視しているのは、次の時系列値を正確に予測することではなく、エージェントが最適な方策を学習するための堅牢な基盤となる市場の内部表現を構築することです。

このような目的の違いから、本実装では、DA-CG-LSTMのオリジナルデコーダが持つ複雑なアーキテクチャを採用しませんでした。その高度な潜在空間解析機構は、大域的スキルを変形あるいは再解釈してしまう可能性があり、エージェント制御に利用する表現としての有用性を損なう恐れがあるためです。

その代わりに、本実装では2層の畳み込み層を直列に配置したシンプルなデコーダを採用しました。この構成により、隠れ表現をシンプルかつ直接的に処理できるほか、大域的スキルの構造への干渉を最小限に抑えることができます。また、高い解釈性を維持するとともに、各単変量特徴系列を独立して処理することも可能です。

このアプローチにより、学習された潜在空間の整合性と情報価値を維持したまま、Actorの方策をより効果的に学習できる基盤を構築することができます。

//--- layer 6
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronConvOCL;
   descr.count = 1;
   descr.window = NSkills;
   descr.step = NSkills;
   int prev_out = descr.window_out = 4 * NForecast;
   prev_count=descr.layers = BarDescr;
   descr.activation = SoftPlus;
   if(!encoder.Add(descr))
     {
      delete descr;
      return false;
     }
//--- layer 7
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronConvOCL;
   descr.count = 1;
   descr.window = prev_out;
   descr.step = prev_out;
   prev_out = descr.window_out = NForecast;
   descr.layers = prev_count;
   descr.activation = TANH;
   if(!encoder.Add(descr))
     {
      delete descr;
      return false;
     }

予測値を実際のデータと正しく対応付けるため、デコーダ処理の最終段階で出力テンソルを元の構造へ再び転置します。

//--- layer 8
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronTransposeOCL;
   descr.count = prev_count;
   descr.window = prev_out;
   descr.activation = None;
   if(!encoder.Add(descr))
     {
      delete descr;
      return false;
     }

しかし、形状を元に戻した後でも、予測値は依然として正規化された状態のままです。そのため、次に重要となる処理は逆変換です。この段階では、バッチ正規化処理の際に記録された元の特徴量分布の統計的パラメータを復元します。

//--- layer 9
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronRevInDenormOCL;
   descr.count = prev_count * prev_out;
   descr.layers = 1;
   descr.activation = None;
   if(!encoder.Add(descr))
     {
      delete descr;
      return false;
     }

次に、低レベルコントローラのアーキテクチャについて説明します。このモデルは、各時点における環境状態の分析に基づいて、エージェントの局所的な戦略を構築する上で重要な役割を果たします。

コントローラーへの入力には、大域的スキルエンコーダと同様に、環境から取得された生データが使用されます。実際、そのアーキテクチャは基本的に同一の構造を基盤としています。すなわち、ランダムノイズ注入を伴う初期データ正規化、線形アテンションモジュールによる2段階の解析処理、そして時系列処理を担当するCG-LSTM再帰ブロックです。

大域的スキルと局所的スキルの本質的な違いは、その構築メカニズムにあるのではなく、学習過程においてエージェントが解決すべき課題の違いにあります。大域的スキルの場合、長期的な依存関係や市場の主要な特徴を統合できる汎用的な潜在空間を構築することが重視されます。一方、局所的スキルは、現在の市場状態へ迅速に適応し、各時間ステップにおいて具体的な取引行動を生成することを目的としています。

したがって、本実装ではスキルエンコーダのアーキテクチャをそのまま複製して使用します。

//--- Task
   task.Clear();
//--- Task Encoder
   for(int i = 0; i <= LatentLayer; i++)
      if(!task.Add(encoder.At(i)))
         return false;

局所的スキルを生成した後、次の段階では、エージェントの大域的スキルに含まれる文脈情報を用いて、これらの表現をさらに強化します。この処理を実現するために、2層構成のクロスアテンションブロックを採用します。

エージェントの局所的スキルはQueryとして機能し、すべてのエージェントの大域的スキルはKeyおよびValueとして使用されます。ここで重要となる考え方は、各エージェントの局所的スキルを単独で解釈するのではなく、システム全体の潜在空間という広い文脈の中で評価することです。これにより、より情報量の多い意思決定が可能になります。

このブロックの特徴は、2段階のクロスアテンション機構を採用している点です。第1段階では、標準的なクロスアテンション処理を実行します。局所的なQueryは、大域的情報の中から最も関連性の高い部分を抽出します。これにより、エージェントは現在の環境状態だけでなく、大域的スキルに符号化された戦略的なトレンドも考慮しながら、短期的な行動を柔軟に適応させることができます。

第2段階では、追加のアテンション層によって統合処理をさらに強化します。この層により、短期的な目標と長期的な戦略的指針との間に存在する、より深く複雑な関係を抽出することが可能になります。

このように局所的な文脈と大域的な文脈を統合することで、モデルはよりバランスが取れ、根拠のある取引判断を生成できるようになります。その結果、エージェントは誤ったシグナルや短期的な市場ノイズに対して、より高い耐性を持つことができます。

//--- layer LatentLayer+1
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronCrossDMHAttention;
     {
      int temp[] = {NSkills, NSkills};                         // WIndow
      if(ArrayCopy(descr.windows, temp) < (int)temp.Size())
         return false;
     }
     {
      int temp[] = {BarDescr, BarDescr};                       // Units
      if(ArrayCopy(descr.units, temp) < (int)temp.Size())
         return false;
     }
   descr.step = 4;
   descr.window_out = 32;
   descr.layers = 2;
   descr.batch = 1e4;
   descr.optimization = ADAM;
   descr.activation = None;
   if(!task.Add(descr))
     {
      delete descr;
      return false;
     }

大域的な文脈情報によって強化された局所的スキルは、その後、意思決定ブロックへ入力されます。ここでは、2つの連続した畳み込み層が中心的な役割を果たします。このアーキテクチャにより、各エージェントに対して独立したMLPを効率的に並列実行することが可能になります。

各エージェントは、自身に割り当てられた局所的な潜在空間を個別に解釈し、他のエージェントの処理へ直接干渉することなく意思決定をおこないます。畳み込み構造は、すべてのエージェントを同時に処理できるため、高い計算効率を実現します。一方で、各エージェントは専用のパラメータ行列を用いて独立して動作します。

2つの畳み込み層を直列に配置する構成により、さらに柔軟なアーキテクチャが実現されます。第1層では、特徴量の初期的な統合と変換を行い、第2層では、局所的表現をさらに洗練し、最終的な行動テンソルを生成します。このアプローチにより、ボラティリティの高い金融市場環境において、エージェントの行動適応性と頑健性の両方を向上させることができます。

//--- layer LatentLayer+2
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronConvOCL;
   descr.count = 1;
   descr.window = NSkills;
   descr.step = NSkills;
   prev_out = descr.window_out = 4 * NActions;
   prev_count=descr.layers = BarDescr;
   descr.activation = SoftPlus;
   if(!task.Add(descr))
     {
      delete descr;
      return false;
     }
//--- layer LatentLayer+3
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronConvOCL;
   descr.count = 1;
   descr.window = prev_out;
   descr.step = prev_out;
   prev_out = descr.window_out = NActions;
   descr.layers = prev_count;
   descr.activation = SIGMOID;
   if(!task.Add(descr))
     {
      delete descr;
      return false;
     }

高レベルActorDirectorCriticモデルのアーキテクチャは、以前の研究で使用したものをそのまま継承しています。これらの詳細な説明については、こちらを参照してください。そのため、本稿ではこれらのモデルについて詳しくは扱いません。すべてのモデルアーキテクチャの完全な説明は、添付ファイルに収録されています。


モデル学習

モデルの学習プロセスは、3つの段階で構成されています。すなわち、データセットの生成、すべてのモデルコンポーネントに対するオフライン学習、そしてその後のオンラインファインチューニングです。このアプローチにより、過去の履歴データから得られる基本的な安定性と、現在の市場状況へ柔軟に適応する能力を両立させます。

学習時に使用するすべてのプログラムは、以前の研究から変更せずに引き継いでいます。そのため、ここでは各アルゴリズムの詳細については説明せず、処理の基本的な原理のみを改めて確認します。

モデル学習は、学習用データセットの作成から開始されます。この目的のために、MetaTrader 5のストラテジーテスター上でResearch.mq5エキスパートアドバイザー(EA)を実行し、2024年1年間におけるEURUSD通貨ペアの1分足データを収集します。計算負荷を軽減するため、1回の実行では1か月分の履歴データのみを処理します。一方で、エージェント間の行動多様性はランダム化された方策によって確保します。各ローソク足の確定後、市場状態、インジケータ値、口座情報、およびエージェントの行動が記録され、経験リプレイバッファ用の完全な軌跡データが形成されます。

収集されたデータは、すべてのコンポーネントのオフライン学習に利用されます。この処理はStudy.mq5 EAを使用して実行されます。経験リプレイバッファから軌跡および開始位置をランダムにサンプリングし、連続した状態系列からなる学習バッチを構築します。収束速度を向上させるために、ほぼ完璧な軌道技術(near-perfect trajectory)手法を採用し、エンコーダが数ステップ先の状態を予測できるようにします。この段階では、スキルエンコーダActorDirectorCriticが学習され、エージェントの基本的な行動方策が構築されます。

オフライン学習が完了すると、オンラインファインチューニングの段階へ移行します。ここでは、StudyOnline.mq5 EAを使用します。主な目的は、DirectorおよびCriticによる監督の下でActorをさらに学習させることです。新しいローソク足が確定するたびに、システムは環境状態を解析し、行動評価を更新するとともに、モデルパラメータを調整します。また、ターゲットモデルに対して定期的にソフトアップデートを実行することで、戦略の安定性と市場変化への適応性のバランスを維持します。

このように、オフラインで蓄積した知識とオンラインでの適応処理を組み合わせた多段階学習方式により、実際の市場環境において高い効率性と頑健性を備えた運用が可能になります。


テスト

実装したソリューションおよび得られた取引方策を客観的に評価するためには、学習プロセスで使用されていないデータを用いる必要があります。この目的のため、2025年1月から3月までの期間をテスト期間として選択しました。学習データセットに含まれていない履歴データを使用することで、過学習のリスクを排除し、得られた結果に実用的な意味を持たせることができます。

その他の実験条件(市場環境、時間足、および端末設定)はすべて変更せず維持しました。これにより、外部要因による影響を排除し、学習された戦略そのものの品質のみを評価することが可能になりました。

テスト結果を以下に示します。これらの結果は、実際の市場環境におけるエージェントの行動モデルを明確に示しています。

テスト期間中、モデルは37件の取引を実行しました。そのうち、利益確定で終了した取引は40%をわずかに超える程度でした。しかし、それでもモデルは全体として利益を生成することに成功しました。これは、平均利益取引の金額が平均損失取引の2倍以上に達したためです。結果として、プロフィットファクターは1.67となりました。



結論

本研究では、DA-CG-LSTMフレームワークの理論的基盤について検討しました。このフレームワークは、CG-LSTMやデュアルアテンション機構といった革新的な構成要素を導入することで、従来のモデルとは異なる特徴を持っています。これらの要素により、時間的依存関係をより正確に抽出し、短期的な変動と長期的なトレンドの両方を捉えることが可能になります。

実践セクションでは、取引エージェントの学習に適応させた改良型アーキテクチャを紹介しました。デコーダを簡略化し、畳み込みブロックを採用することで、学習プロセスを大域的スキルの抽出に集中させることができました。これは、堅牢で適応性の高い取引戦略を構築する上で重要な要素となります。

実装した手法の有効性は、学習期間外のテストデータセットを用いて評価しました。利益取引の割合は40%をわずかに上回る程度でしたが、平均利益と平均損失の比率が十分に高かったため、最終的には全体としてプラスの結果を得ることができました。

なお、本稿で紹介したモデルは、現時点では探索的な研究段階にあることを強調しておく必要があります。実際の取引環境へ導入する前には、より代表性の高いデータセットを用いた追加学習を行い、さらに幅広い市場条件下で包括的な検証を実施する必要があります。


参照文献


記事で使用されたプログラム

# 名前 種類 詳細
1 Research.mq5 EA サンプル収集用EA
2 ResearchRealORL.mq5
EA
Real-ORL法を用いたサンプル収集用EA
3 Study.mq5 EA オフラインモデル学習用EA
4 StudyOnline.mq5
EA
オンラインモデル学習用EA
5 Test.mq5 EA モデルテスト用EA
6 Trajectory.mqh クラスライブラリ システム状態とモデルアーキテクチャ記述構造
7 NeuroNet.mqh クラスライブラリ ニューラルネットワークを作成するためのクラスのライブラリ
8 NeuroNet.cl コードライブラリ OpenCLプログラムコード

MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/17939

添付されたファイル |
MQL5.zip (2687.97 KB)
最後のコメント | ディスカッションに移動 (25)
Vladimir Sanin
Vladimir Sanin | 23 5月 2025 において 11:02
Vladimir Sanin #:

|
Researchで1か月間、5分間のデータを処理したところ、300MBのDACGLSTM.bdが生成された。Studyを実行した。エラー率が恐ろしいほど高い。それとも、最初の実行としてはこれが普通なのだろうか?

Study終了後、.nnw形式のニューラルネットワークファイルが生成されました。データ収集のループを再度実行したところ、翌月にはすでにResearchが取引を行わなくなってしまいました……

Vladimir Sanin
Vladimir Sanin | 24 5月 2025 において 11:59

やった!数週間にわたる試行錯誤の末、ついにStudyのエラー値が正常に戻った!これでニューラルネットワークが本格的に学習できるようになった。

報酬とペナルティのアルゴリズムを拡張する必要がありました



また、Trajectoryの入力パラメータも大幅に調整する必要がありました


Aleksei Kuznetsov
Aleksei Kuznetsov | 24 5月 2025 において 19:07
Vladimir Sanin #:

やった!数週間にわたる試行錯誤の末、ついにStudyのエラー値が正常に戻りました!これでニューラルネットワークが本格的に学習できるようになりました。

さて、ここからが最も興味深いところだ――新しいデータでどのように取引を行うか……。現在は木モデルを扱っているが、それの方が理解しやすい。しかし、新しいデータでは有意な特徴量がないため、取引はほぼランダムな状態になっている。

Vladimir Sanin
Vladimir Sanin | 24 5月 2025 において 23:10
Forester #:

さて、ここからが最も興味深いところだ――新しいデータを使ってどのようにトレードしていくか……。私はウッドモデルを扱っているが、そちらの方が理解しやすい。しかし、新しいデータでは、有意な特徴量がないため、トレードはほぼランダムになってしまう。

実際の取引までにはまだ道のりがある)Research-Studyを数回繰り返すと、取引が非常に早く決済され始める。ニューラルネットワークは利益を上げるのではなく、生き残ることを学んでいるのだ。そして、取引期間が短いほど、ペナルティが少なくなると認識しているようだ。 試行錯誤は続いています。報酬とペナルティのアルゴリズムを正しく構築する必要がありますが、これがどうやら最も難しいようです。今のところ、単に厳格に制限を試みています。例えば、ストップやテイクを閾値以下に設定できないようにしています。 また、取引が開始直後に決済されないよう、取引の最低存続時間を制限するよう試みている。LLMとしてはGrokかChatGPT 4.1を使っているが、時折とんでもなく間抜けなことをして、頭を抱えてしまう。それでも、少しずつではあるが進展は見られる。 学習サイクルに多くの時間がかかっています。誰かと力を合わせられれば良いのですが、この分野は非常に将来性があります。

Vladimir Sanin
Vladimir Sanin | 24 5月 2025 において 23:39
要するに、部分的な決済、フィルターによる決済、そしてトレーリングをすべて無効にした。これでニューラルネットワークは、ストップとテイクプロフィットを設定して単純にポジションを建てるようになった。これで、単に生き残ることだけを優先して性能が低下しないことを願っている。 パターンを見つけられるようになるかどうか、様子を見てみよう。
取引におけるニューラルネットワーク:適応型モード分解を用いた時系列予測(ACEFormer) 取引におけるニューラルネットワーク:適応型モード分解を用いた時系列予測(ACEFormer)
ACEFormerアーキテクチャについて紹介します。これは、Probabilistic Attention(確率的注意)機構の有効性と、適応型時系列分解を組み合わせた最新のソリューションです。本記事は、金融市場において計算性能と予測精度のバランスを求める方にとって有用な内容となっています。
取引におけるニューラルネットワーク:多変量時系列予測のためのLSTMの最適化(DA-CG-LSTM) 取引におけるニューラルネットワーク:多変量時系列予測のためのLSTMの最適化(DA-CG-LSTM)
時系列分析および予測に新たな手法を提供するDA-CG-LSTMアルゴリズムを紹介します。革新的なアテンション機構とモデルの柔軟性を活用することで、予測精度をどのように向上できるのかを解説します。
取引におけるニューラルネットワーク:適応型モード分解を用いた時系列予測(最終回) 取引におけるニューラルネットワーク:適応型モード分解を用いた時系列予測(最終回)
アルゴリズム取引におけるACEFormerフレームワークの適応およびMQL5を用いた実用的な実装について説明します。特に、主要なアーキテクチャ設計の判断、学習プロセスの特徴、そして実データを用いたモデル検証結果について紹介します。
取引におけるニューラルネットワーク:Actor-Director-Critic(最終回) 取引におけるニューラルネットワーク:Actor-Director-Critic(最終回)
Actor-Director-Criticフレームワークは、古典的なエージェント学習アーキテクチャを発展させたものです。本記事では、その実装と金融市場環境への適応に関する実践的な経験を紹介します。