Integrierte Handelsstrategien
In qteasy gibt es mehr als 70 integrierte Handelsstrategien, die Benutzer problemlos direkt nutzen können. Gleichzeitig bietet qteasy eine Reihe von Handelsstrategie-Kombinationsmechanismen, und Benutzer können mehrere einfache Handelsstrategien zu einer komplexeren Handelsstrategie kombinieren. Die Kombinationsmethode der Strategie kann flexibel eingestellt werden. Nach der Kombination mehrerer einfacher Handelsstrategien zu einer komplexen Strategie kann das Strategieoptimierungstool auch zur Suche nach den besten Parametern der gesamten komplexen Strategie verwendet werden.
In diesem Tutorial erfahren Sie, wie Sie integrierte Handelsstrategien verwenden, wie Sie Strategien kombinieren, wie Sie Kombinationsregeln festlegen, um komplexe Strategien zu erreichen, und wie Sie Strategien optimieren.
Integrierte Strategien
qt.get_built_in_strategy(id)
qt.built_in_list(stg_id=None)
Die Ausgabe der oben genannten drei Methoden ist die gleiche, alle listen alle integrierten Handelsstrategien mit einem Diktat auf, wobei der Schlüssel die ID der Handelsstrategie und der Wert das Handelsstrategieobjekt ist. Wenn stg_id angegeben ist, werden die detaillierten Informationen der angegebenen Handelsstrategie gedruckt. Zum Beispiel:
# 获取内置交易策略的清单
stg_list = qt.built_ins('dma')
Folgende Informationen werden gedruckt:
DMA择时策略
策略参数:
s, int, 短均线周期
l, int, 长均线周期
d, int, DMA周期
信号类型:
PS型:百分比买卖交易信号
信号规则:
在下面情况下产生买入信号:
1, DMA在AMA上方时,多头区间,即DMA线自下而上穿越AMA线后,输出为1
2, DMA在AMA下方时,空头区间,即DMA线自上而下穿越AMA线后,输出为0
3, DMA与股价发生背离时的交叉信号,可信度较高
策略属性缺省值:
默认参数:(12, 26, 9)
数据类型:close 收盘价,单数据输入
采样频率:天
窗口长度:270
参数范围:[(10, 250), (10, 250), (8, 250)]
策略不支持参考数据,不支持交易数据
Die integrierte Handelsstrategie kann direkt über die ID in qteasy abgerufen werden
Neben der Verwendung von qt.get_built_in_strategy() zum Abrufen der Handelsstrategie kann die integrierte Handelsstrategie-ID auch als Parameter beim Erstellen des Operator-Objekts übergeben werden, um die Handelsstrategie direkt zu erstellen.
# 获取内置交易策略的ID
strategy_ids = qt.built_ins().keys()
print(list(strategy_ids)[:10])
['crossline', 'macd', 'dma', 'trix', 'cdl', 'bband', 's-bband', 'sarext', 'ssma', 'sdema']
# 使用策略ID获取交易策略
stg = qt.get_built_in_strategy('trix')
# 显示策略的相关信息
stg.info()
Strategy_type: RuleIterator
Strategy name: TRIX
Description: TRIX strategy, determine long/short position according to triple exponential weighted moving average prices
Strategy Parameter: (25, 125)
Strategy Properties Property Value
---------------------------------------
Parameter count 2
Parameter types ['int', 'int']
Parameter range [(2, 50), (3, 150)]
Data frequency d
Sample frequency d
Window length 270
Data types ['close']
# 通过策略ID直接生成Operator
op = qt.Operator(strategies='dma, macd')
# 通过op.get_stg或op[]获取交易策略
stg_dma = op.get_stg('dma')
stg_macd = op['macd']
# 查看两个交易策略的相关信息
stg_dma.info()
stg_macd.info()
Strategy_type: RuleIterator
Strategy name: DMA
Description: Quick DMA strategy, determine long/short position according to differences of moving average prices with simple timing strategy
Strategy Parameter: (12, 26, 9)
Strategy Properties Property Value
---------------------------------------
Parameter count 3
Parameter types ['int', 'int', 'int']
Parameter range [(10, 250), (10, 250), (10, 250)]
Data frequency d
Sample frequency d
Window length 270
Data types ['close']
Strategy_type: RuleIterator
Strategy name: MACD
Description: MACD strategy, determine long/short position according to differences of exponential weighted moving average prices
Strategy Parameter: (12, 26, 9)
Strategy Properties Property Value
---------------------------------------
Parameter count 3
Parameter types ['int', 'int', 'int']
Parameter range [(10, 250), (10, 250), (10, 250)]
Data frequency d
Sample frequency d
Window length 270
Data types ['close']
Die folgenden integrierten Handelsstrategien werden von qteasy unterstützt:
ID |
Strategiename |
Beschreibung |
|---|---|---|
crossline |
|
Crossline-Timing-Strategieklasse, die den Schnittpunkt der gleitenden Long- und Short-Durchschnitte verwendet, um den Long- und Short-Zustand zu bestimmen |
macd |
|
MACD-Timing-Strategieklasse, die die MACD-Strategie des gleitenden Durchschnitts verwendet, um den Zielpositionsprozentsatz zu generieren: |
dma |
|
DMA-Timing-Strategie |
trix |
|
TRIX-Timing-Strategie, die den dreifach geglätteten exponentiellen gleitenden Durchschnittspreis der Aktienpreise für die Long- und Short-Beurteilung verwendet: |
cdl |
|
CDL-Timing-Strategie: Finden Sie das Cdldoji-Muster, das den Anforderungen im K-Linien-Diagramm entspricht. Suchen Sie nach dem Cdldoji-Muster, das im historischen Datenfenster angezeigt wird (Übereinstimmungsgrad zwischen 0 und 100), addieren Sie es /100 und berechnen Sie die entsprechende Cdldoji-Übereinstimmungsmenge, indem Sie die Übereinstimmungsmenge als Handelssignal verwenden. |
bband |
TimingBBand |
Die Bollinger-Band-Handelsstrategie bestimmt Long- und Short-Positionen auf der Grundlage der Beziehung zwischen den Aktienkursen und den oberen und unteren Bändern der Bollinger-Bänder. Handelssignale werden generiert, wenn der Preis die oberen und unteren Bänder überschreitet oder unterschreitet. Der Typ des gleitenden Durchschnitts der Bollinger-Bänder ist nicht wählbar<br |
s-bband |
SoftBBand |
Die progressive Bollinger-Band-Handelsstrategie bestimmt Long- und Short-Positionen auf der Grundlage der Beziehung zwischen Aktienkursen und den oberen und unteren Bändern der Bollinger-Bänder. Das Handelssignal wird nicht auf einmal generiert, sondern für den Kauf und Verkauf schrittweise erhöht. Berechnen Sie BBAND und prüfen Sie, ob der Preis das obere oder untere Band von BBAND überschreitet: |
sarext |
|
Bei der SAR-Strategie wird ein Kaufsignal ausgegeben, wenn der Indikator größer als 0 ist, und wenn der Indikator kleiner als 0 ist, wird ein Verkaufssignal ausgegeben. |
ssma |
|
Single Moving Average Crossover-Strategie – SMA Moving Average (einfacher Moving Average): Legen Sie das Positionsverhältnis entsprechend der relativen Position des Aktienpreises und des SMA Moving Average fest |
sdema |
|
Single Moving Average Crossover-Strategie - DEMA Moving Average (doppelter exponentieller Glättungsdurchschnitt): Legen Sie das Positionsverhältnis entsprechend der relativen Position des Aktienpreises und des DEMA Moving Average fest |
sema |
|
Single Moving Average Crossover-Strategie – EMA Moving Average (Exponential Smoothing Moving Average): Legen Sie das Positionsverhältnis entsprechend der relativen Position des Aktienkurses und des EMA Moving Average fest |
sht |
|
Single Moving Average Crossover-Strategie – HT (Hilbert-Transformation der momentanen Trendlinie): Legen Sie das Positionsverhältnis entsprechend der relativen Position des Aktienkurses und der HT-Linie fest |
skama |
|
Single Moving Average Crossover-Strategie – KAMA Moving Average (Kaufman Adaptive Moving Average): Legen Sie das Positionsverhältnis entsprechend der relativen Position des Aktienkurses und des KAMA Moving Average fest |
smama |
|
Single Moving Average Crossover-Strategie – MAMA Moving Average (MESA Adaptive Moving Average): Legen Sie das Positionsverhältnis entsprechend der relativen Position des Aktienpreises und des MAMA Moving Average fest |
st3 |
|
Single Moving Average Crossover-Strategie - T3 Moving Average (dreifacher exponentieller Glättungs-Moving Average): Legen Sie das Positionsverhältnis entsprechend der relativen Position des Aktienpreises und des T3 Moving Average fest |
stema |
|
Crossover-Strategie mit einfachem gleitendem Durchschnitt – gleitender TEMA-Durchschnitt (dreifacher exponentieller Glättungs-gleitender Durchschnitt): Legen Sie das Positionsverhältnis entsprechend der relativen Position des Aktienpreises und des gleitenden TEMA-Durchschnitts fest |
strima |
|
Single-Moving-Average-Crossover-Strategie – TRIMA-Moving-Average (dreifacher exponentieller Glättungs-Moving-Average): Legen Sie das Positionsverhältnis entsprechend der relativen Position des Aktienkurses und des TRIMA-Moving-Average fest |
swma |
|
Single Moving Average Crossover-Strategie – WMA Moving Average (gewichteter Moving Average): Legen Sie das Positionsverhältnis entsprechend der relativen Position des Aktienpreises und des WMA Moving Average fest |
dsma |
|
Crossover-Strategie mit doppeltem gleitenden Durchschnitt – gleitender SMA-Durchschnitt (einfacher gleitender Durchschnitt): |
ddema |
|
Double Moving Average Crossover-Strategie – SMA Moving Average (einfacher gleitender Durchschnitt): |
dema |
|
Double Moving Average Crossover-Strategie – SMA Moving Average (einfacher gleitender Durchschnitt): |
dkama |
|
Crossover-Strategie mit doppeltem gleitenden Durchschnitt – gleitender SMA-Durchschnitt (einfacher gleitender Durchschnitt): |
dmama |
|
Crossover-Strategie mit doppeltem gleitenden Durchschnitt – gleitender SMA-Durchschnitt (einfacher gleitender Durchschnitt): |
dt3 |
|
Crossover-Strategie mit doppeltem gleitenden Durchschnitt – gleitender SMA-Durchschnitt (einfacher gleitender Durchschnitt): |
dtema |
|
Crossover-Strategie mit doppeltem gleitenden Durchschnitt – gleitender SMA-Durchschnitt (einfacher gleitender Durchschnitt): |
dtrima |
|
Crossover-Strategie mit doppeltem gleitenden Durchschnitt – gleitender SMA-Durchschnitt (einfacher gleitender Durchschnitt): |
dwma |
|
Crossover-Strategie mit doppeltem gleitenden Durchschnitt – gleitender SMA-Durchschnitt (einfacher gleitender Durchschnitt): |
slsma |
|
Steigungshandelsstrategie – SMA-gleitender Durchschnitt (einfacher gleitender Durchschnitt): |
sldema |
|
Steigungshandelsstrategie – gleitender DEMA-Durchschnitt (gleitender Durchschnitt mit doppelter exponentieller Glättung): |
slema |
|
Steigungshandelsstrategie – gleitender EMA-Durchschnitt (exponentiell glättender gleitender Durchschnitt): |
slht |
|
Steigungshandelsstrategie – gleitender HT-Durchschnitt (Hilbert-Transformation – sofortige Trendlinie): |
slkama |
|
Steigungshandelsstrategie – KAMA Moving Average (Kaufman adaptiver gleitender Durchschnitt): |
slmama |
|
Steigungshandelsstrategie – MAMA Moving Average (MESA Adaptive Moving Average): |
slt3 |
|
Steigungshandelsstrategie – gleitender T3-Durchschnitt (gleitender Durchschnitt mit dreifacher exponentieller Glättung): |
sltema |
|
Steigungshandelsstrategie – gleitender TEMA-Durchschnitt (dreifach exponentiell glättender gleitender Durchschnitt): |
sltrima |
|
Steigungshandelsstrategie – TRIMA Moving Average (dreifach exponentiell glättender gleitender Durchschnitt): |
slwma |
|
Steigungshandelsstrategie – WMA Moving Average (gewichteter gleitender Durchschnitt): |
adx |
|
Aktienauswahlstrategie für den ADX-Indikator (Average Directional Movement Index): |
apo |
|
Aktienauswahlstrategie für den APO-Indikator (Absolute Price Oscillator): |
aroon |
|
Strategie zur Aktienauswahl des AROON-Indikators: |
aroonosc |
|
Strategie zur Aktienauswahl von AROON Oscillator: |
cci |
|
CCI-Aktienauswahlstrategie (Commodity Channel Index): |
cmo |
|
CMO (Chande Momentum Oscillator) stock selection strategy: |
macdext |
|
MACDEXT (Extendec MACD) Aktienauswahlstrategie: |
mfi |
|
MFI-Aktienauswahlstrategie (Money Flow Index): |
di |
|
DI-Handelsstrategie (Directory Indicator): |
dm |
|
DM-Handelsstrategie (Directional Movement): |
mom |
|
MOM-Handelsstrategie (Momentum-Indikator): |
ppo |
|
PO-Handelsstrategie (Percentage Price Oscillator): |
rsi |
|
Handelsstrategie RSI (Relative Strength Index): |
stoch |
|
Handelsstrategie STOCH (Stochastic Indicator): |
stochf |
|
Handelsstrategie STOCHF (Stochastic Fast Indicator): |
stochrsi |
|
Handelsstrategie STOCHRSI (Stochastic Relative Strength Index): |
ultosc |
|
Handelsstrategie ULTOSC (Ultimate Oscillator Indicator): |
willr |
|
WILLR (William’s %R) Handelsstrategie: |
signal_none |
|
Leere Handelssignalstrategie: Eine Strategie, die keine Handelssignale generiert |
sellrate |
|
Rate-of-Change-Verkaufssignalstrategie: Wenn die Änderungsrate des Preises den Schwellenwert überschreitet, wird ein Verkaufssignal generiert |
buyrate |
|
Rate-of-Change-Kaufsignalstrategie: Wenn die Änderungsrate des Preises den Schwellenwert überschreitet, wird ein Kaufsignal generiert |
long |
|
Einfache Timing-Strategie, feste Long-Position im gesamten historischen Zeitraum |
short |
|
Einfache Timing-Strategie, feste Short-Position im gesamten historischen Zeitraum |
zero |
|
Einfache Timing-Strategie, feste Leerposition im gesamten historischen Zeitraum |
all |
|
Wählen Sie alle Aktien im historischen Aktienpool aus und die Investitionsquote wird gleichmäßig verteilt |
select_none |
|
Wählen Sie keine der Aktien im historischen Aktienpool aus und die Anlageposition ist 0 |
random |
|
Wählen Sie in jedem historischen Segment eine zufällige Anzahl von Aktien gemäß dem angegebenen Anteil aus (wenn p < 1) oder wählen Sie zufällig eine bestimmte Anzahl von Aktien (wenn p> = 1) aus, um sie in das Anlageportfolio aufzunehmen, und die Investitionsquote wird gleichmäßig verteilt |
finance |
|
Wählen Sie Aktien basierend auf dem Durchschnittswert der Finanzindikatoren über einen bestimmten Zeitraum aus. Grundlegende Aktienauswahlstrategie: Verwenden Sie den Durchschnittswert historischer Aktienindikatoren als Faktoren für die Aktienauswahl. Der Faktorsortierungsparameter kann als Strategieparameter übergeben werden, um den Datentyp der Strategie zu ändern. Wählen Sie Aktien basierend auf verschiedenen historischen Daten aus. Die Aktienauswahlparameter können über pars übergeben werden. |
ndaylast |
|
Wählen Sie Aktien basierend auf dem Preis oder Datenindikator der Aktie vor N Tagen als Aktienauswahlfaktor aus |
ndayavg |
|
Wählen Sie Aktien basierend auf dem Durchschnittswert des Preis- oder Datenindikators der Aktie in den letzten N Tagen als Aktienauswahlfaktor aus |
ndayrate |
|
Wählen Sie Aktien basierend auf der prozentualen Änderung des Preises oder Datenindikators der Aktie in den letzten N Tagen als Aktienauswahlfaktor aus |
ndaychg |
|
Wählen Sie Aktien basierend auf dem Änderungswert des Preises oder Datenindikators der Aktie in den letzten N Tagen als Aktienauswahlfaktor aus |
ndayvol |
|
Wählen Sie Aktien basierend auf der Aktienkursvolatilität der letzten N Tage als Aktienauswahlfaktor aus |
Wenn Sie eine detaillierte Erklärung jeder integrierten Handelsstrategie benötigen, beispielsweise die Bedeutung der Strategieparameter und Signalgenerierungsregeln, können Sie die Dokumentzeichenfolge jeder Handelsstrategie überprüfen:
Zum Beispiel:
qt.built_ins('Crossline')
Sie können sehen
Init signature: qt.built_in.TimingCrossline(pars:tuple=(35, 120, 0.02))
Docstring:
crossline择时策略类,利用长短均线的交叉确定多空状态
策略参数:
s: int, 短均线计算日期;
l: int, 长均线计算日期;
m: float, 均线边界宽度(百分比);
信号类型:
PT型:目标仓位百分比
信号规则:
1,当短均线位于长均线上方,且距离大于l*m%时,设置仓位目标为1
2,当短均线位于长均线下方,且距离大于l*mM时,设置仓位目标为-1
3,当长短均线之间的距离不大于l*m%时,设置仓位目标为0
策略属性缺省值:
默认参数:(35, 120, 0.02)
数据类型:close 收盘价,单数据输入
采样频率:天
窗口长度:270
参数范围:[(10, 250), (10, 250), (0, 1)]
策略不支持参考数据,不支持交易数据
File: ~/Library/CloudStorage/OneDrive-Personal/Projects/PycharmProjects/qteasy/qteasy/built_in.py
Type: type
Subclasses:
Detaillierte Informationen zu integrierten Handelsstrategien können auch in interaktiven Python-Umgebungen wie ipython mit „?“ angezeigt werden, zum Beispiel:
>>> qt.built_in.SelectingNDayRateChange?
Sie können sehen:
Init signature: qt.built_in.SelectingNDayRateChange(pars=(14,))
Docstring:
基础选股策略:根据股票以前n天的股价变动比例作为选股因子
策略参数:
n: int, 股票历史数据的选择期
信号类型:
PT型:百分比持仓比例信号
信号规则:
在每个选股周期使用以前n天的股价变动比例作为选股因子进行选股
通过以下策略属性控制选股方法:
*max_sel_count: float, 选股限额,表示最多选出的股票的数量,默认值:0.5,表示选中50%的股票
*condition: str , 确定股票的筛选条件,默认值'any'
'any' :默认值,选择所有可用股票
'greater' :筛选出因子大于ubound的股票
'less' :筛选出因子小于lbound的股票
'between' :筛选出因子介于lbound与ubound之间的股票
'not_between':筛选出因子不在lbound与ubound之间的股票
*lbound: float, 执行条件筛选时的指标下界, 默认值np.-inf
*ubound: float, 执行条件筛选时的指标上界, 默认值np.inf
*sort_ascending: bool, 排序方法,默认值: False,
True: 优先选择因子最小的股票,
False, 优先选择因子最大的股票
*weighting: str , 确定如何分配选中股票的权重
默认值: 'even'
'even' :所有被选中的股票都获得同样的权重
'linear' :权重根据因子排序线性分配
'distance' :股票的权重与他们的指标与最低之间的差值(距离)成比例
'proportion' :权重与股票的因子分值成正比
策略属性缺省值:
默认参数:(14,)
数据类型:close 收盘价,单数据输入
采样频率:月
窗口长度:150
参数范围:[(2, 150)]
策略不支持参考数据,不支持交易数据
File: ~/Library/CloudStorage/OneDrive-Personal/Projects/PycharmProjects/qteasy/qteasy/built_in.py
Type: type
Subclasses:
Mehrere Strategien und Strategiekombinationen
In qteasy kann ein Operator-Händlerobjekt mehrere Handelsstrategien gleichzeitig ausführen. Diese Handelsstrategien extrahieren ihre jeweiligen historischen Daten während des Betriebs unabhängig voneinander und erzeugen so unterschiedliche Handelssignale. Diese Handelssignale werden zur einheitlichen Ausführung zu einer Reihe von Handelssignalen zusammengefasst.
Mit dieser Funktion können Benutzer mehrere Handelsstrategien mit unterschiedlichen Schwerpunkten in einem Händlerobjekt ausführen. Beispielsweise überwacht eine Handelsstrategie den Aktienkurs und generiert Auswahlsignale auf der Grundlage des Aktienkurses, während die zweite Handelsstrategie dafür verantwortlich ist, den Gesamtmarkttrend zu überwachen und darauf basierend die Gesamtposition zu bestimmen. Die dritte Handelsstrategie ist für Gewinnmitnahmen und Stop-Loss verantwortlich und führt Stop-Loss zu bestimmten Zeiten aus. Das endgültige Handelssignal basiert hauptsächlich auf der ersten Handelsstrategie, wird jedoch durch die zweite Strategie eingeschränkt und kann bei Bedarf vollständig durch die dritte Strategie gesteuert werden.
Oder Benutzer können ganz einfach eine „Komitee“-Strategie formulieren, bei der mehrere Strategien unabhängig voneinander Handelsentscheidungen in einer umfassenden Strategie treffen. Das endgültige Handelssignal wird vom „Komitee“, das sich aus allen Unterstrategien zusammensetzt, durch Abstimmung festgelegt, die mit einfacher Mehrheit, absoluter Mehrheit, gewichteten Abstimmungsergebnissen usw. erfolgen kann.
Bei der oben genannten Strategiekombination ist jede einzelne Handelsstrategie einfach und leicht zu definieren, während ihre Kombination eine größere Rolle spielen kann. Gleichzeitig ist jede Teilstrategie unabhängig und ermöglicht die freie Kombination zu komplexen, umfassenden Handelsstrategien. Dadurch kann vermieden werden, dass immer wieder Strategien entwickelt werden müssen; Stattdessen kann durch einfaches Umordnen und Neudefinieren der Kombination von Unterstrategien schnell eine Reihe komplexer, umfassender Handelsstrategien entstehen. Es wird davon ausgegangen, dass dies die Effizienz beim Aufbau von Handelsstrategien erheblich verbessert und den Zyklus verkürzt. Zeit ist Geld.
In einem Operator-Objekt können die von verschiedenen Strategien generierten Handelssignale jedoch zu unterschiedlichen Handelspreisen funktionieren. Beispielsweise generieren einige Strategien Handelssignale für den Eröffnungskurs, während andere Handelsstrategien für den Schlusskurs generieren. Daher sollten unterschiedliche Handelspreissignale nicht gemischt werden. Aber abgesehen davon sollten alle Signale gemischt werden, solange die Handelspreise gleich sind.
Beim Mischen von Handelssignalen handelt es sich um verschiedene Operationen oder Funktionen an Handelssignalen, die von einfachen logischen Operationen und Addition/Subtraktion bis hin zu komplexen benutzerdefinierten Funktionen reichen. Solange die Funktion auf ein Ndarray angewendet werden kann, kann sie theoretisch zum Mischen von Handelssignalen verwendet werden, sofern das endgültige Ausgabehandelssignal aussagekräftig ist.
Definieren der Strategiekombinationsmethode blender
Die Kombinationsstrategie von „qteasy“ wird von „blender“ implementiert. Wenn in einem „Operator“ die Anzahl der Strategien 1 überschreitet, muss ein „Blender“ definiert werden. Wenn kein „Blender“ explizit definiert ist und die Anzahl der Strategien 1 überschreitet, erstellt „qteasy“ beim Ausführen von „Operator“ einen Standard-„Blender“. Um jedoch den korrekten Betrieb mehrerer Strategien sicherzustellen, müssen Benutzer den „Mixer“ selbst definieren.
„Blender-Ausdruck“ ist ein benutzerdefinierter Kombinationsausdruck, der die Kombinationsmethode verschiedener Handelsstrategien bestimmt. Dieser Kombinationsausdruck verwendet arithmetische Operatoren, logische Operatoren, Funktionen und andere Symbole, um anzugeben, wie Strategiesignale kombiniert werden. Der „blender“-Ausdruck kann die folgenden Elemente enthalten:
Der Ausdruck blender unterstützt die folgenden Funktionen:
Element |
Beispiele |
Beschreibung |
|---|---|---|
Strategienummer |
|
Eine Zeichenfolge, die mit „s“ beginnt und mit einer Zahl endet, wobei die Zahl der Index der Strategie im „Operator“ ist und das von dieser Strategie generierte Handelssignal darstellt |
Zahlen |
|
Jede gültige Zahl, eine Zahl, die an Ausdrucksoperationen beteiligt ist |
Betreiber |
|
Arithmetische Operatoren wie |
Logische Operatoren |
|
Unterstützt „&“ |
Funktionen |
|
Die unterstützten Funktionen sind in der folgenden Tabelle aufgeführt |
Perenthesen |
|
Kombinierte Operationen |
blender示例
Wenn es drei Handelsstrategien in einem „Operator“-Objekt (mit den Indizes 0/1/2) gibt, sind die folgenden Möglichkeiten zur Definition von „blender“ alle gültig und können verwendet werden. Verwenden Sie gleichzeitig „Operator.set_blender()“, um „blender“ festzulegen:
Blender-Ausdruck mithilfe arithmetischer Operatoren definieren
's0 + s1 + s2'
Die durch die drei Handelsstrategien erzeugten Handelssignale werden addiert, um das endgültige Handelssignal zu bilden. Wenn das Ergebnis von Strategie 0 ein Kauf von 10 % ist, das Ergebnis von Strategie 1 ein Kauf von 10 % und das Ergebnis von Strategie 2 ein Kauf von 30 %, dann ist das Endergebnis ein Kauf von 50 %.
Blender-Ausdruck mithilfe logischer Operatoren definieren:
's0 and s1 and s2'
Zeigt an, dass ein Handelssignal nur dann gebildet wird, wenn die Handelsstrategien 1, 2 und 3 alle Handelssignale haben. Wenn beispielsweise das Ergebnis von Strategie 1 ein Kauf ist, das Ergebnis von Strategie 2 ein Kauf ist und Strategie 3 kein Handelssignal hat, dann ist das Endergebnis kein Handelssignal.
Funktionen und Klammern können auch in den Blender-Ausdruck eingefügt werden:
'max(s0, s1) + s2'
Der Maximalwert der Ergebnisse der Strategien 1 und 2 wird zum Ergebnis der Strategie 3 addiert, um das endgültige Handelssignal zu bilden. Wenn das Ergebnis von Strategie 1 ein Kauf von 10 % ist, das Ergebnis von Strategie 2 ein Kauf von 20 % und das Ergebnis von Strategie 3 ein Kauf von 30 %, dann ist das Endergebnis ein Kauf von 50 %.
Dieselbe Strategie kann im Blender-Ausdruck mehr als einmal vorkommen, und es können auch reine Zahlen vorkommen:
'(0.5 * s0 + 1.0 * s1 + 1.5 * s2) / 3 * min(s0, s1, s2)'
Der obige Mixer-Ausdruck bedeutet: Berechnen Sie zunächst den gewichteten Durchschnitt der drei Strategiesignale (mit den Gewichtungen 0,5, 1,0 und 1,5) und multiplizieren Sie ihn dann mit dem Mindestwert der drei Signale.
Funktionsparameter im Blender-Ausdruck werden im Funktionsnamen definiert:
'clip_-0.5_0.5(s0 + s1 + s2) + pos_2_0.2(s0, s1, s2)'
Der obige Blender-Ausdruck definiert zwei verschiedene Funktionsoperationen, und die Ergebnisse werden addiert, um das Endergebnis zu erhalten. Die erste Funktion ist eine Bereichsbeschneidungsfunktion, die die drei Sätze von Strategiesignalen addiert und die Signalwerte kleiner als -0,5 und größer als 0,5 schneidet, um das Berechnungsergebnis zu erhalten. Die zweite Funktion ist eine Positionsbeurteilungsfunktion, die die Zeiträume zählt, in denen die drei Signalsätze Positionen größer als 0,2 haben, und sie als „lang“ definiert. Anschließend wird die Anzahl der Strategien gezählt, die in jedem Zeitraum Long-Positionen vorschlagen. Wenn mehr als zwei Strategien Long-Positionen vorschlagen, wird eine vollständige Long-Position ausgegeben; andernfalls wird eine leere Position ausgegeben.
Der Ausdruck blender unterstützt die folgenden Funktionen:
Funktionen |
Ausdrücke |
Beschreibung |
|---|---|---|
abs |
|
Absolutwertfunktion |
avg |
|
Durchschnittswertfunktion |
avgpos |
|
Durchschnittliche kumulative Funktion |
ceil |
|
Deckenfunktion |
clip |
|
Clipping-Funktion |
combo |
|
Combo-Funktion |
committee |
|
Ausschussfunktion (entspricht der kumulativen Positionsfunktion) |
exp |
|
Exponentenfunktion |
floor |
|
Floor-Funktion |
log |
|
Logarithmusfunktion |
log10 |
|
Logarithmus-Basis-10-Funktion |
max |
|
Maximalwertfunktion |
min |
|
Minimalwertfunktion |
pos |
|
Kumulative Positionsfunktion |
position |
|
Kumulative Positionsfunktion |
pow |
|
Potenzfunktion |
power |
|
Potenzfunktion |
sqrt |
|
Quadratwurzelfunktion |
str |
|
Kumulative Stärkefunktion |
strength |
|
Kumulative Stärkefunktion |
sum |
|
Combo-Funktion |
unify |
|
Vereinheitlichungsfunktion |
vote |
|
Abstimmungsfunktion (entspricht der kumulativen Positionsfunktion) |
Mixer kann mit den folgenden Methoden eingestellt oder abgerufen werden
operator.set_blender(blender=None, price_type=None)
Übergeben Sie direkt einen Ausdruck, um den Mixer festzulegen, der automatisch analysiert und zum Kombinieren von Handelsstrategien verwendet wird.
operator.view_blender()
查看blender
Beispiele für die Verwendung von Mixern
Hier ist ein Beispiel, um die Funktionsweise des Mixers zu demonstrieren:
# 创建一个交易员对象,同时运行五个相同的dma交易策略,这些交易策略运行方式相同,但是设置不同的参数后,会产生不同的交易信号。我们通过不同的策略组合方式,得到不同的回测结果
op = qt.Operator('dma, dma, dma, dma, dma')
# 分别给五个不同的交易策略设置不同的策略参数,使他们产生不同的交易信号
op.set_parameter(stg_id=0, pars=(132, 200, 24))
op.set_parameter(stg_id=1, pars=(124, 187, 51))
op.set_parameter(stg_id=2, pars=(103, 81, 16))
op.set_parameter(stg_id=3, pars=(48, 111, 148))
op.set_parameter(stg_id=4, pars=(104, 127, 58))
# 第一种组合方式:加权平均方式:分别给每一个不同的策略设置不同的权重:
# s0: 权重0.8
# s0: 权重1.2
# s0: 权重2.0
# s0: 权重0.5
# s0: 权重1.5
# 将五个交易策略生成的交易信号加权平均后得到最终的交易信号
op.set_blender('(0.8*s0+1.2*s1+2*s2+0.5*s3+1.5*s4)/5')
# 运行策略
res = qt.run(op, mode=1)
# 得到结果如下:年化收益12.19,夏普率1.053
====================================
| |
| BACK TESTING RESULT |
| |
====================================
qteasy running mode: 1 - History back testing
time consumption for operate signal creation: 130.5ms
time consumption for operation back looping: 523.8ms
investment starts on 2016-04-05 00:00:00
ends on 2021-02-01 00:00:00
Total looped periods: 4.8 years.
-------------operation summary:------------
Sell Cnt Buy Cnt Total Long pct Short pct Empty pct
000300.SH 478 421 899 89.7% 0.0% 10.3%
Total operation fee: ¥ 2,615.40
total investment amount: ¥ 100,000.00
final value: ¥ 174,263.46
Total return: 74.26%
Avg Yearly return: 12.19%
Skewness: -0.31
Kurtosis: 10.31
Benchmark return: 65.96%
Benchmark Yearly return: 11.06%
------strategy loop_results indicators------
alpha: 0.007
Beta: 1.408
Sharp ratio: 1.053
Info ratio: 0.000
250 day volatility: 0.111
Max drawdown: 12.26%
peak / valley: 2019-04-19 / 2020-02-03
recovered on: 2020-07-06
===========END OF REPORT=============

