定量的取引 (Quantitative trading) - ページ 33

 

TensorFlow 2.0 と TFX を使用したディープラーニング取引戦略の開始から運用まで


TensorFlow 2.0 と TFX を使用したディープラーニング取引戦略の開始から運用まで

デニスとして自己紹介できることを嬉しく思います。アルゴリズム取引に関連するすべてのことの頼りになるチャネルである ClosetoAlgotrading へのお越しを心より歓迎いたします。

ディープラーニングの力だけを利用してトレーディング戦略を作成するというアイデアが私の心に初めて浮かんでから、かなりの時間が経ちました。このコンセプトは、収益性の高い取引を実行するために必要なパラメータを自律的に識別できるニューラル ネットワークの開発を中心に展開しています。このエキサイティングな旅に乗り出すために、私はライブ実験を行うことにしました。これが皆さんにも興味を持ってもらえることを願っています。今後のエピソードでは、初期段階から最終的な運用に至るまで、堅牢な取引戦略を構築するためのデータ サイエンス アプローチの実装に関わる各ステップを説明します。

私の目標は、データの準備、厳密なテストなどを含むすべての中間ステップを包括的にカバーすることです。今後は TensorFlow 2.0 を利用し、tfx パイプラインが提供する可能性を探っていきます。私は複雑な計算やルールを避け、真に収益性の高いベンチャーを創出できるかどうかを確認するためにディープラーニングの力に頼るつもりです。このアイデアに共感していただけましたら、ぜひチャンネル登録をして、この魅力的な探検に参加してください。私たちは一緒にアルゴリズム取引の紆余曲折を乗り越え、その隠された可能性を解き放つよう努めていきます。

データ サイエンスのアプローチをさらに詳しく知りたい人は、Google で検索すると、このテーマを説明するさまざまなリソースが見つかります。結果の中には、この方法論に従う際に必要な手順の概要を説明する有益な記事や視覚的表現が含まれる場合があります。

私たちの旅における最初の重要なブロックは、ビジネス理解フェーズです。この時点で、私たちは目標を注意深く定義し、これらの目標を達成するための戦略の有効性を評価するための測定可能な値として機能する主要業績評価指標 (KPI) を確立する必要があります。このフェーズに着手するには、時間をかけて特定のビジネス ドメインの複雑さを徹底的に理解することが重要です。ターゲットを深く理解することで、明確かつ集中して作業を進めることができます。特定の結果を予測することを目的とするのか、それとも特定の現象を分類することを目的とするのかを見極めることが不可欠です。

私たちの仕事の性質を決定するには、基本的な質問に対する答えを探さなければなりません。私たちの質問が「いくら」または「いくつ」を中心に展開している場合、私たちは回帰タスクを扱っていることになります。一方、「どのカテゴリーに該当するか」を尋ねると、分類などの領域に踏み込むことになります。達成したいタスクの種類を把握したら、成功を示す指標を定義することが重要です。私たちの場合、これらの指標には投資収益率 (ROI) と精度が含まれる可能性があります。結局のところ、私たちの最終的な目的は市場から利益を得ることであり、将来の値動きをしっかりと把握する必要があります。

将来の価格変動を効果的に予測するには、方向を決定するだけでなく、正確な価格レベルとその価格レベルに到達する時刻を特定する必要があります。ただし、方向を知るだけでは不十分です。正確な価格レベルと、その水準に達する時期が必要です。目標価格までの延々と続く待機期間を避けるために、最小予想価格目標と最大待機期間を定義できます。言い換えれば、価格が上昇、下落、または同じレベルに留まる可能性がある分類タスクに似て、将来の価格変動の方向を確認しようとします。

最初に方向を予測する際のモデルのパフォーマンスを測定するために、分類精度を使用できます。このメトリクスは、正しい予測の数を予測の総数で割ったものに 100 を掛けてパーセンテージで表したものを定量化します。さて、目標価格水準はどうでしょうか?私たちのトレーディング戦略では、利益レベルを投資資本のパーセンテージとして定義できます。さらに、単一取引の最大許容リスクとしてストップロスレベルを確立することで、リスク許容度を決定する必要があります。利益とストップのレベルは、各取引の ROI 値として機能します。たとえば、株式を 100 ドルで購入し、105 ドルに達したら売却するとします。この 5% の価格変動により、投資収益率は 5% になります。テイクプロフィットとストップロスの両方を含むエグジットレベルを定義したら、時間の問題に対処する必要があります。価格が希望のレベルに達するまで無期限に待つことは望ましくありません。

したがって、固定時間枠の代わりに取引量を使用しますが、最大保有期間を設定します。この選択の背後にある理論的根拠は、データの準備について詳しく説明する次回のエピソードでさらに明らかになるでしょう。

これまでのアプローチを要約すると、テイクプロフィット、ストップロス、ポジションを決済するための最大保有期間を採用した日中戦略を開発しています。取引を開始するには、将来の価格の方向 (上昇、下降、または横ばい) を予測できる分類モデルをトレーニングします。最初に、モデルの有効性の尺度として精度を使用します。この基礎を整えたところで、本日の議論は終了とさせていただきます。私たちは目標、ターゲット、パフォーマンス指標を定義しました。続くエピソードでは、データを詳しく調べて、さらなる分析と開発のためにデータセットとラベルを準備します。

次回の旅もお見逃しなく。それまで気をつけて、次の出会いを楽しみに待っています。

 

ディープラーニング取引戦略の開始から本番まで。パート II。


ディープラーニング取引戦略の開始から本番まで。パート II。

取引システムを構築するという私たちの魅力的な旅の第 2 部に皆さんをお迎えできることをうれしく思います。前回のビデオでは目標について説明しましたが、今日はデータセットの準備とラベル付けに焦点を当てます。それでは、早速入っていきましょう!

まず、データセットの準備に役立つ一連の関数を定義しました。何よりもまず、データをロードする必要があります。今日のデモンストレーションでは、コードの実行時間を管理しやすくするために小さなデータセットを使用します。ご覧のとおり、データセットは時間、価格、出来高、買値、売値などの情報を含むティック データで構成されています。このデモンストレーションでは、1 年間のデータを利用します。データセットの特性を理解するために、いくつかの統計を調べることから始めましょう。私たちが観察する重要な側面の 1 つは、100 ドル前後で推移する最小価格と最大価格です。これは、利益率の計算が容易になるため有利です。

さらに、データセットにスプレッド サイズという重要なパラメーターを導入しました。スプレッドは、アスク価格とビッド価格の差として計算されます。スプレッドサイズが重要なのはなぜですか?説明のために、ビッド価格が 100 ドル、アスク価格が 101 ドルである例を考えてみましょう。この場合、スプレッドは 1 ドルとなります。株を買ってすぐに売ろうとすると、常にスプレッドを失うことになり、この例では 1 ドルになります。スプレッド サイズを把握するために、全日にわたる平均スプレッドを 1 秒ごとに計算しました。グラフに示されているように、スプレッドは通常 1 ~ 2 セントの範囲ですが、わずかに大きなスプレッドが発生する場合もあります。この分析に基づいて、スプレッドが 3 セント未満の場合にのみ取引を実行することを決定できます。

