組み込まれた戦略
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 |
|
クロスライン タイミング戦略クラス。長移動平均と短移動平均のクロスオーバーを使用して長短の状態を決定します。 |
macd |
|
MACD タイミング戦略クラス。MACD 移動平均戦略を使用してターゲット ポジション パーセンテージを生成します。 |
dma |
|
DMA タイミング戦略 |
trix |
|
TRIX タイミング戦略、株価の 3 重平滑指数移動平均価格を長短の判断に使用する: |
cdl |
|
CDL タイミング戦略、K ライン チャートの要件を満たす cdldoji パターンを見つけます。 |
bband |
TimingBBand |
ボリンジャーバンド取引戦略では、株価とボリンジャーバンドの上下バンドの関係に基づいてロングポジションとショートポジションを決定します。取引シグナルは、価格が上下のバンドの上または下を横切るときに生成されます。ボリンジャーバンドの移動平均線タイプは選択できません |
s-bband |
SoftBBand |
ボリンジャー バンド プログレッシブ トレーディング戦略では、株価とボリンジャー バンドの上下のバンドとの関係に基づいてロング ポジションとショート ポジションを決定します。売買シグナルは一度に発生するのではなく、売買の際に徐々に増加していきます。 BBAND を計算し、価格が BBAND の上限または下限バンドを超えているかどうかを確認します。 |
sarext |
|
SAR 戦略では、インジケーターが 0 より大きい場合に買いシグナルが発行され、インジケーターが 0 より小さい場合に売りシグナルが発行されます。 |
ssma |
|
単一移動平均クロスオーバー戦略 - SMA 移動平均(単純移動平均):株価と SMA 移動平均の相対位置に応じてポジション比率を設定 |
sdema |
|
単一移動平均クロスオーバー戦略 - DEMA 移動平均 (二重指数平滑移動平均): 株価と DEMA 移動平均の相対位置に応じてポジション比率を設定します。 |
sema |
|
単一移動平均クロスオーバー戦略 - EMA移動平均(指数平滑移動平均):株価とEMA移動平均の相対位置に応じてポジション比率を設定 |
sht |
|
単一移動平均クロスオーバー戦略 - HT (ヒルベルト変換瞬間トレンドライン): 株価と HT ラインの相対位置に応じてポジション比率を設定します。 |
skama |
|
単一移動平均クロスオーバー戦略 - KAMA 移動平均 (カウフマン適応移動平均): 株価と KAMA 移動平均の相対位置に応じてポジション比率を設定します。 |
smama |
|
単一移動平均クロスオーバー戦略 - MAMA 移動平均 (MESA 適応移動平均): 株価と MAMA 移動平均の相対位置に応じてポジション比率を設定します。 |
st3 |
|
単一移動平均クロスオーバー戦略 - T3 移動平均 (三重指数平滑移動平均): 株価と T3 移動平均の相対位置に応じてポジション比率を設定します。 |
stema |
|
単一移動平均クロスオーバー戦略 - TEMA移動平均(三重指数平滑移動平均):株価とTEMA移動平均の相対位置に応じてポジション比率を設定 |
strima |
|
単一移動平均クロスオーバー戦略 - TRIMA 移動平均 (三重指数平滑移動平均): 株価と TRIMA 移動平均の相対位置に応じてポジション比率を設定します。 |
swma |
|
単一移動平均クロスオーバー戦略 - WMA 移動平均 (加重移動平均): 株価と WMA 移動平均の相対位置に応じてポジション比率を設定します。 |
dsma |
|
ダブル移動平均クロスオーバー戦略 - SMA 移動平均 (単純移動平均): |
ddema |
|
ダブル移動平均クロスオーバー戦略 - SMA 移動平均 (単純移動平均): |
dema |
|
ダブル移動平均クロスオーバー戦略 - SMA 移動平均(単純移動平均): |
dkama |
|
ダブル移動平均クロスオーバー戦略 - SMA 移動平均 (単純移動平均): |
dmama |
|
ダブル移動平均クロスオーバー戦略 - SMA 移動平均 (単純移動平均): |
dt3 |
|
ダブル移動平均クロスオーバー戦略 - SMA 移動平均 (単純移動平均): |
dtema |
|
ダブル移動平均クロスオーバー戦略 - SMA 移動平均 (単純移動平均): |
dtrima |
|
ダブル移動平均クロスオーバー戦略 - SMA 移動平均 (単純移動平均): |
dwma |
|
ダブル移動平均クロスオーバー戦略 - SMA 移動平均 (単純移動平均): |
slsma |
|
スロープトレード戦略 - SMA移動平均(単純移動平均): |
sldema |
|
スロープトレード戦略 - DEMA移動平均(二重指数平滑移動平均): |
slema |
|
スロープトレード戦略 - EMA移動平均(指数平滑移動平均): |
slht |
|
スロープトレード戦略 - HT移動平均(ヒルベルト変換 - 瞬間トレンドライン): |
slkama |
|
スロープトレード戦略 - KAMA移動平均(カウフマン適応移動平均): |
slmama |
|
スロープトレード戦略 - MAMA移動平均(MESA適応型移動平均): |
slt3 |
|
スロープトレード戦略 - T3移動平均(三重指数平滑移動平均): |
sltema |
|
スロープトレード戦略 - TEMA移動平均(三重指数平滑移動平均): |
sltrima |
|
スロープトレード戦略 - TRIMA移動平均(三重指数平滑移動平均): |
slwma |
|
スロープトレード戦略 - WMA移動平均(加重移動平均): |
adx |
|
ADX 指標 (平均方向変動指数) 銘柄選択戦略: |
apo |
|
APO インジケーター (絶対価格オシレーター) 銘柄選択戦略: |
aroon |
|
AROON 指標の銘柄選択戦略: |
aroonosc |
|
AROON オシレーターの銘柄選択戦略: |
cci |
|
CCI (コモディティ チャネル インデックス) 銘柄選択戦略: |
cmo |
|
CMO (シャンデ モメンタム オシレーター) 銘柄選択戦略: |
macdext |
|
MACDEXT (Extendec MACD) 銘柄選択戦略: |
mfi |
|
MFI (マネー フロー インデックス) 銘柄選択戦略: |
di |
|
DI (ディレクトリ インジケーター) 取引戦略: |
dm |
|
DM (Directional Movement) トレーディング戦略: |
mom |
|
MOM (モメンタム インジケーター) 取引戦略: |
ppo |
|
PO (パーセント価格オシレーター) 取引戦略: |
rsi |
|
RSI (相対力指数) 取引戦略: |
stoch |
|
STOCH (確率的インジケーター) 取引戦略: |
stochf |
|
STOCHF (Stochastic Fast Indicator) 取引戦略: |
stochrsi |
|
STOCHRSI (Stochastic Relative Strength Index) 取引戦略: |
ultosc |
|
ULTOSC (アルティメット オシレーター インジケーター) トレーディング戦略: |
willr |
|
WILLR (William's %R) 取引戦略: |
signal_none |
|
空の取引シグナル戦略: 取引シグナルを生成しない戦略 |
sellrate |
|
変化率売りシグナル戦略:価格の変化率が閾値を超えた場合に売りシグナルを生成 |
buyrate |
|
変化率買いシグナル戦略:価格の変化率がしきい値を超えた場合、買いシグナルが生成されます |
long |
|
シンプルなタイミング戦略、歴史的期間全体でロングポジションを固定 |
short |
|
シンプルなタイミング戦略、歴史的期間全体でショートポジションを固定 |
zero |
|
シンプルなタイミング戦略、歴史的期間全体で空のポジションを固定 |
all |
|
過去の株式プール内のすべての銘柄を選択し、投資比率が均等に分散される |
select_none |
|
過去の株式プールから株式を選択しないと、投資ポジションは 0 になります。 |
random |
|
指定された比率に従って各履歴セグメントの銘柄数をランダムに選択する (p<1 の場合)、または指定された数の銘柄をランダムに選択する (p>=1 の場合) 投資ポートフォリオに入力し、投資比率が均等に配分される |
finance |
|
一定期間の財務指標の平均値に基づいて銘柄を選択する 銘柄選択の基本戦略:銘柄の過去の指標の平均値を銘柄選択要素として使用します。因子並べ替えパラメーターを戦略パラメーターとして渡して、戦略のデータ型を変更できます。さまざまな過去のデータに基づいて銘柄を選択します。銘柄選択パラメータは pars を通じて渡すことができます。 |
ndaylast |
|
N日前の株価やデータ指標を銘柄選択要素として銘柄を選択します |
ndayavg |
|
過去N日間の株価やデータ指標の平均値を銘柄選択要素として銘柄を選択します |
ndayrate |
|
過去 N 日間の株式の価格またはデータ指標の変化率に基づいて銘柄を選択します。 |
ndaychg |
|
過去N日間の株価やデータ指標の変動値を銘柄選択要素として銘柄を選択します |
ndayvol |
|
過去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 式は次の関数をサポートしています。
要素 |
例 |
説明 |
|---|---|---|
戦略番号 |
|
「s」で始まり数字で終わる文字列。数字は |
数字 |
|
任意の有効な数値、式演算に参加する数値 |
オペレーター |
|
|
論理演算子 |
|
`&をサポート |
機能 |
|
サポートされている機能は次の表にリストされています。 |
かっこ |
|
複合操作 |
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 |
|
絶対値関数 |
avg |
|
平均値機能 |
avgpos |
|
平均累積関数 |
ceil |
|
シーリング機能 |
clip |
|
クリッピング関数 |
combo |
|
コンボ機能 |
committee |
|
委員会機能(累積ポジション機能に相当) |
exp |
|
指数関数 |
floor |
|
フロア関数 |
log |
|
対数関数 |
log10 |
|
10を底とする対数関数 |
max |
|
最大値機能 |
min |
|
最小値機能 |
pos |
|
累積ポジション機能 |
position |
|
累積ポジション機能 |
pow |
|
べき乗関数 |
power |
|
べき乗関数 |
sqrt |
|
平方根関数 |
str |
|
累積強度関数 |
strength |
|
累積強度関数 |
sum |
|
コンボ機能 |
unify |
|
統合機能 |
vote |
|
投票機能(累積ポジション機能に相当) |
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=============

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