組み込まれた戦略

qteasy には 70 を超える取引戦略が組み込まれており、ユーザーはこれらを簡単に直接使用できます。同時に、qteasy は一連の取引戦略組み合わせメカニズムを提供し、ユーザーは複数の単純な取引戦略をより複雑な取引戦略に組み合わせることができます。ストラテジーの組み合わせ方法は柔軟に設定可能です。複数の単純な取引戦略を複雑な戦略に組み合わせた後、戦略最適化ツールを使用して、複雑な戦略全体の最適なパラメーターを検索することもできます。

このチュートリアルでは、組み込みの取引戦略の使用方法、戦略の組み合わせ方法、複雑な戦略を実現するための組み合わせルールの設定方法、戦略の最適化方法を学びます。

組み込まれた戦略

qt.get_built_in_strategy(id)

qt.built_in_list(stg_id=None)

上記の 3 つのメソッドの出力は同じで、すべての組み込み取引戦略が辞書付きでリストされます。ここで、キーは取引戦略の ID、値は取引戦略オブジェクトです。 stg_id が指定されている場合、指定された取引戦略の詳細情報が出力されます。例えば:

# 获取内置交易策略的清单
stg_list = qt.built_ins('dma')

次の情報が出力されます。

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)]
策略不支持参考数据,不支持交易数据

組み込みの取引戦略は、qteasy の ID から直接取得できます。

qt.get_built_in_strategy() を使用して取引戦略を取得する以外に、Operator オブジェクトの作成時に組み込み取引戦略 ID をパラメーターとして渡して取引戦略を直接作成することもできます。

# 获取内置交易策略的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']

以下の組み込み取引戦略が qteasy によってサポートされています。

ID

名前

説明

crossline

TimingCrossline

クロスライン タイミング戦略クラス。長移動平均と短移動平均のクロスオーバーを使用して長短の状態を決定します。
1.短期移動平均が長期移動平均を上回り、距離が l*m% より大きい場合、目標位置を 1
2 に設定します。短期移動平均が長期移動平均を下回り、距離が l*m% より大きい場合、目標位置を -1 に設定します
3。長移動平均と短移動平均の間の距離が l*m% 以下の場合、ポジションターゲットを 0 に設定します。

macd

TimingMACD

MACD タイミング戦略クラス。MACD 移動平均戦略を使用してターゲット ポジション パーセンテージを生成します。
1. MACD値が0より大きい場合、ポジションターゲットを1
2に設定します。 MACD値が0未満の場合、ポジションターゲットを0に設定します

dma

TimingDMA

DMA タイミング戦略
1. DMA が AMA より上にある場合、ポジション間隔は長くなります。つまり、DMA ラインが AMA ラインを下から上に横切るとき、出力は 1
2 になります。 DMA が AMA を下回る場合、ポジション間隔は短くなります。つまり、DMA ラインが AMA ラインを上から下に横切ると、出力は 0 になります。

trix

TimingTRIX

TRIX タイミング戦略、株価の 3 重平滑指数移動平均価格を長短の判断に使用する:
価格の 3 重平滑指数移動平均価格 TRIX を計算し、M 日 TRIX の移動平均を計算します。
1. TRIX が MATRIX より上の場合、位置目標を 1
2 に設定します。 TRIX が MATRIX を下回る場合、位置ターゲットを -1 に設定します

cdl

TimingCDL

CDL タイミング戦略、K ライン チャートの要件を満たす cdldoji パターンを見つけます。
履歴データ ウィンドウに表示される cdldoji パターン (0 ~ 100 の一致度) を検索し、それを加算して /100 にし、一致する量を取引シグナルとして使用して、同等の cdldoji 一致量を計算します。

bband

TimingBBand

ボリンジャーバンド取引戦略では、株価とボリンジャーバンドの上下バンドの関係に基づいてロングポジションとショートポジションを決定します。取引シグナルは、価格が上下のバンドの上または下を横切るときに生成されます。ボリンジャーバンドの移動平均線タイプは選択できません

s-bband

SoftBBand

ボリンジャー バンド プログレッシブ トレーディング戦略では、株価とボリンジャー バンドの上下のバンドとの関係に基づいてロング ポジションとショート ポジションを決定します。売買シグナルは一度に発生するのではなく、売買の際に徐々に増加していきます。 BBAND を計算し、価格が BBAND の上限または下限バンドを超えているかどうかを確認します。
1.価格が上限バンドよりも大きい場合、毎日 10% の割合の買い取引シグナルが生成されます。
2.価格が下限バンドよりも低い場合、毎日 33% の割合で売り取引シグナルが生成されます。