興味深いことに、このグラフは、最大のスプレッドが市場開始後の最初の数分間に発生する傾向があることを示しています。したがって、日中戦略を実行する場合は、最初の 10 ~ 15 分を省略することが賢明です。期間を定義してスプレッドを調べたので、価格変動の方向を予測するモデルのラベルの生成に進むことができます。これらのラベルはどのように生成するのでしょうか?前のビデオで述べたように、ポジションをオープンするためのトリガーが不足しているため、予想されるリターンに基づいて各バーのラベルを生成する必要があります。

これを実現するために、価格がウィンドウ バリアを越えたときにラベルが生成されるウィンドウ メソッドを採用します。その仕組みは次のとおりです。長さ n バーのウィンドウを定義し、予想される収益率に基づいてウィンドウ バリアの上限と下限を設定します。このウィンドウをすべてのバー上で 1 バーのステップ サイズでスライドさせると、価格がウィンドウの外に出ると、ウィンドウ内の最初のバーがラベルを受け取ります。ラベルの生成に進む前に、ウィンドウのパラメータを設定しましょう。その背後にある考え方はシンプルですが、最適なウィンドウ サイズとバリア レベルを選択するのは難しい場合があります。私個人としては、この問題にかなりの時間を費やしてきましたが、まだ決定的な解決策を見つけていません。

この課題に取り組むために、その日およびデータセット全体にわたる過去のボラティリティを計算します。たとえば、表示されたグラフは、1 日内の各ティックの価格変化と、対応するボラティリティを示しています。さらに、データセット全体のボラティリティを評価することもできます。示されているように、平均ボラティリティはわずか 0.003% であり、これは現在の価格の約 30 セントに相当します。ただし、一日中にわたるウィンドウを使用するつもりはありません。ウィンドウの長さを決定するために、ランダムなサイズで 100 個のウィンドウを生成し、各ウィンドウ内の平均ボラティリティを評価しようとしました。結果として得られるグラフは、さまざまな長さのウィンドウの平均ボラティリティを表します。たとえば、50 バーのウィンドウ サイズを選択すると、約 0.001% のボラティリティが予想されます。

このボラティリティ値は、最小期待リターンを定義し、ストップロス価格のサイズを計算する際に役立ちます。この情報を利用して、ティック データからボリューム バーを生成する作業に進むことができます。ティックの代わりにバーを使用すると、通常、1 つのバーに同様の体積が含まれ、安定した状態が保証されるため、ウィンドウの長さをより簡単に計算できます。ボリュームバーを生成するには、ティックを繰り返し、事前に定義されたターゲットボリューム (たとえば、1000) を超えるか等しくなるまでボリュームを累積します。この累積フェーズ中に発生するティックは、1 つのボリュームバーを表します。例として、1 日の出来高バーを生成してみましょう。図に示すように、選択した日の 179 個のバーを取得します。

その結果、価格グラフはこれらの出来高バーで構成されます。さらに、終値を使用して、各バーの変化率と毎日のボラティリティを計算できます。ただし、一日中ウィンドウを使用するつもりはありません。ウィンドウの長さを決定するために、平均ボラティリティとデータセット全体に対してランダムに生成されたウィンドウを使用しました。結果のグラフは、データセット全体にわたるウィンドウのボラティリティを示します。

これらの準備手順が完了したので、ラベルを生成する準備が整いました。このデモンストレーションでは、ウィンドウ サイズ 50 バーと期待リターン 0.003% を選択しました。これは平均価格に基づくと約 30 セントに相当します。ラベル付けプロセスが完了すると、交差ラベルとして知られるいくつかの類似したラベルが見つかる場合があります。異なるイベントに対して同一のラベルが存在することを避けるため、ウィンドウの最初のバーと価格がウィンドウ バリアを横切るバーとの間の距離が最も近いラベルのみを保持します。検査すると、約 700 のラベルが 3 つのカテゴリ (アップ、ダウン、フラット) に均等に分散されていることがわかりました。

次に、データセットを保存しましょう。 2 つのファイルを作成します。1 つはボリューム バー データセットを含み、もう 1 つは各バーのティック情報を含むファイルです。後者は私たちのモデルで役立つ可能性があるため、保存する価値があります。本日の議論はこれにて散会いたします。ここまでで十分な内容をカバーできたと思います。データのラベル付けについてさらに詳しく知りたい方は、貴重な洞察が得られるマルコス ロペス デ プラドの本の第 3 章と第 4 章を参照することをお勧めします。

次のステップでは、機能エンジニアリングと tfx パイプラインを介したすべての実行が含まれます。近いうちに新しいエピソードを作成して、より興味深い情報を共有したいと思っています。

それまで気をつけて、次のビデオを楽しみにしています。

 

ディープラーニング取引戦略の開始から本番まで。パートⅢ。 TFX パイプライン。


ディープラーニング取引戦略の開始から本番まで。パートⅢ。 TFX パイプライン。

デニス、「Close to AlgoTrading」の別のエピソードに再びお越しいただけることを嬉しく思います。正月休み明けに実験を再開し、進捗は遅いですが、着実に進んでいます。今日のビデオでは、ラベル付きデータを詳しく見て、TFX パイプラインを探索します。それでは、早速入ってみましょう!

前のビデオでは、データのラベルを正常に作成しましたが、グラフ上でラベルがどのように表示されるかを示すのを忘れていました。簡単なおさらいとして、すべてのデータを新しいデータ フレームに保存しました。先に進んで、このデータ フレームを読んでみましょう。

データ フレーム内では、「dir」列にはラベルが含まれ、「cross_idx」列は価格が定義したウィンドウを横切るときのティック番号を表します。これらの列に基づいて始値と終値のポジション イベントを視覚的に表現するために、簡単な関数を作成しました。グラフ上では、オープンポジションイベントは黒の三角形で示され、クローズポジションイベントは白抜きの三角形で表されます。

ご覧のとおり、オープン イベントのほとんどは、価格チャートの極大点または極小点で発生します。今後は、これまでに使用したものと同様の小規模なデータセットを引き続き使用していきます。さらに、データセットをトレーニング、評価、テストのデータセットに分割します。

ラベルについての理解が深まったので、次のステップに進み、TFX パイプラインの操作を開始しましょう。 TFX に馴染みのない人のために説明すると、これは Tensorflow Extended の略で、スケーラブルで高性能な機械学習タスク用に特別に設計された強力なフレームワークです。 TFX パイプラインは、データの取り込み、モデリング、トレーニング、推論の提供、デプロイメント管理など、機械学習ワークフローのさまざまな段階を実行する一連のコンポーネントで構成されます。

