Estrategias integradas
Hay más de 70 estrategias comerciales integradas en qteasy, que los usuarios pueden utilizar fácilmente y directamente. Al mismo tiempo, qteasy proporciona un conjunto de mecanismos de combinación de estrategias comerciales, y los usuarios pueden combinar múltiples estrategias comerciales simples en una estrategia comercial más compleja. El método de combinación de la estrategia se puede establecer de forma flexible. Después de combinar múltiples estrategias comerciales simples en una estrategia compleja, la herramienta de optimización de estrategias también se puede utilizar para buscar los mejores parámetros de toda la estrategia compleja.
En este tutorial, aprenderá cómo utilizar estrategias comerciales integradas, cómo combinar estrategias, cómo establecer reglas de combinación para lograr estrategias complejas y cómo optimizar estrategias.
Estrategias integradas
qt.get_built_in_strategy(id)
qt.built_in_list(stg_id=None)
El resultado de los tres métodos anteriores es el mismo, todos enumeran todas las estrategias comerciales integradas con un dict, donde la clave es el ID de la estrategia comercial y el valor es el objeto de la estrategia comercial. Si se proporciona stg_id, se imprime la información detallada de la estrategia comercial especificada. Por ejemplo:
# 获取内置交易策略的清单
stg_list = qt.built_ins('dma')
Se imprime la siguiente información:
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)]
策略不支持参考数据,不支持交易数据
La estrategia comercial incorporada se puede obtener directamente mediante el ID en qteasy
Además de utilizar qt.get_built_in_strategy() para obtener la estrategia comercial, el ID de la estrategia comercial incorporada también se puede pasar como parámetro al crear el objeto Operator para crear la estrategia comercial directamente.
# 获取内置交易策略的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 admite las siguientes estrategias comerciales integradas:
ID |
Nombre de la estrategia |
Nota |
|---|---|---|
crossline |
|
Clase de estrategia de sincronización de líneas cruzadas, que utiliza el cruce de promedios móviles largos y cortos para determinar el estado largo y corto |
macd |
|
Clase de estrategia de sincronización MACD, que utiliza la estrategia de media móvil MACD para generar el porcentaje de posición objetivo: |
dma |
|
Estrategia de sincronización DMA |
trix |
|
Estrategia de sincronización TRIX, utilizando el precio promedio móvil exponencial triple suavizado de los precios de las acciones para juicios largos y cortos: |
cdl |
|
Estrategia de sincronización CDL, encuentre el patrón cdldoji que cumpla con los requisitos en el gráfico de líneas K |
bband |
TimingBBand |
La estrategia comercial de las Bandas de Bollinger determina posiciones largas y cortas en función de la relación entre los precios de las acciones y las bandas superior e inferior de las Bandas de Bollinger. Las señales comerciales se generan cuando el precio cruza por encima o por debajo de las bandas superior e inferior. El tipo de media móvil de las Bandas de Bollinger no se puede seleccionar<br |
s-bband |
SoftBBand |
La estrategia de negociación progresiva de las Bandas de Bollinger determina posiciones largas y cortas en función de la relación entre los precios de las acciones y las bandas superior e inferior de las Bandas de Bollinger. La señal comercial no se genera de una vez, sino que se incrementa gradualmente para la compra y venta. Calcula BBAND, comprueba si el precio supera la banda superior o inferior de BBAND: |
sarext |
|
En la estrategia SAR, cuando el indicador es mayor que 0, se emite una señal de compra y cuando el indicador es menor que 0, se emite una señal de venta. |
ssma |
|
Estrategia de cruce de media móvil única: media móvil SMA (media móvil simple): establece el índice de posición de acuerdo con la posición relativa del precio de las acciones y la media móvil SMA |
sdema |
|
Estrategia de cruce de media móvil única: media móvil DEMA (media móvil de suavizado exponencial doble): establece el índice de posición de acuerdo con la posición relativa del precio de las acciones y la media móvil DEMA |
sema |
|
Estrategia de cruce de media móvil única: media móvil de EMA (media móvil de suavizado exponencial): establece el índice de posición de acuerdo con la posición relativa del precio de las acciones y la media móvil de EMA |
sht |
|
Estrategia de cruce de media móvil única: HT (transformada de Hilbert, línea de tendencia instantánea): establece el índice de posición de acuerdo con la posición relativa del precio de las acciones y la línea HT |
skama |
|
Estrategia de cruce de media móvil única: media móvil KAMA (media móvil adaptativa de Kaufman): establece el índice de posición de acuerdo con la posición relativa del precio de las acciones y la media móvil KAMA |
smama |
|
Estrategia de cruce de media móvil única: media móvil MAMA (media móvil adaptativa MESA): establece el índice de posición de acuerdo con la posición relativa del precio de las acciones y la media móvil MAMA |
st3 |
|
Estrategia de cruce de media móvil única: media móvil T3 (media móvil de suavizado exponencial triple): establece el índice de posición de acuerdo con la posición relativa del precio de las acciones y la media móvil T3 |
stema |
|
Estrategia de cruce de media móvil única: media móvil de TEMA (media móvil de suavizado exponencial triple): establece el índice de posición de acuerdo con la posición relativa del precio de las acciones y la media móvil de TEMA |
strima |
|
Estrategia de cruce de media móvil única: media móvil TRIMA (media móvil de suavizado exponencial triple): establece el índice de posición de acuerdo con la posición relativa del precio de las acciones y la media móvil TRIMA |
swma |
|
Estrategia de cruce de media móvil única: media móvil WMA (media móvil ponderada): establece el índice de posición de acuerdo con la posición relativa del precio de las acciones y la media móvil WMA |
dsma |
|
Estrategia de cruce de media móvil doble: media móvil SMA (media móvil simple): |
ddema |
|
Estrategia de cruce de media móvil doble: media móvil SMA (media móvil simple): |
dema |
|
Estrategia de cruce de media móvil doble: media móvil SMA (media móvil simple): |
dkama |
|
Estrategia de cruce de media móvil doble: media móvil SMA (media móvil simple): |
dmama |
|
Estrategia de cruce de media móvil doble: media móvil SMA (media móvil simple): |
dt3 |
|
Estrategia de cruce de media móvil doble: media móvil SMA (media móvil simple): |
dtema |
|
Estrategia de cruce de media móvil doble: media móvil SMA (media móvil simple): |
dtrima |
|
Estrategia de cruce de media móvil doble: media móvil SMA (media móvil simple): |
dwma |
|
Estrategia de cruce de media móvil doble: media móvil SMA (media móvil simple): |
slsma |
|
Estrategia de negociación de pendiente: media móvil SMA (media móvil simple): |
sldema |
|
Estrategia de negociación de pendiente: media móvil DEMA (media móvil de suavizado exponencial doble): |
slema |
|
Estrategia de negociación de pendiente: media móvil EMA (media móvil de suavizado exponencial): |
slht |
|
Estrategia de negociación de pendiente - media móvil HT (transformada de Hilbert - línea de tendencia instantánea): |
slkama |
|
Estrategia de negociación de pendiente: media móvil KAMA (media móvil adaptativa de Kaufman): |
slmama |
|
Estrategia de negociación de pendiente: media móvil MAMA (media móvil adaptativa MESA): |
slt3 |
|
Estrategia de negociación de pendiente: media móvil T3 (media móvil de suavizado exponencial triple): |
sltema |
|
Estrategia de negociación de pendiente: media móvil de TEMA (media móvil de suavizado exponencial triple): |
sltrima |
|
Estrategia de negociación de pendiente: media móvil TRIMA (media móvil de suavizado exponencial triple): |
slwma |
|
Estrategia de negociación de pendiente: media móvil WMA (media móvil ponderada): |
adx |
|
Estrategia de selección de acciones del indicador ADX (Índice de movimiento direccional promedio): |
apo |
|
Estrategia de selección de acciones del indicador APO (Oscilador de precio absoluto): |
aroon |
|
Estrategia de selección de acciones del indicador AROON: |
aroonosc |
|
Estrategia de selección de acciones del oscilador AROON: |
cci |
|
Estrategia de selección de acciones CCI (Índice del canal de productos básicos): |
cmo |
|
Estrategia de selección de acciones CMO (Chande Momentum Oscillator): |
macdext |
|
Estrategia de selección de acciones MACDEXT (Extendec MACD): |
mfi |
|
Estrategia de selección de acciones de MFI (Índice de flujo de dinero): |
di |
|
Estrategia comercial DI (indicador de directorio): |
dm |
|
Estrategia comercial DM (movimiento direccional): |
mom |
|
Estrategia comercial MOM (indicador de impulso): |
ppo |
|
Estrategia comercial PO (oscilador de precio porcentual): |
rsi |
|
Estrategia comercial RSI (índice de fuerza relativa): |
stoch |
|
Estrategia comercial STOCH (indicador estocástico): |
stochf |
|
Estrategia comercial STOCHF (indicador estocástico rápido): |
stochrsi |
|
Estrategia comercial STOCHRSI (Índice de fuerza relativa estocástica): |
ultosc |
|
Estrategia comercial ULTOSC (Ultimate Oscillator Indicator): |
willr |
|
Estrategia comercial WILLR (William’s %R): |
signal_none |
|
Estrategia de señales comerciales vacías: una estrategia que no genera ninguna señal comercial |
sellrate |
|
Estrategia de señal de venta de tasa de cambio: cuando la tasa de cambio del precio excede el umbral, se genera una señal de venta |
buyrate |
|
Estrategia de señal de compra de tasa de cambio: cuando la tasa de cambio del precio excede el umbral, se genera una señal de compra |
long |
|
Estrategia de sincronización simple, posición larga fija en todo el período histórico. |
short |
|
Estrategia de sincronización simple, posición corta fija en todo el período histórico. |
zero |
|
Estrategia de sincronización simple, posición vacía fija en todo el período histórico. |
all |
|
Seleccione todas las acciones en el grupo de acciones histórico y el índice de inversión se distribuirá uniformemente |
select_none |
|
No seleccione ninguna de las acciones en el grupo de acciones histórico y la posición de inversión es 0 |
random |
|
Seleccione aleatoriamente una cantidad de acciones en cada segmento histórico de acuerdo con la proporción especificada (cuando p <1), o seleccione aleatoriamente una cantidad específica (cuando p> = 1) de acciones para ingresar a la cartera de inversiones, y el índice de inversión se distribuye uniformemente |
finance |
|
Seleccione acciones en función del valor promedio de los indicadores financieros durante un período de tiempo, estrategia básica de selección de acciones: utilice el valor promedio de los indicadores históricos de las acciones como factores de selección de acciones. El parámetro de clasificación de factores se puede pasar como parámetro de estrategia para cambiar el tipo de datos de la estrategia. Seleccione acciones en función de diferentes datos históricos. Los parámetros de selección de acciones se pueden pasar a través de pars. |
ndaylast |
|
Seleccione acciones según el precio o el indicador de datos de la acción hace N días como factor de selección de acciones |
ndayavg |
|
Seleccione acciones en función del valor promedio del precio o indicador de datos de la acción durante los últimos N días como factor de selección de acciones |
ndayrate |
|
Seleccione acciones en función del cambio porcentual del precio o indicador de datos de la acción durante los últimos N días como factor de selección de acciones |
ndaychg |
|
Seleccione acciones según el valor de cambio del precio o indicador de datos de la acción durante los últimos N días como factor de selección de acciones |
ndayvol |
|
Seleccione acciones en función de la volatilidad del precio de las acciones durante los últimos N días como factor de selección de acciones |
Si necesita ver una explicación detallada de cada estrategia comercial incorporada, como el significado de los parámetros de la estrategia y las reglas de generación de señales, puede consultar la cadena de documentos de cada estrategia comercial:
Por ejemplo:
qt.built_ins('Crossline')
puedes ver
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:
También se puede mostrar información detallada sobre las estrategias comerciales integradas en entornos interactivos de Python como ipython usando “?”, por ejemplo:
>>> qt.built_in.SelectingNDayRateChange?
Puedes ver:
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:
Múltiples estrategias y combinaciones de estrategias.
En qteasy, un objeto comercial Operator puede ejecutar múltiples estrategias comerciales simultáneamente. Estas estrategias comerciales extraerán sus respectivos datos históricos de forma independiente durante la operación, generando diferentes señales comerciales. Estas señales comerciales se combinarán en un conjunto de señales comerciales para una ejecución unificada.
Con esta función, los usuarios pueden ejecutar múltiples estrategias comerciales con diferentes enfoques en un objeto comercial. Por ejemplo, una estrategia comercial monitorea el precio de las acciones y genera señales de selección basadas en el precio de las acciones, mientras que la segunda estrategia comercial es responsable de monitorear la tendencia general del mercado y determinar la posición general en función de ella. La tercera estrategia comercial es responsable de la toma de ganancias y el stop-loss, ejecutando el stop-loss en momentos específicos. La señal comercial final se basa principalmente en la primera estrategia comercial, pero está restringida por la segunda estrategia y puede ser completamente controlada por la tercera estrategia cuando sea necesario.
O bien, los usuarios pueden formular fácilmente una estrategia de «comité», en la que múltiples estrategias toman decisiones comerciales de forma independiente en una estrategia integral. La señal comercial final la determina el «comité» compuesto por todas las subestrategias mediante votación, que puede realizarse por mayoría simple, mayoría absoluta, resultados de votación ponderados, etc.
En la combinación de estrategias mencionada anteriormente, cada estrategia comercial independiente es simple y fácil de definir, mientras que su combinación puede desempeñar un papel más importante. Al mismo tiempo, cada subestrategia es independiente, lo que permite una combinación libre en estrategias comerciales integrales y complejas. Esto puede evitar la necesidad de desarrollar estrategias repetidamente; en cambio, simplemente reorganizar y redefinir la combinación de subestrategias puede construir rápidamente una serie de estrategias comerciales complejas e integrales. Se cree que esto mejora en gran medida la eficiencia de la creación de estrategias comerciales y acorta el ciclo. El tiempo es dinero.
Sin embargo, en un objeto Operator, las señales comerciales generadas por diferentes estrategias pueden operar a diferentes precios comerciales. Por ejemplo, algunas estrategias generan señales comerciales de precios de apertura, mientras que otras generan estrategias comerciales de precios de cierre. Por lo tanto, no se deben mezclar diferentes señales de precios comerciales. Pero aparte de eso, mientras los precios de negociación sean los mismos, todas las señales deberían mezclarse.
Combinar señales comerciales significa varias operaciones o funciones en señales comerciales, que van desde operaciones lógicas simples y sumas/restas hasta funciones personalizadas complejas. Siempre que la función se pueda aplicar a un ndarray, en teoría se puede utilizar para combinar señales comerciales, siempre que la señal comercial de salida final sea significativa.
Definición del método de combinación de estrategias blender
La estrategia de combinación de qteasy es implementada por blender. En un Operator, si el número de estrategias excede 1, se debe definir un blender. Si no se define explícitamente ningún blender y el número de estrategias excede 1, qteasy creará un blender predeterminado al ejecutar el Operator. Sin embargo, para garantizar el funcionamiento correcto de múltiples estrategias, los usuarios deben definir el blender ellos mismos.
blender expression es una expresión combinada definida por el usuario que determina el método de combinación de diferentes estrategias comerciales. Esta expresión combinada utiliza operadores aritméticos, operadores lógicos, funciones y otros símbolos para especificar cómo se combinan las señales estratégicas. La expresión blender puede incluir los siguientes elementos:
La expresión blender admite las siguientes funciones:
Elemento |
Ejemplos |
Nota |
|---|---|---|
Número de estrategia |
|
Una cadena que comienza con “s” y termina con un número, donde el número es el índice de la estrategia en |
Números |
|
Cualquier número válido, un número que participa en operaciones de expresión. |
Operadores |
|
operadores aritméticos como |
Operadores lógicos |
|
Soporta `& |
Funciones |
|
Las funciones admitidas se enumeran en la siguiente tabla |
Peréntesis |
|
Operaciones combinadas |
Ejemplos de blender
Cuando hay tres estrategias comerciales en un objeto Operator (con índices 0/1/2), las siguientes formas de definir blender son válidas y se pueden utilizar. Al mismo tiempo, use Operator.set_blender() para configurar blender:
Definición de expresión de Blender usando operadores aritméticos
's0 + s1 + s2'
Las señales comerciales generadas por las tres estrategias comerciales se sumarán para formar la señal comercial final. Si el resultado de la estrategia 0 es una compra del 10%, el resultado de la estrategia 1 es una compra del 10% y el resultado de la estrategia 2 es una compra del 30%, entonces el resultado final es una compra del 50%.
Definición de expresión de Blender utilizando operadores lógicos:
's0 and s1 and s2'
Lo que indica que solo se formará una señal comercial cuando las estrategias comerciales 1, 2 y 3 tengan señales comerciales. Por ejemplo, si el resultado de la estrategia 1 es una compra, el resultado de la estrategia 2 es una compra y la estrategia 3 no tiene señal comercial, entonces el resultado final no es ninguna señal comercial.
También se pueden incluir funciones y paréntesis en la expresión de Blender:
'max(s0, s1) + s2'
El valor máximo de los resultados de las estrategias 1 y 2 se suma al resultado de la estrategia 3 para formar la señal comercial final. Si el resultado de la estrategia 1 es una compra del 10%, el resultado de la estrategia 2 es una compra del 20% y el resultado de la estrategia 3 es una compra del 30%, entonces el resultado final es una compra del 50%.
La misma estrategia puede aparecer más de una vez en la expresión de Blender y también pueden aparecer números puros:
'(0.5 * s0 + 1.0 * s1 + 1.5 * s2) / 3 * min(s0, s1, s2)'
La expresión anterior de Blender indica: Primero, calcule el promedio ponderado de las tres señales de la estrategia (con pesos de 0,5, 1,0 y 1,5) y luego multiplíquelo por el valor mínimo de las tres señales.
Los parámetros de función en la expresión de Blender se definen en el nombre de la función:
'clip_-0.5_0.5(s0 + s1 + s2) + pos_2_0.2(s0, s1, s2)'
La expresión anterior de Blender define dos operaciones de función diferentes y los resultados se suman para obtener el resultado final. La primera función es una función de recorte de rango, que suma los tres conjuntos de señales de estrategia y recorta los valores de señal menores que -0,5 y mayores que 0,5 para obtener el resultado del cálculo. La segunda función es una función de juicio de posición, que cuenta los períodos de tiempo en los que los tres conjuntos de señales tienen posiciones superiores a 0,2, definiéndolas como «largas». Luego, cuenta el número de estrategias que sugieren posiciones largas en cada período de tiempo. Si más de dos estrategias sugieren posiciones largas, se genera una posición larga completa; de lo contrario, genera una posición vacía.
La expresión blender admite las siguientes funciones:
Funciones |
Expresión |
Nota |
|---|---|---|
abs |
|
función de valor absoluto |
avg |
|
Función de valor promedio |
avgpos |
|
Función acumulativa promedio |
ceil |
|
Función de techo |
clip |
|
Función de recorte |
combo |
|
Función combinada |
committee |
|
Función de comité (equivalente a la función de posición acumulativa) |
exp |
|
Función exponente |
floor |
|
Función de piso |
log |
|
Función logaritmo |
log10 |
|
Función de logaritmo en base 10 |
max |
|
Función de valor máximo |
min |
|
Función de valor mínimo |
pos |
|
Función de posición acumulativa |
position |
|
Función de posición acumulativa |
pow |
|
Función de potencia |
power |
|
Función de potencia |
sqrt |
|
Función de raíz cuadrada |
str |
|
Función de fuerza acumulada |
strength |
|
Función de fuerza acumulada |
sum |
|
Función combinada |
unify |
|
Función unificadora |
vote |
|
Función de votación (equivalente a la función de posición acumulativa) |
Blender se puede configurar o recuperar usando los siguientes métodos
operator.set_blender(blender=None, price_type=None)
Pase una expresión directamente para configurar el mezclador, que se analizará y utilizará automáticamente para combinar estrategias comerciales.
operator.view_blender()
Ver licuadora
Ejemplos de uso de licuadora
Aquí hay un ejemplo para demostrar cómo funciona 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=============