sarext

TimingSAREXT

SAR 戦略では、インジケーターが 0 より大きい場合に買いシグナルが発行され、インジケーターが 0 より小さい場合に売りシグナルが発行されます。

ssma

SCRSSMA

単一移動平均クロスオーバー戦略 - SMA 移動平均(単純移動平均):株価と SMA 移動平均の相対位置に応じてポジション比率を設定

sdema

SCRSDEMA

単一移動平均クロスオーバー戦略 - DEMA 移動平均 (二重指数平滑移動平均): 株価と DEMA 移動平均の相対位置に応じてポジション比率を設定します。

sema

SCRSEMA

単一移動平均クロスオーバー戦略 - EMA移動平均(指数平滑移動平均):株価とEMA移動平均の相対位置に応じてポジション比率を設定

sht

SCRSHT

単一移動平均クロスオーバー戦略 - HT (ヒルベルト変換瞬間トレンドライン): 株価と HT ラインの相対位置に応じてポジション比率を設定します。

skama

SCRSKAMA

単一移動平均クロスオーバー戦略 - KAMA 移動平均 (カウフマン適応移動平均): 株価と KAMA 移動平均の相対位置に応じてポジション比率を設定します。

smama

SCRSMAMA

単一移動平均クロスオーバー戦略 - MAMA 移動平均 (MESA 適応移動平均): 株価と MAMA 移動平均の相対位置に応じてポジション比率を設定します。

st3

SCRST3

単一移動平均クロスオーバー戦略 - T3 移動平均 (三重指数平滑移動平均): 株価と T3 移動平均の相対位置に応じてポジション比率を設定します。

stema

SCRSTEMA

単一移動平均クロスオーバー戦略 - TEMA移動平均(三重指数平滑移動平均):株価とTEMA移動平均の相対位置に応じてポジション比率を設定

strima

SCRSTRIMA

単一移動平均クロスオーバー戦略 - TRIMA 移動平均 (三重指数平滑移動平均): 株価と TRIMA 移動平均の相対位置に応じてポジション比率を設定します。

swma

SCRSWMA

単一移動平均クロスオーバー戦略 - WMA 移動平均 (加重移動平均): 株価と WMA 移動平均の相対位置に応じてポジション比率を設定します。

dsma

DCRSSMA

ダブル移動平均クロスオーバー戦略 - SMA 移動平均 (単純移動平均):
SMA 移動平均の計算ルールに基づいて高速移動平均と低速移動平均を生成し、高速移動平均と低速移動平均の相対位置に応じて位置比率を設定します。

ddema

DCRSDEMA

ダブル移動平均クロスオーバー戦略 - SMA 移動平均 (単純移動平均):
DEMA 移動平均の計算ルールに基づいて高速移動平均と低速移動平均を生成し、高速移動平均と低速移動平均の相対位置に応じて位置比率を設定します。

dema

DCRSEMA

ダブル移動平均クロスオーバー戦略 - SMA 移動平均(単純移動平均):
EMA 移動平均の計算ルールに基づいて高速移動平均と低速移動平均を生成し、高速移動平均と低速移動平均の相対位置に応じてポジション比率を設定します。

dkama

DCRSKAMA

ダブル移動平均クロスオーバー戦略 - SMA 移動平均 (単純移動平均):
KAMA 移動平均の計算ルールに基づいて高速移動平均と低速移動平均を生成し、高速移動平均と低速移動平均の相対位置に応じて位置比率を設定します。

dmama

DCRSMAMA

ダブル移動平均クロスオーバー戦略 - SMA 移動平均 (単純移動平均):
MAMA 移動平均の計算ルールに基づいて高速移動平均と低速移動平均を生成し、高速移動平均と低速移動平均の相対位置に応じて位置比率を設定します。

dt3

DCRST3

ダブル移動平均クロスオーバー戦略 - SMA 移動平均 (単純移動平均):
T3 移動平均の計算ルールに基づいて高速移動平均と低速移動平均を生成し、高速移動平均と低速移動平均の相対位置に応じて位置比率を設定します。

dtema

DCRSTEMA

ダブル移動平均クロスオーバー戦略 - SMA 移動平均 (単純移動平均):
TEMA 移動平均の計算ルールに基づいて高速移動平均と低速移動平均を生成し、高速移動平均と低速移動平均の相対位置に応じて位置比率を設定します。

