6. バックテスト エンジンとパフォーマンス
この章では、使用法と結果の観点から qteasy のバックテスト エンジンがどのように機能するか、パフォーマンスとベクトル化がどのように実装されるかを説明し、ユーザーがバックテストの速度と正確性がどこから来るのかを理解できるようにします。下位レベルのアーキテクチャの説明については、「アーキテクチャと設計」の バックテスト エンジンとパフォーマンス (設計の観点) を参照してください。
6.1. 1. 回测引擎概览
バックテストのエントリ ポイントとワークフローは、バックテストの概要 と バックテストの実行方法 で説明されています。 qt.run(op, mode=1, ...) を介してバックテスト モードに入り、内部的に group_timing_table の各タイム ステップでストラテジを実行し、信号を解析し、実行をシミュレートします。
「バーごとのイベント駆動」または「タイムライン全体にわたるワンショット マトリックス演算」とは異なり、qteasy は 各ステップ内で機器次元のベクトル化を伴う時間次元の順次ステップを使用します。
時間ディメンション: 実際の取引リズムの順序で各時間ステップを実行し、現金、ポジション、決済キュー (T+1 など) などの状態を正しく維持します。
商品のディメンション: 各タイム ステップ内で、資産プール内のすべての商品 (売買数量、手数料、ポジション更新など) に対して ベクトル化計算 (NumPy 配列 + Numba アクセラレーション) を実行し、ステップごとの高い効率を実現します。
これにより、状態とルールがライブ取引と一貫していることが保証され、純粋にイベント駆動型のアプローチでティックごとのループによって引き起こされるパフォーマンスの損失が回避されます。
6.2. 2. 性能与向量化
2.1 コア計算の高速化
バックテストと取引結果計算における以下のコア機能はすべて Numba JIT (@njit(nogil=True, cache=True)) で高速化されます。
backtest_step: 単一のステップ内で、商品のバッチ全体の売買高、手数料、ポジション、決済更新を計算します。
calculate_trade_results: 取引結果とキャッシュ フローの計算。
backtest_batch_steps: Numba 内で時間をかけてループし、
backtest_stepを呼び出してバックテスト セグメント全体を完了します。backtest_flash_steps: 最適化モードでのみ使用されます。メモリを節約するために最終的なキャッシュとポジションのみを保持し、同様に Numba 内でバッチ ステッピングを完了します。
信号ミキシング (複数の戦略のマージなど) では、blender モジュールの一部のオペレーターに対して @njit アクセラレーションも使用します。したがって、メインのバックテスト エンジンは、純粋な Python ループではなく、ベクトル化 + Numba を使用して実装されます。
2.2 機器次元に沿った時間次元の順序付けとベクトル化
寸法 |
アプローチの概要 |
|---|---|
時間の次元 |
順次ステップを進めて、T+1、決済サイクル、MOQ などの状態をライブ取引と一貫して正しく維持します。 |
器具の寸法 |
ベクトル化を実現するには、単一ステップ内ですべての計測器の配列演算を実行します (例: |
最適化モード |
複数のパラメータセットは、マルチプロセッシングによって並行してバックテストされます。各セット内では、メモリと計算を削減するために、 |
最初の実行時またはパラメーターが変更されたときに、Numba は関連する関数をコンパイルするため、1 回限りの起動遅延が発生する可能性があります。同じタイプの後続のバックテストではキャッシュが再利用され、より高速に実行されます。
2.3 VectorBT との簡単な比較
比較項目 |
qteasy |
VectorBT |
|---|---|---|
時間の次元 |
順次前進し、各ステップ内でベクトル化されます |
明示的なタイム ループを使用しない、タイムライン全体にわたるワンショット マトリックス演算 |
状態と制約 |
T+1、決済、MOQなどを明示的に維持し、ライブ取引に厳密に一致します |
ほとんどが単純化された資本曲線。決済/MOQを重視しない |
該当するシナリオ |
A シェア ルールを正確にシミュレートし、複数の戦略を結合し、詳細なコストと決済をモデル化する必要がある場合 |
膨大なパラメータの組み合わせを迅速にスクリーニングします。研究指向のバックテスト |
状態の正確性と構成可能なルールを保証することを前提として、qteasy は、時間軸シーケンス + 機器軸ベクトル化 + Numba シングルステップ実行を通じて速度のバランスをとります。一方、マルチパラメータの最適化は、マルチプロセッシング並列処理によって「1 回の実行で完全な行列をブロードキャストできない」という違いを補います。
6.3. 3. 本目录与相关文档
バックテストのエントリ ポイントと構成: 1.バックテストの概要、2.バックテストを実行する方法。
バックテスト結果と評価: 【3.バックテスト結果の構造](3.%20result_structure.md)、5.バックテスト結果の評価と分析。
アーキテクチャと実装の詳細: 設計: バックテスト エンジンとパフォーマンス、設計: 設計の理論的根拠と独自の利点。