6. Drei Strategie-Basisklassen: RuleIterator, FactorSorter, GeneralStg
Benutzerdefinierte Strategien in qteasy erben normalerweise eine von drei Basisklassen: RuleIterator für Timing oder Einzelregeliteration; FactorSorter für die faktorbasierte Aktienauswahl; GeneralStg für allgemeine Multi-Asset- oder Multi-Regel-Signale.
6.1. Welche Basisklasse verwendet werden soll
RuleIterator: Einzelinstrument- oder Einzelregel-Iteration pro Periode (z. B. MA- oder MACD-Timing). Inputs sind in der Regel Preisreihen; Der Ausgang ist ein Positions- oder Skalarsignal.FactorSorter: Ordnen Sie mehrere Instrumente nach einem Faktor und wählen Sie das obere oder untere N aus. Legen Siemax_sel_count,sort_ascendingusw. fest.GeneralStg: Flexiblere Multi-Asset-, Multi-Regel- oder benutzerdefinierte I/O-Formen, wenn „RuleIterator“/„FactorSorter“ nicht ausreichen.
6.2. RuleIterator
Eingabe/Ausgabe: Rufen Sie normalerweise OHLCV über „get_data(dtype_id)“ ab und geben Sie ein 1-D-Signal in „realize()“ zurück (z. B. Zielposition 0–1).
Typische Verwendung: MA-Crossovers, MACD-Histogrammzeichen usw.
Kurzes Beispiel (Logikskizze):
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)
Multi-Instrumenten-Parameter (Pflichtlektüre)
Parameter pro Freigabe: Rufen Sie nach „set_shares“ / „Operator.set_shares“ „update_par_values({code: (param_tuple), …})“ mit einem dict auf (oder übergeben Sie „Operator.set_parameter(…, par_values={…})“). Die Schlüssel müssen genau mit den Freigabecodes in der aktuellen Liste übereinstimmen. Das Framework erstellt pro Freigabe Parameterarrays. Verwenden Sie in „realize()“ „get_pars()“ / „update_par_values()“ und das Framework richtet die aktuelle Freigabe in „generate()“ aus.
Tupel/Positionsinit: Bei mehreren Freigaben verwendet die Laufzeit einen gemeinsam genutzten Parametersatz (einzelne „_pars“). Wenn Sie Parameter pro Aktie vorgesehen, aber ein Diktat weggelassen haben, kann die Semantik stillschweigend abweichen. Tupel sind in Ordnung, wenn alle Anteile Anfangswerte teilen und sich gemeinsam weiterentwickeln sollten.
Standardschlüssel (nicht „andere“): Neben expliziten Freigabecodes kann ein „Standard“-Schlüssel ein Parametertupel enthalten, das für jede Freigabe verwendet wird, die im Diktat nicht aufgeführt ist. Parameter pro Freigabe können in „realize()“ über „update_par_values“ weiterhin unabhängig weiterentwickelt werden. Es gibt keinen magischen Schlüssel „Andere“ oder „Rest“ – verwenden Sie keine undokumentierten Schlüssel.
6.3. FactorSorter
Eingabe/Ausgabe: Faktordaten abrufen (Renditen, Volatilität usw.), Faktorwerte pro Aktie in „realize()“ zurückgeben; Die Basisklasse sortiert nach
sort_ascendingund wählt die bestenmax_sel_countAnteile aus.Attribute: „max_sel_count“ (Auswahlanzahl), „sort_ascending“ (True = Kleinster zuerst, False = Größter zuerst) usw.
6.4. GeneralStg
Eingabe/Ausgabe: Flexible benutzerdefinierte „DataType“-Eingabe- und Ausgabe-Array-Formen; Multi-Asset-Gewichte, Multi-Regel-Mischungen usw.
Verwenden, wenn: Benutzerdefinierte Logik, die über die einfache Zeit- oder Faktorauswahl hinausgeht.