dtrima

DCRSTRIMA

ダブル移動平均クロスオーバー戦略 - SMA 移動平均 (単純移動平均):
TRIMA 移動平均の計算ルールに基づいて高速移動平均と低速移動平均を生成し、高速移動平均と低速移動平均の相対位置に応じて位置比率を設定します。

dwma

DCRSWMA

ダブル移動平均クロスオーバー戦略 - SMA 移動平均 (単純移動平均):
WMA 移動平均の計算ルールに基づいて高速移動平均と低速移動平均を生成し、高速移動平均と低速移動平均の相対位置に応じて位置比率を設定します。

slsma

SLPSMA

スロープトレード戦略 - SMA移動平均(単純移動平均):
SMAの計算ルールに基づいて移動平均を生成し、移動平均の傾きに応じてポジション比率目標を設定

sldema

SLPDEMA

スロープトレード戦略 - DEMA移動平均(二重指数平滑移動平均):
DEMAの計算ルールに基づいて移動平均を生成し、移動平均の傾きに応じてポジション比率目標を設定します。

slema

SLPEMA

スロープトレード戦略 - EMA移動平均(指数平滑移動平均):
EMA計算ルールに基づいて移動平均を生成し、移動平均の傾きに応じてポジション比率目標を設定

slht

SLPHT

スロープトレード戦略 - HT移動平均(ヒルベルト変換 - 瞬間トレンドライン):
HT計算ルールに基づいて移動平均を生成し、移動平均の傾きに応じてポジション比率目標を設定します。

slkama

SLPKAMA

スロープトレード戦略 - KAMA移動平均(カウフマン適応移動平均):
KAMA計算ルールに基づいて移動平均を生成し、移動平均の傾きに応じてポジション比率目標を設定します。

slmama

SLPMAMA

スロープトレード戦略 - MAMA移動平均(MESA適応型移動平均):
MAMA計算ルールに基づいて移動平均を生成し、移動平均の傾きに応じてポジション比率目標を設定

slt3

SLPT3

スロープトレード戦略 - T3移動平均(三重指数平滑移動平均):
T3計算ルールに基づいて移動平均を生成し、移動平均の傾きに応じてポジション比率目標を設定します。

sltema

SLPTEMA

スロープトレード戦略 - TEMA移動平均(三重指数平滑移動平均):
TEMA計算ルールに基づいて移動平均を生成し、移動平均の傾きに応じてポジション比率目標を設定します。

sltrima

SLPTRIMA

スロープトレード戦略 - TRIMA移動平均(三重指数平滑移動平均):
TRIMA計算ルールに基づいて移動平均を生成し、移動平均の傾きに応じてポジション比率目標を設定します。

slwma

SLPWMA

スロープトレード戦略 - WMA移動平均(加重移動平均):
WMAの計算ルールに基づいて移動平均を生成し、移動平均の傾きに応じてポジション比率目標を設定します。

adx

ADX

ADX 指標 (平均方向変動指数) 銘柄選択戦略:
ADX 指標に基づいて、現在のトレンドの強さを判断し、トレンドの強さに基づいて取引シグナルを生成します
1. ADXが25より大きい場合は上昇トレンドと判断し、ポジション比率を1
2とします。 ADXが20~25の場合はニュートラルトレンドと判断し、ポジション比率を0
3とします。 ADXが20未満の場合は下降トレンドと判断し、ポジション比率を-1とします。

apo

APO

APO インジケーター (絶対価格オシレーター) 銘柄選択戦略:
APO インジケーターに基づいて、現在の株価の動きの強気トレンドと弱気トレンドを判断し、トレンドに基づいて取引シグナルを生成します
1. APOが0より大きい場合は強気相場トレンドと判断し、ポジション比率を1
2に設定します。 ADXが0未満の場合は弱気相場トレンドと判断し、ポジション比率を-1とします。

aroon

AROON

AROON 指標の銘柄選択戦略:
AROON 指標のトレンドの強さに基づいて、強いロング/ショートと弱いロング/ショートを出力します
1. UPがDOWNより大きい場合、弱ロングを出力
2. UPがDOWN以下の場合、弱ショートを出力
3. UPが70以上、DOWNが30未満の場合、強ロングを出力
4. UP が 30 未満、DOWN が 70 を超える場合、出力ストロングショート