# 第二种组合方式:将五个交易策略看成一个“委员会”,最终的持仓仓位由委员会投票决定:
# 当同一时间累计五个策略中至少三个输出多头满仓使,输出多头满仓,否则空仓
op.set_blender('pos_3_0(s0, s1, s2, s3, s4)')
# 运行策略
res = qt.run(op, mode=1)
# 得到结果如下:年化收益13.39,夏普率1.075
====================================
| |
| BACK TESTING RESULT |
| |
====================================
qteasy running mode: 1 - History back testing
time consumption for operate signal creation: 540.1ms
time consumption for operation back looping: 435.8ms
investment starts on 2016-04-05 00:00:00
ends on 2021-02-01 00:00:00
Total looped periods: 4.8 years.
-------------operation summary:------------
Sell Cnt Buy Cnt Total Long pct Short pct Empty pct
000300.SH 11 10 21 55.4% 0.0% 44.6%
Total operation fee: ¥ 585.88
total investment amount: ¥ 100,000.00
final value: ¥ 183,485.41
Total return: 83.49%
Avg Yearly return: 13.39%
Skewness: -0.43
Kurtosis: 14.75
Benchmark return: 65.96%
Benchmark Yearly return: 11.06%
------strategy loop_results indicators------
alpha: 0.046
Beta: 1.003
Sharp ratio: 1.075
Info ratio: 0.006
250 day volatility: 0.124
Max drawdown: 15.71%
peak / valley: 2019-04-19 / 2020-02-03
recovered on: 2020-07-31
===========END OF REPORT=============

