取引におけるニューラルネットワークの実用化

Andrey Dibrov | 9 10月, 2020

はじめに

本稿では、自動売買ロボット作成へのニューラルネットワークの適用について検討します。これが狭い意味での問題です。より広い意味では、いくつかの質問に答え、いくつかの問題に対処しようとします。

  1. 機械学習を使用して収益性の高いシステムを作成できますか?
  2. ニューラルネットワークが私たちに与えることができるもの
  3. 意思決定のためにニューラルネットワークを訓練する理由
  4. ニューラルネットワーク: それは難しいですか、それとも単純ですか?
  5. ニューラルネットワークを取引ターミナルに統合する方法
  6. ニューラルネットワークをテストする方法テスト段階
  7. 訓練サンプルについて


1. 機械学習を使用して収益性の高いシステムを作成できますか?

特定のシステムなしで外国為替市場で実際に取引し始めたばかりの初心者の多くは、おそらく、取引候補の指標のリストをメモして、ターミナルの指標チャートに基づいてそれらの横にプラスまたはマイナス記号、矢印、価格変動確率を書き足すかと思います。次に、観察結果を要約し、特定の方向に注文を出す(または、注文を出すのに適した時期か別の機会を待つ方がよいかどうか)ための決定を行います。

では、最先端のニューラルネットワーク(つまり私たちの脳)では何が起こっているのでしょうか。私たちは、指標を観察した後に最終的なシグナルを生成する複合指標をイメージし、それに基づいて決定を下します。または、一連のシグナルが指標に編集されます。次のことを考えてみてください。ある時点で指標を調査し、最大で数期間の履歴を調査する場合、過去数年間にこれらの指標を同時に調査してから、更に最適化できる単一の複合指標をコンパイルするにはどうすればよいでしょうか。