aroonosc

AROONOSC

AROON オシレーターの銘柄選択戦略:
AROONOSC が 0 より大きい場合、価格トレンドが上昇傾向にあることを示し、逆の場合は下降傾向を示します。絶対値が50を超えると強い傾向を示します
1. AROONOSCが0より大きい場合、弱いロングを出力
2. AROONOSCが0未満の場合、ウィークショートを出力
3. AROONOSCが50以上の場合、強ロングを出力
4. AROONOSCが-50未満の場合、ストロングショートを出力

cci

CCI

CCI (コモディティ チャネル インデックス) 銘柄選択戦略:
CCI コモディティ チャネル インデックスは、現在の株価が売られすぎか買われすぎの範囲にあるかを判断するために使用されます。この戦略では、この指標を使用して投資ポジション目標を生成します
1. CCIが0より大きい場合、弱いロングを出力
2. CCIが0未満の場合、弱ショートを出力
3. CCIが50以上の場合、ストロングロングを出力
4. CCIが-50未満の場合、出力ストロングショート

cmo

CMO

CMO (シャンデ モメンタム オシレーター) 銘柄選択戦略:
CMO は、-100 ~ 100 の間で変動するモメンタム指標です。現在の株価が売られすぎか買われすぎの範囲にあるかを判断するために使用されます。この戦略では、この指標を使用して投資ポジション目標を生成します
1. CMOが0より大きい場合、弱いロングを出力
2. CMOが0未満の場合、ウィークショートを出力
3. CMOが50以上の場合、ストロングロングを出力
4. CMOが-50未満の場合、出力ストロングショート

macdext

MACDEXT

MACDEXT (Extendec MACD) 銘柄選択戦略:
この戦略は MACD インジケーターを使用してポジションターゲットを生成しますが、標準の MACD とは異なり、MACDEXT のファースト、スロー、およびシグナル移動平均タイプを選択できます
1。 hist>0の場合、longを出力
2. hist<0の場合はshortを出力

mfi

MFI

MFI (マネー フロー インデックス) 銘柄選択戦略:
MFI インデックスは、株価が買われすぎか売られすぎの状態かを判断するために使用されます。この戦略では、MFI インジケーターを使用して取引シグナルを生成します
1. MFI>20の場合、10%の買い取引シグナルを継続的に生成
2. MFI>80の場合、継続的に30%の売り取引シグナルを生成し、保有株の売却を継続します。

di

DI

DI (ディレクトリ インジケーター) 取引戦略:
DI インジケーターには、それぞれ価格の上昇トレンドと下降トレンドの強さを表すマイナスの方向性指標とプラスの方向性指標が含まれます。この戦略は±DIインジケーターを使用して取引シグナルを生成します
1. +DI > -DIの場合、位置目標を1
2に設定します。 +DI < -DI の場合、位置目標を -1 に設定します

dm

DM

DM (Directional Movement) トレーディング戦略:
DM インジケーターには、それぞれ価格の上昇トレンドと下降トレンドを表す、マイナスの方向性の動きインジケーターとプラスの方向性の動きインジケーターが含まれます。この戦略は、±DM インジケーターを使用して取引シグナルを生成します
1. +DM > -DMの場合、位置目標を1
2に設定します。 +DM < -DMの場合、位置目標を-1に設定します
3.それ以外の場合は、位置目標を 0 に設定します。

mom

MOM

MOM (モメンタム インジケーター) 取引戦略:
MOM インジケーターは、価格の上昇トレンドまたは下降トレンドの強さを識別するために使用できます。現在の価格が N 日前の価格より高い場合、MOM はプラスになります。それ以外の場合はマイナスです。
1. MOM > 0の場合、位置目標を1
2に設定します。 MOM < 0 の場合、位置目標を -1 に設定します。
3.それ以外の場合は、位置目標を 0 に設定します。

ppo

PPO

PO (パーセント価格オシレーター) 取引戦略:
PPO インジケーターは、高速移動平均と低速移動平均の間のパーセンテージの差を表し、価格変動傾向を判断するために使用されます。長移動平均と短移動平均の計算期間と移動平均の種類はいずれも戦略パラメータです。
1. PPO > 0 の場合、位置目標を 1
2 に設定します。 PPO < 0 の場合、位置目標を -1 に設定します。
3.それ以外の場合は、位置目標を 0 に設定します。

rsi

RSI

