6. 三種策略基類:RuleIterator、FactorSorter、GeneralStg
qteasy 中自定義策略通常繼承自三種基類之一,按使用場景選擇:RuleIterator 適用於擇時或單規則迭代;FactorSorter 適用於因子選股;GeneralStg 適用於通用多資產或多規則信號。
6.1. 何時用哪種基類
RuleIterator:單標的或單規則、逐週期迭代(如均線擇時、MACD 擇時)。輸入多爲單標的或多標的的行情序列,輸出爲倉位或單一信號。
FactorSorter:多標的按某一因子排序,選取前 N 或後 N 名(選股)。需設置 max_sel_count、sort_ascending 等。
GeneralStg:更通用的多資產、多規則或自定義輸入輸出形狀的策略,當 RuleIterator/FactorSorter 無法滿足時使用。
6.2. RuleIterator
輸入/輸出:通常通過
get_data(dtype_id)獲取 OHLCV 等,在realize()中計算並返回一維信號(如目標倉位 0~1)。典型用法:均線金叉死叉、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)
多標的參數(必讀)
需要每股不同參數時:必須在
set_shares/Operator.set_shares之後,用 字典 調用update_par_values({代碼: (參數元組), ...})(或通過Operator.set_parameter(..., par_values={...})等效傳入)。字典的鍵須與當前標的列表中的字符串 完全一致。框架據此建立按標的順序排列的 per-share 參數;之後在realize()裏用get_pars()/update_par_values()即可,由框架在generate()循環內對齊當前股票。若用元組 / 位置參數初始化:多標的時運行時 全體共享一套 策略參數(單一
_pars)。若本意是「每隻股票獨立一套參數」卻未傳字典,易產生靜默語義偏差;刻意讓所有股票共用一套初值並一起演化 時,用元組是合理選擇。default鍵(不是others):字典中除具體股票代碼外,可額外提供鍵"default",其值爲一個參數元組;凡 未在字典中單獨列出 的標的,初始化時都會使用該元組作爲初值。之後各標的在回測/實盤中的參數仍可在realize()內通過update_par_values獨立演進。實現上 沒有others、rest等其它魔法鍵名,請勿使用未文檔化的鍵。
6.3. FactorSorter
輸入/輸出:獲取因子數據(如收益率、波動率),在
realize()中返回每個標的的因子值;基類按 sort_ascending 排序後取前 max_sel_count 個形成選股列表。屬性:max_sel_count(選股數量)、sort_ascending(True 升序取最小,False 降序取最大)等。
6.4. GeneralStg
輸入/輸出:更靈活,可自定義所需 DataType 與返回數組形狀,適用於多資產權重、多規則組合等。
適用場景:不限於單標的擇時或簡單因子選股時的自定義邏輯。