# 第三种组合方式:同样是委员会策略,但输出满仓多头的投票门槛变为2票,即只要有两个策略认为输出多头即可
op.set_blender('pos_2_0(s0, s1, s2, s3, s4)')
# 运行策略
res = qt.run(op, mode=1)
# 得到结果如下:年化收益12.88,夏普率0.824
====================================
| |
| BACK TESTING RESULT |
| |
====================================
qteasy running mode: 1 - History back testing
time consumption for operate signal creation: 133.8ms
time consumption for operation back looping: 500.0ms
investment starts on 2016-04-05 00:00:00
ends on 2021-02-01 00:00:00
Total looped periods: 4.8 years.
-------------operation summary:------------
Sell Cnt Buy Cnt Total Long pct Short pct Empty pct
000300.SH 15 14 29 71.4% 0.0% 28.6%
Total operation fee: ¥ 707.30
total investment amount: ¥ 100,000.00
final value: ¥ 179,532.76
Total return: 79.53%
Avg Yearly return: 12.88%
Skewness: -0.45
Kurtosis: 10.45
Benchmark return: 65.96%
Benchmark Yearly return: 11.06%
------strategy loop_results indicators------
alpha: 0.029
Beta: 1.000
Sharp ratio: 0.824
Info ratio: 0.007
250 day volatility: 0.144
Max drawdown: 15.94%
peak / valley: 2018-01-24 / 2019-01-03
recovered on: 2019-02-25
===========END OF REPORT=============