RSI (相対力指数) 取引戦略:
RSI 指標は、現在の株価が売られすぎか買われすぎの状態かを判断するために、最近の価格変動の大きさを測定します。
1. RSI > ulimの場合、位置目標を1
2に設定します。 RSI < llim の場合、位置目標を -1 に設定します
3。それ以外の場合は、位置目標を 0 に設定します。

stoch

STOCH

STOCH (確率的インジケーター) 取引戦略:
STOCH インジケーターは価格変化の勢いを測定し、勢いの大きさが価格トレンドを決定し、比例した売買シグナルを生成します。
1. k > 80の場合、段階的な売りシグナルが生成され、各サイクルで保有株の30%が売却されます。
2. k < 20 の場合、段階的な買いシグナルが生成され、各サイクルで総投資額の 10% が購入されます。

stochf

STOCHF

STOCHF (Stochastic Fast Indicator) 取引戦略:
STOCHF インジケーターは、価格変化の勢いを測定します。 STOCH 戦略と同様に、高速確率指標を使用して価格トレンドを判断し、比例した売買シグナルを生成します。
1. k > 80の場合、段階的な売りシグナルが生成され、各サイクルで保有株の30%が売却されます。
2. k < 20 の場合、段階的な買いシグナルが生成され、各サイクルで総投資額の 10% が購入されます。

stochrsi

STOCHRSI

STOCHRSI (Stochastic Relative Strength Index) 取引戦略:
STOCHRSI 指標は、価格変化の勢いを測定します。この指標は 0 と 1 の間で変動し、価格トレンドの相対的な強さを示し、比例した売買シグナルを生成します。
1. k > 0.8の場合、段階的な売りシグナルが生成され、各サイクルで保有株の30%が売却されます。
2. k < 0.2 の場合、段階的な買いシグナルが生成され、各サイクルで総投資額の 10% が購入されます。

ultosc

ULTOSC

ULTOSC (アルティメット オシレーター インジケーター) トレーディング戦略:
ULTOSC インジケーターは、3 つの異なるタイム スパンを通じて価格のモメンタムを計算し、さまざまなモメンタム間の偏差値に基づいてトレーディング シグナルを生成します。
1. ULTOSC > u の場合、段階的な売りシグナルが生成され、各サイクルで保有株の 30% が売却されます。
2. ULTOSC < 1 の場合、段階的な買いシグナルが生成され、各サイクルで総投資額の 10% が購入されます。

willr

WILLR