TFX に慣れるために、Tensorflow TFX の公式 Web ページを参照することをお勧めします。この Web ページには、そのコンポーネントとそれらの相互接続方法に関する詳細情報が記載されています。ビデオの説明に関連リンクがあります。

私も TFX は初めてなので、各エピソードで一緒に学んでいきます。今日は、パイプラインの最初の 4 つのコンポーネントに焦点を当てます。それらを簡単に紹介しましょう。

  1. ExampleGen: パイプラインのこの最初の入力コンポーネントは、入力データセットを取り込み、必要に応じてそれを異なるサブセットに分割します。私たちの場合、カスタム時系列分割は直接サポートされていないため、データをトレーニング、評価、テストのデータセットに手動で分割しました。

  2. StatisticsGen: このコンポーネントはデータセットの統計を計算し、データの分布、標準偏差、欠損値などに関する洞察を提供します。さらなる分析のために統計アーティファクトを生成します。

  3. SchemaGen: 統計を調べた後、SchemaGen コンポーネントは、観察されたデータ特性に基づいてデータ スキーマを作成します。スキーマはデータの構造とプロパティを記述します。

  4. ExampleValidator: このコンポーネントは、統計情報とスキーマを参照として使用して、データセット内の異常と欠損値をチェックします。これは、予期しないデータ パターンや一貫性のないデータ パターンを特定するのに役立ちます。

正しい軌道に乗っていることを確認するために、Tensorflow チームがテンプレートとして提供するシカゴのタクシーの例を使用します。この例では、データ分析、検証、変換、モデルのトレーニング、提供を含むエンドツーエンドのワークフローを示します。

さて、焦点を私たち自身のデータに戻しましょう。必要なモジュールをインポートし、入力および出力データ フォルダーに必要な変数を設定した後、TFX パイプラインへのデータのロードを試みることができます。入力フォルダーには、評価、トレーニング、およびテスト データセットのサブフォルダーが含まれています。

ExampleGen コンポーネントを使用すると、データをパイプラインに簡単にロードできるはずです。ただし、ExampleGen はカスタム時系列分割を直接サポートしていないようです。デフォルトでは、データはトレーニング セットと評価セットのみに分割されます。幸いなことに、データを手動で分割し、独自の入力分割構成を構成して、入力分割と出力分割の間で 1 対 1 のマッピングを確保できます。

その結果、ExampleGen コンポーネントは 2 つのアーティファクトを生成します。1 つはトレーニング データセット用、もう 1 つは評価データセット用です。トレーニング セットの最初の 3 つの要素を調べて、元のデータセットと一致することを確認してみましょう。次に、ExampleGen コンポーネントからの出力を StatisticsGen コンポーネントに渡します。このコンポーネントは、トレーニング データセットと評価データセットの両方の統計アーティファクトを生成します。たった 1 つのコマンドで、データ分布、標準偏差、欠損値などを含むデータセット統計を視覚的に表現できます。

ここでは、トレーニング データセットの統計を観察し、データの特性についての貴重な洞察を得ることができます。評価セットの同じ統計セットを調べることもできます。統計に基づくと、ゼロ以外のラベルはわずか 2% であることがわかり、収益性の高い取引のエントリー イベントが外れ値である可能性があることが示唆されています。これは、クラス間の不均衡により、将来的に課題となる可能性があります。

次に、SchemaGen コンポーネントを使用してデータ スキーマを自動的に生成します。このスキーマは観察された統計から導出されますが、必要に応じて独自のデータ記述を定義することもできます。出力は、データの構造とプロパティを包括的に説明するスキーマです。最後に、生成された統計とスキーマに基づいてデータを検証する ExampleValidator コンポーネントに到達します。データセット内の異常や不整合がチェックされます。たとえば、シカゴのタクシーの例では、フィーチャ「_company」に予期しない文字列値が含まれていました。 ExampleValidator を使用すると、独自のデータセット内のそのような問題を検出できます。

私たちの場合、幸いなことに、データセットに異常や不一致は発生していません。これは良い兆候であり、データが比較的クリーンであり、期待と一致していることを示しています。さて、これで TFX についての簡単な紹介は終わりです。次のエピソードでは、残りの TFX コンポーネントをさらに詳しく掘り下げ、データを変換してモデルをトレーニングする方法を検討します。

ご視聴いただきありがとうございます。次のビデオでお会いできるのを楽しみにしています。

 

パート IV。ディープラーニング取引戦略の開始から本番まで。 TFX パイプライン 2。


パート IV。ディープラーニング取引戦略の開始から本番まで。 TFX パイプライン 2。

「Algotrading に迫る」の別のエピソードへようこそ。私はデニスです。今日はトレーディング戦略構築の一環として TFX パイプラインの探索を続けます。

前回のビデオでは、TFX パイプラインの最初の 4 つのコンポーネント、ExampleGen、StatisticsGen、SchemaGen、および ExampleValidator について説明しました。これらのコンポーネントはパイプラインの基礎を築き、データの検証と一貫性を保証します。

ここで、残りのコンポーネントである Transformer、Trainer、Evaluator、ModelValidator、および Pusher について詳しく見ていきましょう。これらのコンポーネントを使用すると、データの変換、モデルのトレーニング、パフォーマンスの評価、ベースラインに対するモデルの検証、そして最後に検証されたモデルを運用環境にプッシュすることができます。

先に進む前に、いくつかの重要な点について触れておきます。 TFX パイプラインは強力なフレームワークを提供しますが、まだいくつかのバグが存在する可能性があり、特定のコンポーネントが構築中の可能性があることに注意してください。ただし、各ステップに慎重に取り組み、途中での制限事項について話し合いましょう。前のビデオではデータの検証に成功しました。今度は変換ステップに進みます。この目的のために、TFX が提供する Transformer コンポーネントを使用します。

Transform コンポーネントは、トレーニングとサービスの両方で一貫したデータ変換と特徴エンジニアリングを実行する責任を負います。これは、モデルのトレーニングと本番環境での使用の両方に同じデータ変換関数を使用できることを意味します。この機能は、私が最初に TFX を検討し始めた主な理由の 1 つです。

変換プロセスを開始するには、いくつかの Python ファイルを作成する必要があります。最初のファイルには、数値特徴やラベルのリストなどの定数が含まれます。 2 番目のファイルには、前処理関数 (preprocessing_fn) が含まれます。これは、入力データを前処理するために tf.Transform によって使用されるコールバック関数です。この関数では、データ変換と特徴構築のステップを定義します。ここでは、すべての数値入力フィーチャを Z スコアに変換し、ラベル値を -1、0、1 からそれぞれ 0、1、2 に変更することに焦点を当てましょう。 TensorFlow 推定器は正の値を期待するため、このラベル変換が必要です。

