6. 3 つの戦略基本クラス: RuleIterator、FactorSorter、GeneralStg

qteasy のカスタム ストラテジーは通常、3 つの基本クラスの 1 つを継承します: RuleIterator for timing or single-rule iteration; FactorSorter for factor-based stock selection; GeneralStg (一般的なマルチアセットまたはマルチルール シグナルの場合)。

6.1. どの基本クラスを使用するか

  • RuleIterator: 期間ごとに単一の金融商品または単一ルールの反復 (例: MA または MACD タイミング)。通常、入力は価格系列です。出力は位置信号またはスカラー信号です。

  • FactorSorter: Rank multiple instruments by a factor and pick top or bottom N. Set max_sel_count, sort_ascending など

  • GeneralStg: More flexible multi-asset, multi-rule, or custom I/O shapes when RuleIterator/FactorSorter では不十分です。

6.2. RuleIterator

  • 入力/出力: 通常、OHLCV は get_data(dtype_id) and return a 1-D signal in realize() 経由でフェッチします (例: ターゲット位置 0–1)。

  • 一般的な用途: MA クロスオーバー、MACD ヒストグラム サインなど。

  • 簡単な例 (ロジック スケッチ):

from qteasy import RuleIterator, Parameter

class MyTiming(RuleIterator):
    def __init__(self):
        super().__init__(pars=[Parameter('period', 20)], ...)
    def realize(self):
        close = self.get_data('close')
        # 简单均线规则
        return (close[-1] > close[-self.get_pars()['period']:].mean()).astype(float)

複数の機器のパラメータ (必読)

  • シェアごとのパラメータ: 後⟦コード0⟧⟦コード1⟧⟦コード2⟧⟦コード3⟧⟦コード4⟧⟦コード5⟧⟦コード6⟧⟦コード7 ⟧⟦コード8⟧⟦コード9⟧⟦コード10⟧⟦コード11⟧⟦コード12⟧⟦コード13⟧⟦コード14⟧

  • タプル / 位置初期化: 複数の共有の場合、ランタイムは 1 つの共有 パラメーター セット (単一の _pars) を使用します。共有ごとのパラメータを意図していながら辞書を省略した場合、セマンティクスが静かに分岐する可能性があります。 すべてのシェアが初期値を共有し、一緒に進化する必要がある場合、タプルは問題ありません。

  • **⟦コード0⟧⟦コード1⟧⟦コード2⟧⟦コード3⟧⟦コード4⟧⟦コード5⟧⟦COD E6⟧⟦コード7⟧⟦コード8⟧⟦コード9⟧⟦コード10⟧⟦コード11⟧⟦コード12⟧マジック キー - 文書化されていないキーは使用しないでください。

6.3. FactorSorter

  • 入力/出力: ファクター データ (リターン、ボラティリティなど) を取得し、realize(); the base class sorts by sort_ascending and picks top max_sel_count 株の 1 株あたりのファクター値を返します。

  • 属性: max_sel_count (selection count), sort_ascending (True = 最小が最初、False = 最大が最初) など。

6.4. GeneralStg

  • 入力/出力: 柔軟なカスタム DataType 入力および出力配列形状。マルチアセットウェイト、マルチルールブレンドなど。

  • 次の場合に使用します: 単純なタイミングや要因の選択を超えたカスタム ロジック。