これが、ニューラルネットワークが私たちに何を与えることができるかという、2番目の質問に対する答えです。言い換えてみると、訓練の結果としてニューラルネットワークから何を取得したいかということになります。論理的には、最初の質問にも肯定的な答えがあります。プログラムで行うことです。これが実際にどのように実装されているかはビデオ(https://youtu.be/5GwhRnSqT78)を見るとわかります。また、ニューラルネットワークモジュールのオンラインテストを紹介するビデオプレイリスト(https://youtu.be/3wEMQOXJJNk)も視聴できます。


2. 意思決定のためにニューラルネットワークを訓練する理由

取引システムの開発を開始する前に、システム機能の原則が何かという質問に答えます。基本原則にはフラットな取引とトレンドの継続の2つがあります。日中取引、ファンダメンタルデータやニュースの利用、市場が開いた時の取引など、これら2つのシステムから派生したものは考慮しません。ニューラルネットワーク製品の説明に出くわしたのですが、著者は、それらを使用して株式や通貨などの価格を予測することを提案していました。

価格予測のため訓練されたニューラルネットワークの動作を示すチャート

1. 価格予測のため訓練されたニューラルネットワークの動作を示すチャート

ニューラルネットワークの値は価格チャートを繰り返しているが、一歩遅れていることがわかります。結果は、価格データとそのデリバティブのどちらを予測するかには依存しません。ここでいくつかの結論を出すことができます。「私たちの「昨日」はニューラルネットワークの「今日」です。」が例ですが、あまり役立つものではありません。ただし、このバリアントは改訂後には使用できます。

ここでの目的は、一種のタイムマシン的な、「NN(ニューラルネットワーク)の今日は私たちの明日です。」です。私たちは最良のニューラルネットワークが人間の脳であることを理解しています。その効率は50%(はい/いいえの確率について言えば)、またはそれ未満です。「NNの昨日は私たちの今日です」または「私たちの今日はNNの昨日です」という3番目のオプションもあります。上記の状況が取引で何を意味するかを考えてみましょう。

最初のバリアントはまったく適していません。2番目と3番目のバリアントは取引に非常に適していますが、2番目のバリアントは、将来を垣間見ることができます。大まかに言えば、NNからのシグナルは、特定の瞬間、たとえば1日の終わりに受信され、翌日の終値レベルが予測されます(現在、取引が成立する前の価格変動には関心がありません)。 この段階では、このアイデアを純粋に自動化された取引(収益性の高い取引)に実装するのは困難です。3番目のバリアントのアイデアは、取引セッション中のNNの応答を追跡することです。この応答を解釈して、資産を売買します。ここで、私たちは主なことを理解する必要があります。

実装されるバリアントは、ニューラルネットワークを訓練する方法によって異なります。この場合、3番目のバリアントの方が実装が簡単です。2番目のバリアントでは、翌日の結果、つまりその終値を受け取る目的で任意の情報を使用します(日は例として使用されているだけで、任意の期間にすることができます)。3番目のバリアントでは、決定を下す前に1つ前の手順で受け取った情報を使用して、価格がどこに移動するかを示します。システムでは3番目のバリアントを使用しています。


3. ニューラルネットワーク: それは難しいですか、それとも単純ですか? 

取引システムを作成しようとしているのですが、ニューラルネットワークはどこで取得し、どのように訓練し、どのように取引ターミナルに統合できるのでしょうか。私は、NeuroSolutionsとMatlabという既製のニューラルネットワークを使用しています。これらのプラットフォームでは、適切なネットワークを選択して訓練し、目的のインターフェイスで実行可能ファイルを作成できます。結果のニューラルネットワークプログラムは次のようになります。

Matlab環境で作成されたニューラルネットワークモジュール

2. Matlab環境で作成されたニューラルネットワークモジュール

または

Neuro Solutions環境で作成されたニューラルネットワークモジュール

3. Neuro Solutions環境で作成されたニューラルネットワークモジュール

金融市場でのニューラルネットワークアプリケーションの可能性を研究したところ、ニューラルネットワークはメインのシグナルオシレータとしてだけでなく、取引エキスパートアドバイザーのソフトウェア部分をアンロードするためのオプションとしても使用できるという結論に達しました。ダースの指標を使用するエキスパートアドバイザーを作成することにしたと想像してみてください。これらの指標には異なるパラメータがあり、ある期間に分析および比較する必要があります。さらに、いくつかの時間枠を使用します。したがって、テストするのが非常に難しい実際の取引のために過負荷のエキスパートアドバイザーを受け取ります。

私たちにできることは、適切な訓練の後、指標計算タスクをニューラルネットワークに委託することです。さらに、ニューラルネットワークはこれらの指標を使用して訓練されます。これは、エキスパートアドバイザーからニューラルネットワークモジュールに入力される必要があるのは指標式で使用される相対価格データのみであることを意味します。私たちは、ニューラルネットワークが出力した「1」と「0」を比較して決定を下だすことができます。

例としてストキャスティクスを使用して結果を見てみましょう。以下の価格データを入力として使用します。指標自体は訓練の例として使用されます。

価格データ

4. 価格データ

FileWrite(handle,
                   
                   iClose(NULL,0,i+4)-iLow(NULL,0,i+4),
                   iHigh(NULL,0,i+4)-iClose(NULL,0,i+4),
                   iHigh(NULL,0,i+4)-iLow(NULL,0,i+4),
                   iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i+4))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i+4)),
                   
                   iClose(NULL,0,i+3)-iLow(NULL,0,i+3),
                   iHigh(NULL,0,i+3)-iClose(NULL,0,i+3),
                   iHigh(NULL,0,i+3)-iLow(NULL,0,i+3),
                   iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i+3))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i+3)),
                   
                   iClose(NULL,0,i+2)-iLow(NULL,0,i+2),
                   iHigh(NULL,0,i+2)-iClose(NULL,0,i+2),
                   iHigh(NULL,0,i+2)-iLow(NULL,0,i+2),
                   iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i+2))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i+2)),
                   
                   iClose(NULL,0,i+1)-iLow(NULL,0,i+1),
                   iHigh(NULL,0,i+1)-iClose(NULL,0,i+1),
                   iHigh(NULL,0,i+1)-iLow(NULL,0,i+1),
                   iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i+1))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i+1)),
       
                   iClose(NULL,0,i)-iLow(NULL,0,i),
                   iHigh(NULL,0,i)-iClose(NULL,0,i),
                   iHigh(NULL,0,i)-iLow(NULL,0,i),
                   iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i)),
 
                   iStochastic(NULL,0,5,3,3,MODE_SMA,1,MODE_MAIN,i),
                   TimeToStr(iTime(NULL,60,i)));

訓練後、ニューラルネットワークは次の結果を出力します。

ニューラルネットワークの応答

5. ニューラルネットワークの応答

より良い視覚的研究のために、このデータを指標として取引ターミナルに移動しましょう。