TFX の現在のバージョンでは、TensorFlow エスティメーターのみがサポートされていることに注意することが重要です。 Keras モデルを使用したい場合は、model_to_estimator API を使用してモデルを推定器に変換する必要があります。 TFX バージョン 0.21 は Trainer コンポーネントの Keras モデルをサポートすると主張していますが、その対話型コンテキスト機能でいくつかの問題が発生しました。 TFX チームがこれらの問題にすぐに対処し、安定した完全に機能するツールを提供してくれることを願っています。

それでは、データ変換を進めてみましょう。ご覧のとおり、Transform コンポーネントは、生成されたサンプル、データ スキーマ、および preprocessing_fn 関数を含むファイルへのパスというパラメーターを入力として期待します。変換が完了したら、モデルの作成とトレーニングに進むことができます。 Trainer コンポーネントは、定義した仕様に基づいてモデルをトレーニングします。

モデル関数と入力関数を含む Python ファイルで、Trainer コンポーネントによって呼び出される Trainer_fn 関数を定義します。この関数は、次の項目を含む辞書を返す必要があります。

  • estimator: モデルのトレーニングに使用される TensorFlow エスティメーター。
  • train_spec: TensorFlow train_and_evaluate() 呼び出しのトレーニング部分の設定。
  • eval_spec: TensorFlow train_and_evaluate() 呼び出しの評価部分の設定。
  • eval_input_receiver_fn: モデルを検証するときに ModelValidator コンポーネントによって使用される構成。

このファイル内で、トレーニングと評価の両方の入力特徴とラベルを生成する _input_fn 関数を定義します。また、サービング入力を構築する _example_serving_receiver_fn や TensorFlow Model Analysis (TFMA) に必要な入力を準備する _eval_input_receiver_fn などの追加関数もあります。

エスティメーターを作成するには、build_estimator 関数を定義します。この関数では、入力特徴セットを設定し、推定器を作成します。 DNNClassifier と DNNEstimator が TensorFlow 1 からの機能の受け渡しに関連するエラーを引き起こしていたため、DNNLinearCombinedEstimator を使用したことに言及する価値があります。 TensorFlow 2 メソッドを使用しているため、これは当てはまらないと思います。残念ながら、この問題の解決策は見つかりませんでした。ただし、線形推定器は正常に動作しているようです。

モデルが定義されたので、Trainer コンポーネントを使用してモデルのトレーニングに進むことができます。ご覧のとおり、Trainer コンポーネントは、trainer_fn 関数と、transformer_examples、データ スキーマ、変換グラフ、トレーニング引数および評価引数などの他のパラメーターを含む module_file を必要とします。現時点では、トレーニングと評価のステップ数のみを指定しています。モデルのトレーニングが完了したら、TensorFlow モデル分析 (TFMA) を使用したモデル分析に進むことができます。続行する前に、提供されたリンクに従って TFMA がインストールされていることを確認してください。 TFMA を使用すると、データセット全体または特定の特徴スライスのいずれかでモデルの分析を実行できます。この場合、完全なデータセット、ラベル、および 2 つの特定の特徴の 3 つのスライスに対して分析を実行します。

完全なデータセットを分析すると、98% という驚くべき精度が確認されました。ただし、ラベルに基づいてモデルのパフォーマンスを調べると、一貫してラベル 0 を予測していることがわかります。この結果は、ラベルの不均衡と、モデルに有用な機能が欠如しているため予想されていました。それにもかかわらず、TFMA はモデルのパフォーマンスを評価する便利な方法を提供します。

さらに、エクスポートされたモデルの検証に役立つ ModelValidator コンポーネントが追加されました。新しいモデルをベースライン (現在提供されているモデルなど) と比較し、事前定義された基準を満たしているかどうかを判断します。この検証には、評価データセットでのモデルの評価と、AUC や損失などのメトリクスの計算が含まれます。新しいモデルのメトリクスがベースラインに対して開発者が指定した基準を満たしている場合、そのモデルは「十分に良好」であるとみなされ、そのようにマークされます。

最後に、モデルが検証に合格したかどうかをチェックする Pusher コンポーネントがあります。モデルが検証基準を満たしている場合、モデルは指定されたファイルの宛先にプッシュされます。この手順により、検証されたモデルのみが運用環境にデプロイされるようになります。

パイプラインを完了するには、すべてのコンポーネントを Apache Beam パイプラインにエクスポートします。次に、必要なすべてのファイルを zip アーカイブにパッケージ化します。アーカイブからサーバー上の作業ディレクトリにファイルを解凍することで、パイプラインを実行できます。実行が完了すると、トレーニングされたモデルが TensorFlow Serving で使用できるようになります。 Docker コンテナから TensorFlow Serving を開始して使用する方法を学ぶことに興味がある場合は、私のチャンネルでビデオ チュートリアルを見つけることができます。

このシリーズでは多くの内容を取り上げてきましたが、TFX の現在のバージョンには依然として一定の制限があることに注意することが重要です。特定の要件によっては、Keras モデルを使用した変換関数のみに依存するパイプラインの実装が必要になる場合があります。しかし、この TFX の探索が有益で有益なものであったことを願っています。

次のビデオでは、取引戦略を開発するという主な目標に戻ります。乞うご期待!このビデオにコメントしたり、購読したり、「いいね!」したりすることを忘れないでください。ご視聴いただきありがとうございました。また次回でお会いしましょう!

 

パート V. GIGO。ディープラーニング取引戦略の開始から本番まで。


パート V. GIGO。ディープラーニング取引戦略の開始から本番まで。

「Algotrading に迫る」の別のエピソードへようこそ。私の名前はデニスです。ディープラーニング取引システムの開発における私の経験と失敗を共有するためにここに来ました。

私は TensorFlow を使用してシステム全体を実装するのにかなりの時間を費やしてきましたが、ライブラリの品質にはかなりがっかりしていることを認めなければなりません。私はそのコンセプトには感謝していますが、TensorFlow によって提供されるドキュメントはフラストレーションの原因でした。博士号を取得した優秀な頭脳でも、しっかりと構造化されたドキュメントを書くのに苦労しているようです。以前に比べれば改善されてきましたが、依然として混乱を招く点がいくつかあります。

ただし、私が遭遇した大きな問題に比べれば、ドキュメントは小さな問題にすぎません。多くの機能は実際に使おうとすると期待どおりに動作せず、公式のサンプルですら正しく動作しないことがあります。このため、このフレームワークの中核となるポイントをいくつか見逃しているのではないかという疑問が残りました。しかし、このビデオのメイントピックである私の失敗に戻りましょう。覚えているかもしれませんが、指定されたパーセンテージに基づいて価格変動のラベルを生成することにしました。これらのラベルの大部分は、データ内の極小値または極大値であることが判明しました。

いくつかの簡単なデータ処理と準備を行った後、簡単な LSTM ネットワークを作成し、テストしました。私の期待はそれほど高くありませんでしたが、結果は本当に残念でした。付属のビジュアルからわかるように、ネットワークは意味のあることを何も学習できませんでした。

