5. Operator とグループ: 誰がいつ走るか
5.1. 1. 运行层在整体中的位置
ランタイム層は、時間駆動 戦略の実行を担当し、各戦略からのシグナルを集約し、結果をバックテスト/ライブ取引/最適化に渡します。コアは Operator です。これは戦略のコンテナであると同時に、実行のための統合されたエントリ ポイント (op.run(config, datasource, logger)) でもあります。 Group と group_timing_table を通じて、Operator は「各タイム ステップでどのストラテジが実行されるか、信号がどのようにブレンドされるか」を決定し、それによってバックテスト期間と実行頻度に応じた再現可能な実行が可能になります。
5.2. 2. Operator 的角色
戦略コンテナ: 複数のグループを保持します。各グループにはいくつかの戦略 (戦略) が含まれています。ユーザーが
add_strategy/Operator([...])を介して戦略を追加すると、戦略は既存のグループに割り当てられるか、run_freq と run_timing に基づいて新しいグループが作成されます。実行エントリ ポイント: run(config, datasource, logger) を外部に公開します。構成には、資産ユニバース、バックテスト期間、コスト、資本計画などが含まれます。データソースは履歴データまたはリアルタイム データを提供します。実行ロジックは、group_timing_table に従って各グループを段階的に実行し、信号を集計します。
group_timing_table を維持する: 実行前に、このテーブルはバックテスト期間 (またはライブ スケジュール) と各グループの run_freq および run_timing に基づいて生成されます。各行はタイム ステップに対応し、各列はグループに対応します。値 1 はグループがそのステップで実行されることを意味し、0 はグループが実行されないことを意味します。
5.3. 3. Group 的概念
定義: グループは、同じ run_freq と run_timing を共有する戦略の集合であり、統一された signal_type (PT/PS/VS) と blender (ブレンド ルール) を持ちます。
「実行タイミング」でグループ化する理由: 同時に実行されるストラテジーは、同じセットの「現在のタイム ステップ」データとスケジュールを共有します。混合する場合、信号は最初に「同じグループ信号」としてブレンダーでマージされ、次に group_merge_type を使用して複数のグループが共存する場合を処理するため、理解と設定が容易になります。
5.4. 4. Operator 与 Group 的关系
Operator には複数のグループが含まれており、各グループには複数の戦略が含まれています。
ストラテジを追加するときに、同じ run_freq と run_timing を持つグループがすでに存在する場合、ストラテジはそのグループに追加されます。それ以外の場合は、新しいグループが作成されます。したがって、グループの分割は完全に「実行タイミング」によって決まります。ストラテジ クラス自体は run_freq/run_timing を格納しません。それらはそのグループによって管理されています。
5.5. 5. group_timing_table
意味: 2D テーブル: 行 = タイム ステップ (バックテスト期間またはライブ スケジュールに合わせて)、列 = グループ。セル値 1 はグループがそのステップで実行されることを意味し、0 はグループが実行されないことを意味します。
バックテスト期間と run_freq との関係: バックテストでは、invest_start、invest_end、取引カレンダーからタイムラインが生成され、各グループの run_freq と run_timing を使用してそのタイムライン上で「どのステップがどのグループを実行するか」をマークし、group_timing_table を生成します。ライブ取引も同様です。どのグループがトリガーされるかは、実際の実行日と run_freq/run_timing によって決まります。
5.6. 6. blender
目的: 同じグループ内に複数の戦略が存在する場合があります。各ステップで、各戦略は信号 (スカラーまたは配列) を出力します。 ブレンダーは、特定のルール (例: 加重平均、合計など) に従って、これらの信号をグループの 1 つの マージ信号に混合します。
設定: 式 (例:
0.5*s0+0.5*s1) にすることも、デフォルトのルールを使用することもできます。PT では、通常、各戦略のターゲット ポジションの平均が使用されます。 PS/VS では、一般に合計などを使用します。詳細については、ドキュメントと API を参照してください。結果: ブレンドされた信号はこのステップとこのグループの出力として使用され、group_merge_type に従って他のグループの出力とマージされます (複数のグループが同時に実行される場合)。
5.7. 7. group_merge_type
複数のグループが同じタイム ステップで実行される場合、group_merge_type はグループからの信号がどのようにマージされるかを決定します。
なし: 各グループは結合せずに独立して出力します (複数のグループがある場合、上位層での使用方法に応じて、複数の実行パスが生成される可能性があります)。
And: グループ間で信号を乗算するなど、論理 AND スタイルのマージ。
Or: グループ間で信号を追加するなど、論理 OR スタイルのマージ。
正確なセマンティクスは、現在のバージョンのドキュメントに依存します。通常、単一のグループを使用する場合は気にする必要はありません。
5.8. 8. 小结
Group と group_timing_table を通じて、Operator は「タイム ステップごと、グループごと」の統合スケジューリングを実装します。各ステップでは、そのステップで 1 とマークされたグループのみを実行します。グループ内の戦略はデータ インジェクションとブレンダーを共有し、バックテスト/ライブ トレード/最適化のためにマージされたシグナルを出力します。詳しい使用方法については、ユーザー ガイドと API ドキュメントを参照してください。