WILLR (William's %R) 取引戦略:
WILLR インジケーターは、株価が現在買われ過ぎか売られ過ぎの範囲にあるかを計算するために使用され、取引シグナルの生成に使用されます。
1. WILLR > -l の場合、段階的な売りシグナルが生成され、各サイクルで保有株の 30% が売却されます。
2. WILLR < -u の場合、段階的な買いシグナルが生成され、各サイクルで総投資額の 10% が購入されます。

signal_none

SignalNone

空の取引シグナル戦略: 取引シグナルを生成しない戦略

sellrate

SellRate

変化率売りシグナル戦略:価格の変化率が閾値を超えた場合に売りシグナルを生成
1.変化 > 0 で日次増加量が変化より大きい場合、-1 の売りシグナルが生成されます
2.変化が 0 未満で、日次の減少が変化よりも大きい場合、-1 の売りシグナルが生成されます。

buyrate

BuyRate

変化率買いシグナル戦略:価格の変化率がしきい値を超えた場合、買いシグナルが生成されます
1.変化 > 0 で、毎日の増加が変化よりも大きい場合、1 の買いシグナルが生成されます。
2.変化が 0 未満で、日次減少が変化よりも大きい場合、1 買いシグナルが生成されます。

long

TimingLong

シンプルなタイミング戦略、歴史的期間全体でロングポジションを固定

short

TimingShort

シンプルなタイミング戦略、歴史的期間全体でショートポジションを固定

zero

TimingZero

シンプルなタイミング戦略、歴史的期間全体で空のポジションを固定

all

SelectingAll

過去の株式プール内のすべての銘柄を選択し、投資比率が均等に分散される

select_none

SelectingNone

過去の株式プールから株式を選択しないと、投資ポジションは 0 になります。

random

SelectingRandom

指定された比率に従って各履歴セグメントの銘柄数をランダムに選択する (p<1 の場合)、または指定された数の銘柄をランダムに選択する (p>=1 の場合) 投資ポートフォリオに入力し、投資比率が均等に配分される

finance

SelectingAvgIndicator

一定期間の財務指標の平均値に基づいて銘柄を選択する 銘柄選択の基本戦略:銘柄の過去の指標の平均値を銘柄選択要素として使用します。因子並べ替えパラメーターを戦略パラメーターとして渡して、戦略のデータ型を変更できます。さまざまな過去のデータに基づいて銘柄を選択します。銘柄選択パラメータは pars を通じて渡すことができます。

ndaylast

SelectingNDayLast

N日前の株価やデータ指標を銘柄選択要素として銘柄を選択します

ndayavg

SelectingNDayAvg

過去N日間の株価やデータ指標の平均値を銘柄選択要素として銘柄を選択します

ndayrate

SelectingNDayRateChange

過去 N 日間の株式の価格またはデータ指標の変化率に基づいて銘柄を選択します。

ndaychg

SelectingNDayChange

過去N日間の株価やデータ指標の変動値を銘柄選択要素として銘柄を選択します

ndayvol

SelectingNDayVolatility

過去N日間の株価変動率を銘柄選択要素として銘柄を選択します

戦略パラメーターの意味やシグナル生成ルールなど、各組み込み取引戦略の詳細な説明を確認する必要がある場合は、各取引戦略のドキュメント文字列を確認できます。

例えば:

qt.built_ins('Crossline')

ご覧いただけます

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:     

組み込みの取引戦略に関する詳細情報は、「?」を使用して ipython などの対話型 Python 環境でも表示できます。次に例を示します。

>>> qt.built_in.SelectingNDayRateChange?

以下を確認できます。

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:    

複数の戦略と戦略の組み合わせ

qteasy では、Operator トレーダー オブジェクトは複数の取引戦略を同時に実行できます。これらの取引戦略は、運用中にそれぞれの履歴データを独立して抽出し、異なる取引シグナルを生成します。これらの取引シグナルは、統合執行のために一連の取引シグナルに結合されます。

この機能を使用すると、ユーザーは 1 つのトレーダー オブジェクトで異なる焦点を当てた複数の取引戦略を実行できます。たとえば、1 つの取引戦略は株価を監視し、株価に基づいて選択シグナルを生成します。一方、2 番目の取引戦略は市場全体の傾向を監視し、それに基づいて全体的なポジションを決定します。 3 番目の取引戦略は、利益確定とストップロスを担当し、特定の時間にストップロスを実行します。最終的な取引シグナルは主に最初の取引戦略に基づいていますが、2 番目の戦略によって抑制され、必要に応じて 3 番目の戦略によって完全に制御できます。

あるいは、ユーザーは、複数の戦略が独立して包括的な戦略で取引の意思決定を行う「委員会」戦略を簡単に策定できます。最終的な取引シグナルは、すべてのサブ戦略で構成される「委員会」によって投票を通じて決定されます。投票は、単純多数決、絶対多数決、加重投票結果などによって行われます。

上記の戦略の組み合わせでは、それぞれの独立した取引戦略はシンプルで定義が簡単ですが、その組み合わせはより大きな役割を果たすことができます。同時に、各サブ戦略は独立しているため、複雑で包括的な取引戦略に自由に組み合わせることができます。これにより、戦略を繰り返し開発する必要がなくなります。代わりに、サブ戦略の組み合わせを再配置して再定義するだけで、一連の複雑で包括的な取引戦略を迅速に構築できます。これにより、取引戦略の構築効率が大幅に向上し、サイクルが短縮されると考えられています。時は金なり。

ただし、Operator オブジェクトでは、異なる戦略によって生成された取引シグナルが異なる取引価格で動作する可能性があります。たとえば、一部の戦略は始値取引シグナルを生成しますが、他の戦略は終値取引戦略を生成します。したがって、異なる取引価格シグナルを混合すべきではありません。しかし、それとは別に、取引価格が同じである限り、すべてのシグナルが混在するはずです。

取引シグナルのブレンドとは、単純な論理演算や加算/減算から複雑なカスタム関数に至るまで、取引シグナルに対するさまざまな演算または関数を意味します。この関数を ndarray に適用できる限り、最終出力の取引シグナルが意味のあるものである限り、理論的には取引シグナルをブレンドするために使用できます。

戦略組み合わせ方法の定義 blender

qteasy の組み合わせ戦略は blender によって実装されます。 Operator で、ストラテジーの数が 1 を超える場合は、blender を定義する必要があります。 blender が明示的に定義されておらず、ストラテジーの数が 1 を超える場合、qteasy は、Operator の実行時にデフォルトの blender を作成します。ただし、複数の戦略を正しく動作させるには、ユーザーが自分で blender を定義する必要があります。

blender expression は、さまざまな取引戦略の組み合わせ方法を決定するユーザー定義の組み合わせ式です。この結合式は、算術演算子、論理演算子、関数、およびその他のシンボルを使用して、ストラテジ信号の結合方法を指定します。 blender 式には次の要素を含めることができます。

blender 式は次の関数をサポートしています。

要素

説明

戦略番号

s1

「s」で始まり数字で終わる文字列。数字はOperator内のストラテジーのインデックスであり、このストラテジーによって生成された取引シグナルを表します。

数字

-1.35

任意の有効な数値、式演算に参加する数値

オペレーター

+

'+-*/^' のような算術演算子

論理演算子

and

`&をサポート

機能

sum()

サポートされている機能は次の表にリストされています。

かっこ

()

複合操作

blenderの例

Operator オブジェクト (インデックス 0/1/2) に 3 つの取引戦略がある場合、以下の blender の定義方法はすべて有効であり、使用できます。同時に、Operator.set_blender() を使用して blender を設定します。

算術演算子を使用した Blender 式の定義

's0 + s1 + s2'

3 つの取引戦略によって生成された取引シグナルが加算されて、最終的な取引シグナルが形成されます。戦略 0 の結果が 10% の購入、戦略 1 の結果が 10% の購入、戦略 2 の結果が 30% の購入である場合、最終結果は 50% の購入になります。

論理演算子を使用したブレンダー式の定義:

's0 and s1 and s2'

取引戦略 1、2、および 3 のすべてに取引シグナルがある場合にのみ取引シグナルが形成されることを示します。たとえば、戦略 1 の結果が買いで、戦略 2 の結果が買いで、戦略 3 に取引シグナルがない場合、最終結果は取引シグナルになりません。

Blender 式には関数と括弧も含めることができます。

'max(s0, s1) + s2'

戦略 1 と 2 の結果の最大値が戦略 3 の結果に加算されて、最終的な取引シグナルが形成されます。戦略 1 の結果が 10% の購入、戦略 2 の結果が 20% の購入、戦略 3 の結果が 30% の購入である場合、最終結果は 50% の購入になります。

同じ戦略が Blender 式で複数回出現する可能性があり、純粋な数値も出現する可能性があります。

'(0.5 * s0 + 1.0 * s1 + 1.5 * s2) / 3 * min(s0, s1, s2)'

上記のブレンダー式は次のことを示しています。 まず、3 つの戦略信号 (重み 0.5、1.0、および 1.5) の加重平均を計算し、次に 3 つの信号の最小値を乗算します。

Blender 式の関数パラメータは関数名で定義されます。

'clip_-0.5_0.5(s0 + s1 + s2) + pos_2_0.2(s0, s1, s2)'

上記のブレンダー式は 2 つの異なる関数演算を定義し、その結果が加算されて最終結果が得られます。最初の関数はレンジ クリッピング関数で、3 セットの戦略信号を加算し、-0.5 未満と 0.5 より大きい信号値をクリップして計算結果を取得します。 2 番目の関数は位置判定関数で、3 組の信号の位置が 0.2 より大きい期間をカウントし、それらを「長い」と定義します。次に、各期間でロングポジションを示唆する戦略の数をカウントします。 3 つ以上の戦略がロング ポジションを示唆する場合、完全なロング ポジションが出力されます。それ以外の場合は、空の位置を出力します。

blender 式は次の関数をサポートしています。

機能

説明

abs

abs(*signals)

絶対値関数
すべての取引シグナルの絶対値を計算
入力シグナルの数は無制限

avg

avg(*signals)

平均値機能
全取引シグナルの平均値を計算
入力シグナル数は無制限

avgpos

avgpos_N_T(*signals)

平均累積関数
売買シグナルがポジション目標シグナルの場合、同時に生成される空でないポジションシグナル(出力シグナル絶対値>T)の数をカウントします。ショート/ロング信号の数が N より大きい場合、すべてのショート/ロング信号の平均を出力します。それ以外の場合は、0 を出力します。
入力信号の数は無制限です

ceil

ceil(signal)

シーリング機能
売買シグナル切り上げ
売買シグナルは1つだけ入力可能

clip

clip_U_L(signal)

クリッピング関数
範囲を超えたシグナル値をクリップし、クリッピング範囲の上限と下限を関数名で定義
売買シグナルは1つだけ入力可能

combo

combo(*signals)

コンボ機能
全取引シグナルの合計を出力
入力シグナル数は無制限

committee

cmt_N_T(*signals)

委員会機能(累積ポジション機能に相当)
売買シグナルがポジション目標シグナルの場合、同時に発生する空でないポジションシグナル(出力シグナル絶対値>T)の数をカウントします。ロング/ショート信号の数が N より大きい場合、-1/1 を出力します。それ以外の場合は、0 を出力します。
入力信号の数は無制限です

exp

exp(signal)

指数関数
シグナルに対するeのべき乗を計算
取引シグナルは1つだけ入力可能

floor

floor(signal)

フロア関数
売買シグナル切り捨て
売買シグナルは1つだけ入力可能

log

log(signal)

対数関数
eを底とする対数値を計算します
売買シグナルは1つだけ入力可能

log10

log10(signal)

10を底とする対数関数
10を底とする対数値を計算します
売買シグナルは1つだけ入力可能

max

max(*signals)

最大値機能
全取引シグナルの最大値を計算
入力シグナル数は無制限

min

min(*signals)

最小値機能
全取引シグナルの最小値を計算
入力シグナル数は無制限

pos

pos_N_T(*signals)

累積ポジション機能
売買シグナルがポジション目標シグナルの場合、同時に生成される空でないポジションシグナル(出力信号絶対値>T)の数をカウントします。ロング/ショート信号の数が N より大きい場合、-1/1 を出力します。それ以外の場合は、0 を出力します。
入力信号の数は無制限です

position

position_N_T(*signals)

累積ポジション機能
売買シグナルがポジション目標シグナルの場合、同時に生成される空でないポジションシグナル(出力信号絶対値>T)の数をカウントします。ロング/ショート信号の数が N より大きい場合、-1/1 を出力します。それ以外の場合は、0 を出力します。
入力信号の数は無制限です

pow

pow(*signals)

べき乗関数
最初の取引シグナルを 2 番目の取引シグナルの累乗、つまり sig0^sig1 で計算します
入力シグナルの数は 2 つだけです

power

power(*signals)

べき乗関数
最初の取引シグナルを 2 番目の取引シグナルの累乗、つまり sig0^sig1 で計算します
入力シグナルの数は 2 つだけです

sqrt

sqrt(signal)

平方根関数
売買シグナルの平方根
売買シグナルは1つだけ入力可能

str

str_T(*signals)

累積強度関数
すべての取引シグナルを合計し、シグナル強度がTを超えた場合は1を出力、そうでない場合は0を出力
入力シグナルの数は無制限

strength

strength_T(*signals)

累積強度関数
すべての取引シグナルを合計し、シグナル強度がTを超えた場合は1を出力、そうでない場合は0を出力
入力シグナルの数は無制限

sum

sum(*signals)

コンボ機能
全取引シグナルの合計を出力
入力シグナル数は無制限

unify

unify(signal)

統合機能
取引シグナルを正規化し、各行の合計が1になるように同じ行の取引シグナルを比例的にスケーリングします
取引シグナルは1つだけ入力可能

vote

vote_N_T(*signals)

投票機能(累積ポジション機能に相当)
売買シグナルがポジション目標シグナルの場合、同時に生成される空でないポジションシグナル(出力信号絶対値>T)の数をカウントします。ロング/ショート信号の数が N より大きい場合、-1/1 を出力します。それ以外の場合は、0 を出力します。
入力信号の数は無制限です

Blender は、次のメソッドを使用して設定または取得できます。

operator.set_blender(blender=None, price_type=None)

式を直接渡してブレンダーを設定します。ブレンダーは自動的に解析され、取引戦略を組み合わせるために使用されます。

operator.view_blender()

ビューブレンダー

ブレンダーの使用例

以下は、Blender がどのように動作するかを示す例です。

# 创建一个交易员对象,同时运行五个相同的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=============

png

# 第二种组合方式:将五个交易策略看成一个“委员会”,最终的持仓仓位由委员会投票决定:
# 当同一时间累计五个策略中至少三个输出多头满仓使,输出多头满仓,否则空仓
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=============

png

# 第三种组合方式:同样是委员会策略,但输出满仓多头的投票门槛变为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=============

png