ここで、ニューラル ネットワークは奇跡を起こすことを目的としたものではないことを覚えておくことが重要です。おそらく私たちのアプローチを再評価する時期に来ているのかもしれません。私たちが予測しようとしているイベントは、データセット全体のわずか 2% にすぎません。これらのイベントは外れ値とみなされる可能性があり、私たちの単純なネットワークではそれらを残りのデータから区別するのに苦労します。さらに、これらのイベントは関連性がなく、明確な原因がある可能性が高いため、それらを正確に予測するモデルを構築することが困難になります。

これらの課題を考慮すると、データをより深く理解し、予測能力を備えた特徴を特定することに重点を置く必要があることが明らかになりました。それを念頭に置いて、私は単純な移動平均戦略を再検討することにしました。私たちの最初のアプローチでは、なぜポジションに入るべきなのかを明確に理解していませんでした。しかし、今ではポジションをオープンするための戦略があります。これは完璧ではありませんが、広く使用されている戦略であり、活用できます。 2 つの移動平均と RSI (相対強度指数) インジケーターをデータセットに追加し、移動平均が互いに交差するすべてのイベントを収集しました。これにより、価格変動の方向を推定することができました。

次に、先ほどと同じラベル付け方法を使用してメタラベルを作成しましたが、今回は移動平均が交差するバーのみにラベルを付けました。ここには重要な違いがあります。位置の方向 (ロングまたはショート) がすでにわかっているため、ラベルの意味は異なります。ラベル 1 は利益を示し、-1 は損失を示し、その他の場合には 255 が割り当てられます。更新されたデータセットとラベルを使用して、単純な LSTM モデルをトレーニングし、完璧な ROC (受信者動作特性) 曲線を取得しました。 ROC 曲線は、さまざまな分類しきい値での分類モデルのパフォーマンスを示します。 ROC 曲線の AUC (曲線下面積) 値は、モデルがクラスをどの程度区別しているかを評価するのに役立ちます。

ただし、モデルの予測を調べると、モデルが一貫してクラス 0 を予測していることに気づきました。この結果が発生したのは、やはり、関連するイベントのみではなくデータセット全体を使用したためです。データセットは不均衡なままであり、特徴には予測能力が欠けていました。 ROC 曲線は、他のクラスを予測する際のモデルのパフォーマンスの低下を隠してしまう可能性があるため、不均衡なデータセットには理想的ではありません。

データの不均衡に対処するために、調整を行い、オープンイベントに関連するデータのみに焦点を当てました。残念ながら、これらの変更を加えた後でも、私のモデルは予測能力を発揮できませんでした。ランダムモデルと同じ結果が得られました。また、単純なフィードフォワード モデルも試みましたが、わずかに改善されましたが、まだ満足のいく結果は得られませんでした。結論として、ご覧のとおり、低品質のデータをモデルに供給した場合、ディープ ラーニングには魔法はありません。 「ゴミは入ったらゴミは出る」という原則は、この文脈でも当てはまります。さらに、非常に不均衡なデータセットや、強力な予測力を持つ特徴が欠けているデータセットを扱う場合、分類モデルはデータセットの大部分を構成するクラスを予測する傾向があります。

前に述べたように、データを理解し、市場に勝つ方法を見つけるのに役立つプロセスを特定することが重要です。

今日のエピソードはこれで終わります。洞察力があり、有益な内容であると感じていただければ幸いです。気をつけて、家にいて、健康でいてください。

 

パート VI。強化学習。ディープラーニング取引戦略の開始から本番まで


パート VI。強化学習。ディープラーニング取引戦略の開始から本番まで

私はデニスです。「藻類取引に迫る」の別のエピソードへようこそ。これまでのエピソードでは、深層学習を使用して収益性の高い取引戦略を構築することに取り組んできました。これまでの進捗状況を振り返ってみましょう。

私たちは市場の状況を観察して非効率性を探すことから始めました。特定したら、簡単なルールを作成し、深層学習モデル用のデータを準備しました。しかし、直接的なアプローチを実行してみると、望ましい結果が得られないことがわかりました。このため、私たちはアプローチを再考し、代替戦略を検討する必要があることに気づきました。

今日のエピソードでは、強化学習という新しい方向性を探ります。強化学習はさまざまな分野で大きな成功を収めており、チェス、Dota、囲碁などのゲームで人間のパフォーマンスを上回っています。制御ロボットや自動運転車にも活用されています。では、これを取引に応用してみませんか?成功を保証することはできませんが、探究するには興味深い道です。

まず、強化学習について簡単に説明し、重要な定義を理解しましょう。

強化学習は、最適な制御の問題を解決するための試行錯誤による学習と言えます。より簡単に言うと、最終的な数値報酬を最大化するために、特定の環境状態で実行する最適なアクションを見つけることが含まれます。この概念をよりよく理解するために、簡単な例えで視覚化してみましょう。

トレーダーがモニターの前に座って株を売買しているところを想像してみてください。ここでは、トレーダーがエージェントを表し、チャート価格とブローカーが環境を形成します。エージェントは環境の現在の状態を観察し、株式を購入するなどのアクションを実行します。その見返りに、エージェントは仲介手数料などの報酬を受け取ります。環境が変化すると、エージェントはさらに株を買うことも、売ることも、何もしないこともできます。取引日の終わりに、エージェントはプラスまたはマイナスの最終報酬を受け取ります。エージェントの目標は、この最終的な報酬を最大化することです。

強化学習における私たちの目的は、環境と対話することで学習できるエージェントを設計することです。ここで、旅の途中で遭遇する主な定義について理解しましょう。

  1. エージェント: 意思決定を行い、アクションを実行し、環境を観察し、フィードバックを受け取り、報酬の最大化を目指すアルゴリズム。

  2. 環境: エージェントが存在する世界。これには、エージェントが意思決定を行うために利用できるすべてのデータが含まれます。

  3. 状態: エージェントが感知した環境の構成。

  4. 報酬: アクションを実行した後にエージェントが受け取るフィードバック。これはエージェントが最大化しようとする値です。重要なのは、強化学習において、報酬は必ずしも金銭や物理的なトロフィーを意味するわけではありません。これは負の値になることもある単なる数値であり、私たちの目標はこの値を最大化することです。

  5. アクション: 指定された環境でエージェントが実行できるすべてのこと。わかりやすくするために、買う、売る、または何もしないという 3 つのアクションを考えてみましょう。

  6. エピソード: タスク全体の完全な実行。

これらは、旅全体を通して使用する主な定義です。他にも重要な用語がありますので、今後のビデオで説明します。

この強化学習の入門では、環境について学習し、次のビデオで TensorFlow を使用して独自の環境を作成していきます。

本日はご参加いただきありがとうございます。強化学習を皆さんと一緒にさらに探求できることを楽しみにしています。また近いうちにお会いしましょう!

 

パート VIII。強化学習取引戦略。 DQN: Qネットワーク、QRNNネットワーク


