HN 日本語サマリー

← 一覧へ戻る
プログラミング

高性能C++バックテストフレームワークの構築

Building a High-Performance C++ Backtesting Framework (dolphindb.com)

4 pointsby CrazyTomato0 コメント

要約

DolphinDBの高性能注文マッチングシミュレータープラグインを既存のC++バックテストフレームワークに統合する方法について解説しています。これにより、システム全体を再構築することなく、高性能な市場データリプレイと現実的な注文マッチングが可能になります。特に高頻度戦略の検証において、定量エンジニアにとって低遅延・高スループットなソリューションを提供し、SwordfishライブラリまたはC++ APIを用いた統合方法を説明しています。

全文翻訳

注文マッチングシミュレータープラグインを備えた高性能C++バックテストフレームワークの構築 DolphinDB 2026-07-06 既にC++バックテストフレームワークを構築している機関にとって、より現実的な注文マッチングと高性能な市場リプレイをサポートするためにシステム全体を再構築することは、しばしば非現実的です。DolphinDBの高性能市場データリプレイおよび注文マッチングシミュレータープラグインは、戦略検証のための低遅延・高スループットなソリューションを提供します。このプラグインを既存のC++バックテストフレームワークに直接統合することで、機関はDolphinDBの超高速コンピューティング能力を活用しながら、現在のインフラストラクチャを再利用でき、高頻度戦略シミュレーションに理想的なソリューションとなります。 このチュートリアルは、C++開発に精通しており、DolphinDBの基本的な理解がある定量エンジニアを対象としています。ここでは、SwordfishライブラリまたはC++ APIのいずれかを使用して、DolphinDB注文マッチングシミュレータープラグインをスタンドアロンC++取引システムにシームレスに統合する方法に焦点を当てています。DolphinDBスクリプト言語でのバックテストと比較して、このアプローチは低遅延で高度に並行したバックテストワークフローを実現し、特にアルゴリズム取引やマーケットメイキング戦略のような時間制約のあるシミュレーションシナリオに最適です。 1. 背景 バックテストは、定量取引の研究開発において重要な部分です。定量戦略をライブ取引に適用する前に、そのパフォーマンスを過去のデータで評価するためにバックテストを行う必要があります。中・高頻度戦略のバックテストでは、すべての注文が現在の価格または終値で全量約定すると単純に仮定することはできません。代わりに、注文が約定できるかどうか、約定価格、取引数量、市場への影響を含む実際の取引プロセスをモデル化するために、注文マッチングシミュレーターが必要です。DolphinDBは、上海および深圳証券取引所のレベル2ティックバイティックおよびスナップショット市場データをサポートする注文マッチングシミュレータープラグインを提供します。「価格優先、時間優先」の原則に基づき、取引所のルールと一致した高精度な注文マッチングを実現し、複数の市場データタイプに基づいたマッチングモードをサポートし、実際の取引条件をシミュレートするための広範な注文マッチング設定オプションを提供します。また、DolphinDBスクリプト言語、Python、C++での中・高頻度定量取引戦略の開発とテストをサポートし、高性能で拡張性の高いバックテストソリューションを提供します。 Swordfishは、金融業界向けに特別に設計された高性能分析コンピューティングライブラリであり、優れたインメモリ処理能力と最適化された計算パフォーマンスを備えています。幅広い汎用コンピューティング機能に加えて、リアルタイムストリーミングデータ処理とユーザー定義関数をサポートし、複雑な分析と低遅延ストリーム処理のニーズに対応します。SwordfishはC++をサポートするあらゆるプラットフォームで実行でき、ユーザーは効率的な計算のためにC++コードで直接APIを呼び出すことができます。 DolphinDB C++ APIは、DolphinDBサーバーとC++クライアントを接続し、双方向のデータ転送とリモートスクリプト実行を可能にします。これにより、C++プログラムでDolphinDBをデータ処理、分析、モデリングなどに便利に使用でき、DolphinDBの優れたコンピューティングパフォーマンスと強力なストレージ機能でこれらのワークロードを加速するのに役立ちます。 このチュートリアルでは、注文マッチングシミュレータープラグインをC++でカプセル化して、高精度な注文マッチングを備えたシンプルで拡張性の高いバックテストフレームワークを構築する方法を説明します。これは、既存のC++バックテストまたはシミュレーションシステムに簡単に統合できます。このチュートリアルでは、統一されたイベント駆動型インターフェースを定義し、SwordfishとC++ APIの2つの実装を提供します。2つのアプローチの適用シナリオは次のとおりです。 表1-1 SwordfishとC++ APIバックテストフレームワーク実装間のシナリオ比較 2. システム設計 中・高頻度定量取引戦略バックテストプラットフォームの実装は、主に以下の3つの主要部分を含みます。 市場データリプレイ 注文マッチングシミュレーション 戦略開発とバックテストパフォーマンス評価 この設計に基づき、DolphinDBをデータソースとしたC++でのバックテストの全体的なワークフローを定義できます。 リモート市場データストリームテーブルを作成して購読します。 市場データをストリームテーブルにリプレイします。 購読コールバックでデータをトラバースして解析し、解析された市場データを注文マッチングシミュレーターに書き込みます。 市場データコールバックをトリガーし、コールバック内で戦略ロジックを実装し、注文を発注またはその他のアクションを実行します。 注文マッチングシミュレーターは、約定詳細情報などを出力し、関連するビジネスコールバックをトリガーし、それらのコールバック内で戦略ロジックを実装できるようにします。 バックテスト終了後にパフォーマンスメトリックを出力します。 以下の図は、Swordfishを使用したユーザー定義バックテストの実装システムのアーキテクチャを示しています。 図1-1 Swordfishを使用したユーザー定義バックテストのアーキテクチャ 以下の図は、C++ APIを使用したユーザー定義バックテストの実装システムのアーキテクチャを示しています。 図1-2 C++ APIを使用したユーザー定義バックテストのアーキテクチャ 3. インターフェース設計 DolphinDBの注文マッチングシミュレーターインターフェースが提供する機能に基づき、このチュートリアルでは市場データインターフェースと取引インターフェースを定義します。設計は主に以下の機能モジュールを含みます。 設定モジュール:リモート接続設定、市場データタイプ設定、および並行性関連設定を含む、バックテストフレームワークインスタンスの設定を処理します。 アクティブコールインターフェースモジュール:注文マッチングシミュレーターインスタンスの作成、データリプレイ、注文の発注、注文のキャンセルなどのインターフェースを提供します。 コールバックインターフェースモジュール:市場データコールバック、注文確認、約定通知などのコールバックベースのインターフェースを提供します。 注:特に指定がない限り、このセクションで紹介する設定項目とインターフェースは、SwordfishとC++ APIの両方で使用できます。 3.1 設定項目 バックテストフレームワークインスタンスの設定項目を以下の表に示します。各インスタンスは独立して設定できるため、ユーザーは複数のインスタンスで並行バックテストを実行できます。 3.2 インターフェース このチュートリアルで紹介するバックテストフレームワークは、注文マッチングシミュレーターインスタンスの作成、データリプレイ、注文送信、注文キャンセル用の直接呼び出しインターフェースと、市場データ、注文送信応答、取引通知用のコールバックインターフェースを提供します。以下のセクションでは、コアインターフェースの設計と使用法について説明します。その他のインターフェースの詳細については、添付ソースコードのコメントを参照してください。 3.2.1 注文マッチングシミュレーターの作成 まず、createMatchEngineインターフェースを使用して注文マッチングシミュレーターインスタンスを作成します。これは2つの実装を提供します。 Copied to clipboard dolphindb::SmartPointer<MatchingEngineSimulatorWrapper> createMatchEngine( dolphindb::ConstantSP name, dolphindb::ConstantSP exchange, dolphindb::DictionarySP config, dolphindb::TableSP dummyQuoteTable, dolphindb::DictionarySP quoteColMap, dolphindb::TableSP dummyUserOrderTable, dolphindb::DictionarySP userOrderColMap, dolphindb::TableSP dummyOrderDetailsOutput, dolphindb::ConstantSP orderDetailsOutputStreamTableName=nullptr) dolphindb::SmartPointer<MatchingEngineSimulatorWrapper> createMatchEngine( std::vector<dolphindb::ConstantSP> args) 最初のものは拡張されたパラメータリストを使用し、2番目のものは最初のリストのすべてのパラメータを単一の配列にパッケージ化します。このインターフェースのパラメータ要件は、元のcreateMatchEngineインターフェースのパラメータ要件とほぼ同じです。異なるのは、ここで説明されているパラメータのみです。 dummyOrderDetailsOutput:実際の