ストキャスティクスおよびニューラルネットワーク指標

6. ストキャスティクスおよびニューラルネットワーク指標

上のウィンドウには、ターミナルで使用できる標準の指標が表示されます。下のウィンドウには、ニューラルネットワークによって作成された指標が表示されます。ニューラルネットワークによって作成された指標は、レベル、交差、反転、発散など、標準指標のすべての特性を備えていることが視覚的にわかります。ネットワークの訓練に複雑な式は使用しなかったことを忘れないでください。

したがって、取引システムの次のブロック図を描くことができます。

取引システムのブロック図

7. 取引システムのブロック図

MT4ブロックはエキスパートアドバイザーを表します。「Input_mat」は価格ファイルです。「Open1,2,3」はシグナルファイルです。これらのファイルの例は、次のセクションで提示されます。

主な作業は、ブロック「Net1」と「Net2」に関するものです。これらのブロックの履歴データを準備し、これらのブロックからのシグナルをテストするために、いくつかのスクリプトとEAを使用する必要があります。実際、システムが複合体として準備されている場合、その変更、開発、および実験にはそれほど時間はかかりません。例はビデオ( https://youtu.be/k_OLEKJCxPE)に示されています。一般に、ファイルの準備、Net1とNet2の訓練、およびシステムを最適化する最初のテスト段階には、10分かかります。


4. ニューラルネットワークの取引ターミナルへの統合

ニューラルネットワークと取引ターミナルの統合の統合は難しくありません。ターミナルとニューラルネットワークプログラムによって作成されたファイルを介してデータを渡すことにより、この質問を解決しました。これにより、システムによる意思決定が遅くなる可能性があるとは言えますが、この方法には利点があります。まず、ターミナルは最小限のデータ(わずか数十バイト)を渡します。ターミナルによって書き込まれたファイル行を以下に示します。

正規化された価格のファイル

8. 正規化された価格のファイル

このデータ送信方法では、ニューラルネットワークからシグナルが到着した後の次のティックでのみ取引を開始できます。ただし、システムが超短期間の取引を行わない場合、これは重要ではありません。本稿では、システムは始値を使用して機能します。また、このデータ送信方法を利用するシステムでは、チェックポイントによるテストまたはすべてのティックモードを使用する必要があります。これら2つのモードでのニューラルネットワークベースのシステムのテストはほとんど同じです。従来の自動売買ロボットを開発しているときに、すべてのティックモードでのテストではるかに悪い結果が示された状況に遭遇しました。 

このデータ送信モードの主な利点は、すべての段階で送受信するデータを制御できることです。これは、ニューラルネットワークを使用した取引をさらに成功させるための基盤の1つだと思います。したがって、ニューラルネットワークシステムの多量の準備は、実際の作業で有利になります。これにより、システムの論理構造でプログラムエラーを受け取る可能性を最小限に抑えることができるのです。これは、システムが使用前に段階的なトリプルテストを必要とするためです。この部分には後で戻ります。

以下の画像は、ファイル「Input_mat」と「Bar」を示しています。これらのファイルは、取引ターミナルによって生成されます。ファイルOpen1、Open2、Open3は、NNプログラムによって生成されます。唯一の不便な点は、NNプログラムでは、テストまたは取引のためにEAの使用方法に基づいてこれらのファイルへのパスを明示的に設定する必要があることです。

ニューラルネットワークモジュールとエキスパートアドバイザーによって生成されたファイル

9. ニューラルネットワークモジュールとエキスパートアドバイザーによって生成されたファイル

「Bar」は、カウンターとして使用される補助ファイルです。

Barファイル

NN応答は、ファイルOpen1、Open2、Open3で受信されます。最初の行は前の応答を示しています。2行目は、リアルタイムの応答を示しています。この形式は特殊なケースです。取引条件により形式が異なる場合があります。応答ファイルの数も異なる場合があります。NNモジュールは異なる時間間隔で訓練された3つのネットワークを使用するため、3つがあります。

ファイルOpen1、Open2、Open3のニューラルネットワークモジュールの応答

10. ファイルOpen1、Open2、Open3のニューラルネットワークモジュールの応答


5. ニューラルネットワークをテストする方法テスト段階

ニューラルネットワークに基づく取引システムを準備するにあたって、3つのテスト段階を使用します。最初の段階は迅速なテストです。これは、一般的なパフォーマンスの観点から、主要なシステム準備段階です。この段階で、システムを最適化できますが、最適化にはそれほど時間はかかりません。ここでは、スクリプトまたはエキスパートアドバイザーを使用して、NNが訓練された履歴期間の次の期間から現在までの履歴データを含むファイルを準備します。次に、Matlabスクリプトを使用してこの間隔でNN応答を受信し、応答に基づいて指標を作成します。次に、この指標を使用して、市場の出入りに対するNN応答を最適化します。次の図は、この指標の例を示しています。この指標は、12のカスタム指標から52のデリバティブを解釈したもので、標準のターミナル指標が含まれる場合があります。

ニューラルネットワーク応答に基づく指標

11. ニューラルネットワーク応答に基づく指標

次に、取引戦略を最適化できます。

ニューラルネットワークの応答に基づいて指標をテストした結果

12. ニューラルネットワーク応答のテスト結果

2番目のテスト段階では、Neural Network Toolboxを使用して、Matlab環境でニューラルネットワークを訓練および作成します。

ニューラルフィッティング

13. ニューラルフィッティング


結果のニューラルネットワーク

14. 結果のニューラルネットワーク


コマンドウィンドウを介してこれらのニューラルネットワークから応答を取得します。

ニューラルネットワークからの応答の受信

15. ニューラルネットワークからの応答の受信


前の指標と同じであるはずの別の指標を受け取るため、この指標に基づく戦略のテストも同じである必要があります。

すべてが良ければ、さらに先に進むことができます。

システムで使用されるニューラルネットワークモジュールのスクリプトを使用して、これらのニューラルネットワークをテストできます。シグナルは、制御点を使用して、任意の時間間隔でテストする必要があります。このテストが前の指標テストと同じ時間間隔と一致する場合、正しい方向に進んでいます。Matlab環境でこのスクリプトを起動します。同時に、取引ターミナルでエキスパートアドバイザーを起動します。

Matlab環境でスクリプトを起動する

16. Matlab環境でスクリプトを起動する

ターミナルでエキスパートアドバイザーを起動する

17. ターミナルでエキスパートアドバイザーを起動する

以下が結果です。

MatlabスクリプトとMT4ExpertAdvisorのテスト結果

18. MatlabスクリプトとMT4ExpertAdvisorのテスト結果

次に、ユーザーインターフェイスを作成し、ニューラルネットワークモジュールをコンパイルして、上記のようにテストする必要があります。


コンパイルされたニューラルネットワークモジュールのテスト

19. コンパイルされたニューラルネットワークモジュールのテスト

結果が前の結果と類似している場合は、ニューラルネットワークシステムに従って実際の取引に進むことができます。



5. 訓練サンプルについて


ニューラルネットワークの準備に使用される訓練サンプルに応じて、NN応答に基づいてさまざまな指標が得られるため、さまざまな取引戦略を作成できます。さらに、さまざまな戦略を組み合わせることで、より安定した最終結果が得られます。バリアントの1つは、前のセクションで示しました。その例では、取引期間の極値に基づいて選択を行いました。別の例を挙げましょう。

異なるサンプルで訓練されたニューラルネットワークの応答の指標

20. 異なるサンプルで訓練されたニューラルネットワークの応答の指標

この場合、2つのニューラルネットワークを訓練しました。1つは買い、もう1つは売りのためのものです。訓練は、最低価格に達したが最高価格にはまだ達していないときおよびその逆のときにサンプルに対して実行されます。図に示されているこれらの2つの指標は、12個のカスタム指標の解釈を反映しています。赤い線の高値は、最低価格に達したときに表示されます。灰色の高値は最高価格です。これらの指標を個別にまたは一緒に最適化することが可能です。たとえば、それらの交差または値の違い、およびレベルの交差などをテストできます。

12個の指標を最適化するのははるかに困難です。


終わりに

取引でのニューラルネットワークの使用に関する記事はたくさんあります。ただし、実際にニューラルネットワークに基づくシステムを適用する方法に関する資料はほとんどありません。さらに、出版物は特定のプログラミング知識を持つユーザーを対象としています。1つの記事で完全な説明を提供することは非常に困難です。私の著書「ニューラルネットワーク取引システム」では、過度の理論的資料を追加せずに使用法の詳細を説明しようと試みています。MetaTrader 4 + MATLABの段階的開発第2版」(ロシア語)。