パート VIII。強化学習取引戦略。 DQN: Qネットワーク、QRNNネットワーク

こんにちは、私の名前はデニスです。「Close to AlgoTrading」をご覧になっています。このビデオでは、強化学習エージェントの以前の環境に関する簡単な最新情報を提供します。 Q-Learning と DQN エージェントについても簡単に説明します。次に、tf-agents ライブラリから rDQN エージェントの主な学習ステップを実装し、テスト結果について説明します。

まず、前のビデオで作成した取引環境をもう一度見てみましょう。その環境では、合成生成データを使用しました。ただし、この更新バージョンでは、環境は入力パラメーターとして履歴データを含むデータフレームを受け取ります。環境の観察仕様は、「Price」と「Pos」という 2 つのキーを持つ辞書です。 「価格」キーには、始値、終値、高値、安値、出来高データを含む 20 個の要素が含まれています。 「Pos」キーには、オープンポジションに関する情報が含まれています。

各エピソードの開始時に、データから 20 の価格のスライスをランダムに選択します。この変更により、強化学習エージェントが実際の履歴データから学習できるようになります。

次に、Q ラーニングと Q テーブルの概念について説明します。 Q 学習には、(状態、アクション) のすべてのペアに Q 値を割り当てることが含まれます。 Q テーブルとして知られるこのテーブルは、現在の状態で最大の Q 値を持つアクションを選択するためにエージェントによって使用されます。エージェントは環境を探索し、報酬を受け取り、観察された報酬に基づいて Q 値を更新します。

Q 値を更新するには、古い Q 値と将来の Q 値を含む式を使用します。 Q テーブル内の次の状態の最大 Q 値を検索することで、将来の Q 値を計算します。取得された将来の Q 値を使用して、開始ペア (状態、アクション) に関連付けられた Q 値を更新します。

ただし、私たちの場合、金融市場の状態空間は非常に広いため、Q テーブルを使用するのは非現実的です。この課題を克服するには、ディープ ニューラル ネットワークを使用して、特定の状態の Q 値を予測します。 DQN エージェント (ディープ Q ネットワーク エージェント) として知られるこのアプローチは、Q ネットワークを使用し、バックプロパゲーションによる損失を最小限に抑えることによって Q 値が更新されます。 DQN エージェントで使用される損失関数は、特定の式で与えられます。

Q-Learning と DQN エージェントについて十分に理解できたので、tf-agents ライブラリを使用して rDQN エージェントの主な学習ステップの実装に進みましょう。

全体的なトレーニング アルゴリズムは次の手順に従います。

  1. 環境を作りましょう。
  2. エージェントを作成します。
  3. 何らかのポリシーを使用して環境からデータを収集します。
  4. 収集したデータを使用してエージェントをトレーニングします。
  5. エージェントのパフォーマンスを検証します。
  6. 手順3から繰り返します。

環境の構築は簡単な作業です。取引環境を TFPyEnvironment にラップし、tf-agents とのシームレスな統合を可能にします。

次に、DQN エージェントの Q-Network を作成します。 tf-agents ライブラリは、Q-network の定義に使用できる Q-Network クラスを提供します。 40 個のニューロンで構成される 1 つの隠れた全結合層を持つ単純な Q ネットワークを定義します。私たちの観察は辞書であるため、そのための単純な前処理層も定義します。

Q-Network を作成したら、DQN エージェントの作成に進みます。 tf_agents.agents.dqn.dqn_agent クラスをインスタンス化し、Q ネットワークをパラメーターとして渡します。また、モデルをトレーニングするためのオプティマイザーと損失関数も定義します。

エージェントをトレーニングするには、環境からのデータが必要です。このデータはポリシーを使用して収集され、このステップではアクションをランダムに選択できます。 DQN エージェントには 2 つのポリシーがあります。評価と展開に使用されるagent.policyと、データ収集に使用されるagent.collect_policyです。

データ収集には、現在の状態の取得、アクションの選択、次の状態と報酬の受信、およびこの情報のバッファーへの保存が含まれます。複数のステップやエピソードを収集し、軌跡を形成します。 tf-agents ライブラリは、エピソードの終了までのステップを収集する Dynamic EpisodeDriver と呼ばれるドライバーを提供します。ドライバーは、応答バッファーを含むオブザーバーを更新します。

データの保存には、tf-agents ライブラリの一般的に使用される TFUniformReplayBuffer を使用できます。バッファーに保存されるデータ要素の仕様、バッチ サイズ、各バッチ セグメントの最大長を定義します。

データ収集ステップが完了したら、エージェントをトレーニングできます。エージェントはリプレイ バッファへのアクセスを必要とします。エージェントにデータをフィードするための tf.data.Dataset パイプラインを作成します。再生バッファーの各行には単一の軌跡が保存されますが、DQN エージェントは損失を計算するために現在と次の両方の観測を必要とします。したがって、num_steps パラメーターを 2 に設定し、データセット パイプラインがバッチ内の項目ごとに 2 行をサンプリングできるようにします。

この時点で、同じデータで 2 つの DQN エージェントをトレーニングし、パフォーマンスを評価するための準備がすべて整いました。一方のエージェントは単純な Q-Network を使用し、もう一方のエージェントは QRNNNetwork を使用します。どちらのエージェントも、200 日分の過去の価格データを使用してトレーニングされています。

700 のトレーニング ステップの後、単純な Q-Network エージェントはあまり学習せず、ほとんどが負の平均リターンを示していることがわかります。ただし、QRNNNetwork エージェントはほとんどの場合、プラスの平均収益を示します。 RNN エージェントはデータ内のダイナミクスをキャプチャし、より速く学習できるため、この結果は期待どおりです。

この単純な実験は、収益性の高いエージェントを構築する際に強化学習を使用する可能性をある程度示していますが、エージェントのパフォーマンスを評価するために考慮すべき指標はまだ他にもあります。これらについては、今後のビデオで詳しく説明します。

ご視聴いただきありがとうございました。また次のエピソードでお会いしましょう。

 

パート VIII。強化学習取引戦略。 DQN: Qネットワーク、QRNNネットワーク


パート VIII。強化学習取引戦略。 DQN: Qネットワーク、QRNNネットワーク

こんにちは、私の名前はデニスです。「Close to AlgoTrading」をご覧になっています。このビデオでは、強化学習エージェントの以前の環境に関する簡単な最新情報を提供します。 Q-Learning と DQN エージェントについても簡単に説明します。次に、tf-agents ライブラリから rDQN エージェントの主な学習ステップを実装し、テスト結果について説明します。

まず、前のビデオで作成した取引環境をもう一度見てみましょう。その環境では、合成生成データを使用しました。ただし、この更新バージョンでは、環境は入力パラメーターとして履歴データを含むデータフレームを受け取ります。環境の観察仕様は、「Price」と「Pos」という 2 つのキーを持つ辞書です。 「価格」キーには、始値、終値、高値、安値、出来高データを含む 20 個の要素が含まれています。 「Pos」キーには、オープンポジションに関する情報が含まれています。

各エピソードの開始時に、データから 20 の価格のスライスをランダムに選択します。この変更により、強化学習エージェントが実際の履歴データから学習できるようになります。

次に、Q ラーニングと Q テーブルの概念について説明します。 Q 学習には、(状態、アクション) のすべてのペアに Q 値を割り当てることが含まれます。 Q テーブルとして知られるこのテーブルは、現在の状態で最大の Q 値を持つアクションを選択するためにエージェントによって使用されます。エージェントは環境を探索し、報酬を受け取り、観察された報酬に基づいて Q 値を更新します。

Q 値を更新するには、古い Q 値と将来の Q 値を含む式を使用します。 Q テーブル内の次の状態の最大 Q 値を検索することで、将来の Q 値を計算します。取得された将来の Q 値を使用して、開始ペア (状態、アクション) に関連付けられた Q 値を更新します。

ただし、私たちの場合、金融市場の状態空間は非常に広いため、Q テーブルを使用するのは非現実的です。この課題を克服するには、ディープ ニューラル ネットワークを使用して、特定の状態の Q 値を予測します。 DQN エージェント (ディープ Q ネットワーク エージェント) として知られるこのアプローチは、Q ネットワークを使用し、バックプロパゲーションによる損失を最小限に抑えることによって Q 値が更新されます。 DQN エージェントで使用される損失関数は、特定の式で与えられます。

Q-Learning と DQN エージェントについて十分に理解できたので、tf-agents ライブラリを使用して rDQN エージェントの主な学習ステップの実装に進みましょう。

全体的なトレーニング アルゴリズムは次の手順に従います。

  1. 環境を作りましょう。
  2. エージェントを作成します。
  3. 何らかのポリシーを使用して環境からデータを収集します。
  4. 収集したデータを使用してエージェントをトレーニングします。
  5. エージェントのパフォーマンスを検証します。
  6. 手順3から繰り返します。

環境の構築は簡単な作業です。取引環境を TFPyEnvironment にラップし、tf-agents とのシームレスな統合を可能にします。

次に、DQN エージェントの Q-Network を作成します。 tf-agents ライブラリは、Q-network の定義に使用できる Q-Network クラスを提供します。 40 個のニューロンで構成される 1 つの隠れた全結合層を持つ単純な Q ネットワークを定義します。私たちの観察は辞書であるため、そのための単純な前処理層も定義します。

Q-Network を作成したら、DQN エージェントの作成に進みます。 tf_agents.agents.dqn.dqn_agent クラスをインスタンス化し、Q ネットワークをパラメーターとして渡します。また、モデルをトレーニングするためのオプティマイザーと損失関数も定義します。

エージェントをトレーニングするには、環境からのデータが必要です。このデータはポリシーを使用して収集され、このステップではアクションをランダムに選択できます。 DQN エージェントには 2 つのポリシーがあります。評価と展開に使用されるagent.policyと、データ収集に使用されるagent.collect_policyです。

データ収集には、現在の状態の取得、アクションの選択、次の状態と報酬の受信、およびこの情報のバッファーへの保存が含まれます。複数のステップやエピソードを収集し、軌跡を形成します。 tf-agents ライブラリは、エピソードの終了までのステップを収集する Dynamic EpisodeDriver と呼ばれるドライバーを提供します。ドライバーは、応答バッファーを含むオブザーバーを更新します。

データの保存には、tf-agents ライブラリの一般的に使用される TFUniformReplayBuffer を使用できます。バッファーに保存されるデータ要素の仕様、バッチ サイズ、各バッチ セグメントの最大長を定義します。

データ収集ステップが完了したら、エージェントをトレーニングできます。エージェントはリプレイ バッファへのアクセスを必要とします。エージェントにデータをフィードするための tf.data.Dataset パイプラインを作成します。再生バッファーの各行には単一の軌跡が保存されますが、DQN エージェントは損失を計算するために現在と次の両方の観測を必要とします。したがって、num_steps パラメーターを 2 に設定し、データセット パイプラインがバッチ内の項目ごとに 2 行をサンプリングできるようにします。

この時点で、同じデータで 2 つの DQN エージェントをトレーニングし、パフォーマンスを評価するための準備がすべて整いました。一方のエージェントは単純な Q-Network を使用し、もう一方のエージェントは QRNNNetwork を使用します。どちらのエージェントも、200 日分の過去の価格データを使用してトレーニングされています。

700 のトレーニング ステップの後、単純な Q-Network エージェントはあまり学習せず、ほとんどが負の平均リターンを示していることがわかります。ただし、QRNNNetwork エージェントはほとんどの場合、プラスの平均収益を示します。 RNN エージェントはデータ内のダイナミクスをキャプチャし、より速く学習できるため、この結果は期待どおりです。

この単純な実験は、収益性の高いエージェントを構築する際に強化学習を使用する可能性をある程度示していますが、エージェントのパフォーマンスを評価するために考慮すべき指標はまだ他にもあります。これらについては、今後のビデオで詳しく説明します。

ご視聴いただきありがとうございました。また次のエピソードでお会いしましょう。

 

パート IX 強化学習トレーディング戦略。 DQN: エージェントポリシーに基づいた取引戦略のテスト


パート IX 強化学習トレーディング戦略。 DQN: エージェントポリシーに基づいた取引戦略のテスト

私たちの旅において、戦略のテストという重要なマイルストーンに到達したことを発表できることを嬉しく思います。この目的のために、簡単なバックテスト Python フレームワークを利用してテストを実施します。まず、「pip install」コマンドに続いてフレームワークの名前を実行して、フレームワークをインストールします。

このフレームワークの作成者は、フレームワークを効果的に使用する方法を示す簡単な例を提供しました。ただし、それに入る前に、独自の戦略を実行する必要があります。まず、戦略に必要なすべての変数を初期化して定義します。

興味深い点の 1 つは、TensorFlow API を使用して保存したポリシーをロードできることです。 QRNNNetwork を使用しているため、ポリシーの初期状態を取得する必要があります。そこで、初期化機能を実装しました。次に、新しいステップごとに呼び出される「next」関数を実装します。最初に、最初の 10 日間のデータを収集する必要があります。その後、観測辞書にデータを入力できます。各ステップで観察を更新し、それをポリシーに渡します。

観測ディクショナリを作成したら、ポリシー モデルが入力としてタイムステップ オブジェクトを必要とするため、タイムステップ オブジェクトを作成する必要があります。このプロセスを容易にするために、観測データをタイムステップ オブジェクトに変換する簡単な関数を作成しました。ここで重要な要素は観測データと step_type です。タイムステップ オブジェクトを取得した後、ポリシーからアクションを取得できます。ご覧のとおり、「runPolicy」関数は、step_type が 0 に等しい場合にポリシーの状態をリセットし、アクションと新しいpolicy_stateを返します。

次に、位置の状態を更新し、アクションを実行する必要があります。最後に、「next」関数の最後で、カウンターをインクリメントし、すべてを初期状態にリセットして、新しいエピソードの開始をシミュレートします。素晴らしい!私たちは戦略をうまく実行しました。ここで、テスト目的でいくつかのデータが必要です。 panda_datareader ライブラリを使用して、Yahoo Finance から毎日のデータを取得できます。まずは、1 年間の過去のデータを使用して、インテル株に関する戦略をテストしてみましょう。

バックテスト オブジェクトを作成し、テストを開始します。テスト結果は 106% という驚異的なリターンを示しています。ただし、バックテスト フレームワークは 100% から計算を開始するため、実際のリターンはわずか 6% であることに注意することが重要です。それにもかかわらず、私たちのポリシーが十分に訓練されていなかったことを考えると、これは悪い結果ではありません。より包括的な評価を提供するために、AMD 株に関する戦略もテストしてみましょう。ご覧のとおり、AMD の結果は約 40% の減少を示しています。したがって、AMD 株と Intel 株を並べて戦略のパフォーマンスを比較できます。

これで、バックテスト フレームワークでエージェント ポリシーを使用する方法がわかりました。同様に、実際の取引環境に Python を使用している場合は、同じ方法でポリシーを採用できます。ただし、他の言語を使用している場合は、Flask フレームワークを使用してポリシーをデプロイし、REST API 経由でアクセスできます。

これらのビデオが興味深く有益であると感じていただければ幸いです。もしよろしければ、購読をご検討ください。また次のエピソードでお会いしましょう。

 

定量取引システムとは何ですか?構造と説明。


定量取引システムとは何ですか?構造と説明。

こんにちは、みんな!皆さんがお元気でいることを願っています。最後にビデオを公開してからかなりの時間が経ちましたが、あなたのことを忘れていないことを保証したいと思います。今日は、自動取引システムのソフトウェア アーキテクチャという、新しくて興味深いトピックを始めることに興奮しています。

ソフトウェア アーキテクチャの詳細を掘り下げる前に、まず取引システムとは何か、そしてその構成要素を理解しましょう。このビデオでは、自動取引システムの構造と要素について説明します。さて、ことわざにあるように、「太陽の下に新しいものはない」。私がこの分野への取り組みを始めたとき、私はトレーディング システムについての適切に構造化された記述を探す探求をしていました。どのブロックを実装するか、堅牢なソフトウェア ソリューションを作成する方法を簡単に理解できるものが欲しかったのです。

私はリシ・K・ナラン氏の『Inside the Black Box』という本に出会いました。そこで彼は、アルファモデル、リスクモデル、取引コストモデル、ポートフォリオ構築モデル、実行モデルという5つの共通ブロックで構成される定量的システムについて説明しています。さらに、データという重要なブロックがもう 1 つあります。

データ ブロックから始めて、この構造を詳しく見てみましょう。データブロックは技術的には取引システムの一部ではありませんが、システムのすべてのコンポーネントが依存する酸素として重要な役割を果たします。データ ブロックには、取引システムに必要なさまざまな種類のデータが含まれます。このデータは、取引所、規制当局、通信社、ミクロ経済データ、ブローカー手数料、ポートフォリオ情報などのその他の関連情報源など、さまざまな情報源から入手できます。

データ ブロックを理解したところで、取引システムの要素とそれらの要素間の関係を調べてみましょう。図では、情報の流れを表す矢印が表示されます。アルファ モデル、リスク モデル、トランザクション コスト モデルは最終的な決定を下すものではありません。代わりに、ポートフォリオ構築モデルに情報を提供し、それによって実行モデルがトリガーされます。これらの要素のサブセットのみが存在する戦略があり、要素間の関係が異なる場合があることに注意することが重要です。ただし、この構造により、取引システムの主要な要素の全体像が得られます。

この構造の最初の要素はアルファ モデルです。アルファ モデルは、将来の結果を予測するために設計された取引アイデアまたは戦略を表します。通常、このモデルからの出力はリターンまたは方向の予測です。取引モデルには、価格データとテクニカル分析に基づくテクニカル モデルと、財務データとファンダメンタルズ分析を利用するファンダメンタルズ モデルの 2 種類がよく知られています。両方の側面を組み合わせたハイブリッド モデルも作成できます。複雑さに関係なく、アルファ モデルの主な目的は、予測の形でアドバイスを提供することです。

次に、リスクモデルがあります。リスク モデルは、損失につながる可能性のある要因へのエクスポージャーを軽減または最小限に抑えることができるように設計されています。リスクモデルは 2 つのタイプに分類できます。 1 つ目のタイプは、リスクを軽減するためにポジションのサイジングに重点を置き、ハードサイジングや複雑な機能などの戦略を採用します。このタイプのリスク モデルからの出力はポジション サイズです。 2 番目のタイプのリスク モデルは、市場の方向性リスクなど、特定のタイプのリスクを軽減することを目的としています。このような場合、モデルは出力としてヘッジポジションを提案することがあります。

3 番目の要素はトランザクション コスト モデルです。このモデルは、取引の実行に関連するコストに関する情報を提供します。主なコストは、手数料と手数料、スリッページ、市場への影響の 3 つです。トランザクションコストモデルは、一定のコスト値を返す単純なモデルから、実際のコストを可能な限り正確に予測することを目的とした二次コスト関数などのより複雑なモデルまで多岐にわたります。以下のグラフは、さまざまなコスト関数がどのように機能するかを示しています。

情報を提供する要素がすべて揃ったら、ポートフォリオ構築モデルに進みます。このモデルは、アルファ モデル、リスク モデル、トランザクション コスト モデルから入力を取得し、さまざまな資産間で資金を割り当てる方法を決定します。何らかの目的関数に基づいてポートフォリオを構築することを目的としています。ポートフォリオ構築モデルには主に 2 つのタイプがあります。ルールベースのモデル (例: 等重み、等リスク、デシジョン ツリー手法) とポートフォリオ オプティマイザーです。後者には、ポートフォリオ内でより最適な資産配分を達成するための目的関数の最適化が含まれます。

最後に、実行モデルがあります。これは、ポートフォリオ構築モデルから情報を受け取り、可能な限り最良の価格で注文を実行することに焦点を当てます。単純な成行注文や指値注文から、市場の微細構造を分析して機械学習アルゴリズムを利用するより複雑なものまで、さまざまな種類の執行モデルがあります。

これで、定量的取引システムの主要な要素についての簡単な説明が終わりました。この概要により、取引システムの構造とそれが一般的にどのように動作するかをよりよく理解していただければ幸いです。

次のビデオでは、この説明に基づいてソフトウェア システム アーキテクチャを作成してみます。このトピックが興味深いと思われた場合は、今後の更新情報を受信するためにチャンネル登録を検討してください。ご視聴いただきありがとうございます。また次のビデオでお会いしましょう。
理由: