Estrategia de negociación cruzada QQE rápida basada en el filtro de tendencias

El autor:¿ Qué pasa?, Fecha: 2024-01-25 11:34:58
Las etiquetas:

img

Resumen general

La estrategia de trading de cruce QQE rápido basada en el filtro de tendencia es una estrategia de trading que utiliza cruces QQE rápidos con promedios móviles para filtrar la dirección de la tendencia.

  • La señal RSI cruzando Cero (XZERO)
  • La señal RSI cruzando la línea RSIatr rápida (XQQE)
  • La señal RSI que sale del canal de umbral RSI (comprar/vender)

Las alertas (COMPRAR/VENDER) pueden filtrarse opcionalmente por las medias móviles:

  • Para la alerta BUY, el cierre debe estar por encima del MA rápido y del MA rápido (EMA8) > del MA medio (EMA20) > del MA lento (SMA50).
  • Para la alerta SELL, el cierre debe estar por debajo del MA rápido y del MA rápido (EMA8) < MA medio (EMA20) < MA lento (SMA50).

y/o filtro direccional:

  • Para la alerta BUY, el cierre debe estar por encima del MA lento (SMA50) y el MA direccional (EMA20) debe estar en verde.
  • Para la alerta SELL, el cierre debe estar por debajo del MA lento (SMA50) y el MA direccional (EMA20) debe estar en rojo.

El XZERO y XQQE no están incluidos en el filtrado, se utilizan para indicar alertas de compra / venta pendientes, particularmente el XZERO.

Esta estrategia debería funcionar en cualquier par de divisas y en la mayoría de los plazos de gráficos.

Principio de la estrategia

La idea central de esta estrategia es utilizar el cruce direccional del indicador QQE rápido como señales comerciales y filtrar las señales comerciales ruidosas a través de la combinación de promedios móviles para capturar la dirección de la tendencia.

En concreto, la estrategia utiliza los siguientes indicadores y señales:

Indicador de QQE rápido: Este es un indicador basado en RSI con suavización adicional para hacerlo más sensible y rápido. El indicador consta de tres líneas: la línea media es el promedio móvil exponencial de RSI, la línea superior es la línea media + ATR rápido * un factor, y la línea inferior es la línea media - ATR rápido * un factor. Cuando el RSI supera la línea superior, es una señal de venta. Cuando el RSI cae por debajo de la línea inferior, es una señal de compra.

Cruce de línea cero: Genera señales cuando la línea media del RSI cruza la línea cero. El cruce ascendente es señal de compra y el cruce descendente es señal de venta. Estas señales indican el preludio de los cambios de tendencia.

La ruptura del canal: Genera señales cuando la línea media del RSI entra en el canal de umbral establecido. Romper el canal superior es la señal de venta y romper el canal inferior es la señal de compra. Estas son señales de tendencia más fuertes.

Combo de promedio móvilCuando las tres líneas están dispuestas como: rápido > medio > lento, es una tendencia al alza. Cuando se dispone como rápido < medio < lento, es una tendencia a la baja. La combinación se utiliza para determinar la dirección general de la tendencia.

Filtro de dirección de tendencia: Una señal de compra solo se genera cuando el precio de cierre está por encima del promedio móvil lento y el promedio móvil medio (20 períodos) es al alza (precio más alto del período > precio más bajo). Una señal de venta solo se genera cuando el precio de cierre está por debajo del promedio móvil lento y el promedio móvil medio (20 períodos) es a la baja. Esto puede filtrar algunas señales falsas inversas.

Al combinar el uso de señales cruzadas del indicador QQE rápido y el filtrado de tendencias a partir de promedios móviles, captura puntos de reversión a corto plazo en las principales tendencias de los marcos de tiempo para formar un sistema de negociación relativamente completo.

En resumen, esta es una estrategia que rastrea las tendencias a medio y largo plazo, utiliza indicadores rápidos para capturar el momento de las reversiones a corto plazo para la entrada / salida, y utiliza el filtrado de promedios móviles para reducir el riesgo de negociación en contra de la dirección y, por lo tanto, maximizar los rendimientos.

Ventajas de la estrategia

  • Utiliza un indicador QQE rápido y sensible para capturar rápidamente las señales de inversión
  • Aplica múltiples medias móviles para determinar la dirección del ciclo y evitar el comercio contra tendencias
  • Incluye múltiples señales cruzadas que pueden utilizarse en combinación para aumentar las oportunidades de ganancia
  • Parámetros ajustables que se pueden optimizar para diferentes productos y plazos
  • Utiliza las señales de ruptura del propio canal del indicador en lugar de dibujar canales separados, evitando la dependencia de parámetros
  • Puede capturar muy bien los movimientos de reversión a corto plazo bajo grandes ciclos de tendencia
  • Conceptos sencillos y claros, fáciles de entender e implementar

Riesgos de la estrategia

También existen algunos riesgos potenciales con esta estrategia:

  • Los indicadores rápidos tienden a producir señales falsas que no pueden filtrarse completamente por las medias móviles, existe el riesgo de seguir una dirección incorrecta
  • Cuando se produce una inversión de tendencia de ciclo grande, tienden a formarse señales comerciales invertidas que plantean riesgos
  • No se tienen en cuenta los factores de gestión del dinero, los riesgos de exceso de negociación y las pérdidas
  • No hay un stop loss en el lugar, los riesgos de expandir las pérdidas es grande
  • Riesgo de adaptación de los datos de los ensayos de retroceso, aún hay que verificar el rendimiento real

Las medidas y soluciones incluyen:

  • Ajustar los parámetros de la media móvil, utilizar más longitudes de ciclo para determinar las tendencias
  • Añadir otros indicadores como MACD, sesgo, etc para el filtrado de combinación
  • Añadir estrategias de stop loss para controlar el tamaño de las pérdidas de una sola operación
  • Pruebas con dinero real, optimización de parámetros

Direcciones de optimización

Hay margen para una mayor optimización de esta estrategia:

  1. Optimizar los parámetros de línea rápida y lenta del indicador QQE para encontrar la combinación óptima de parámetros
  2. Prueba más combinaciones de promedios móviles para encontrar el rendimiento óptimo de filtración
  3. Añadir otros indicadores como el MACD para el filtrado de señales auxiliares
  4. Aplicar estrategias de gestión de fondos para optimizar el tamaño de las posiciones
  5. Establecer una estrategia de stop loss para controlar el riesgo a la baja por operación
  6. Optimización de parámetros basados en diferentes productos
  7. Determinar la tendencia en marcos de tiempo aún más largos para evitar ser engañado por las reversiones a corto plazo

Con la optimización de parámetros, la combinación de más indicadores y la ayuda de prácticas viables de gestión de dinero y riesgo, el rendimiento de esta estrategia puede mejorarse para el comercio real.

Conclusión

En general, la rápida estrategia de negociación de cruce QQE basada en el filtro de tendencias es una opción muy considerable. Su fortaleza radica en capturar rápidamente las oportunidades de negociación de reversión mientras utiliza múltiples promedios móviles para determinar las tendencias principales y evitar operar en contra de ellas tanto como sea posible. Con la optimización de los parámetros del indicador y los criterios de filtrado, junto con una estricta gestión del dinero, esta estrategia puede generar retornos de inversión relativamente constantes.

Por supuesto, los riesgos no se pueden ignorar. Las pruebas de dinero real y los ajustes de optimización continuos son necesarios para garantizar la practicidad y la confiabilidad de la estrategia. En conclusión, vale la pena que los inversores estudien y rastreen la práctica a largo plazo. Se cree que con el avance de las tecnologías de negociación algorítmica, este tipo de estrategias basadas en indicadores rápidos y filtro de tendencias verán mejoras y proliferación.


/*backtest
start: 2024-01-17 00:00:00
end: 2024-01-24 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//
// Title:   [STRATEGY][UL]QQE Cross v1.1
// Author:  JustUncleL
// Date:    22-Oct-2016
// Version: v1.1
//
// Description:
//  A trend following trading Strategy that uses fast QQE crosses with Moving Averages
//  for trend direction filtering. QQE or Qualitative Quantitative Estimation is based 
//  on the relative strength index, but uses a smoothing technique as an additional 
//  transformation. Three crosses can be selected (all selected by default): 
//    - RSI signal crossing ZERO (XZERO)
//    - RSI signal crossing Fast RSIatr line (XQQE)
//    - RSI signal exiting the RSI Threshhold Channel (BUY/SELL)
//  The (BUY/SELL) alerts can be optionally filtered by the Moving averages:
//    - For BUY alert the Close must be above the fast MA and 
//        fast MA (EMA8) > medium MA (EMA20) > slow MA (SMA50).
//    - For SELL alert the Close must be below the fast MA and
//        fast MA (EMA8) < medium MA (EMA20) < slow MA (SMA50).
//  and/or directional filter:
//    - For BUY alert the Close must be above the slow MA (SMA50) and the
//      directional MA (EMA20) must be green.
//    - For SELL alert the Close must be below the slow MA (SMA50) and the
//      directional MA (EMA20) must be red.
//. The XZERO and XQQE are not included in the filtering, they are used to indicate
//  pending BUY/SELL alerts, particularly the XZERO. 
//
//  This Strategy should work on any currency pair and most chart timeframes.
//  *** USE AT YOUR OWN RISK ***
//  
// 
//
// Mofidifications:
//  1.1 - Added Target Profit option, cleaned up the risk management code.
//        Changed Trade Close to EMA20 direction change instead of opposite BUY/SELL
//        signal, which will be earlier, this means stop loss setting should not be
//        required when an AutoTrader is available.
//        Modified code to prevent potential repaint issues.
//  1.0 - original
//
// References:
//  Some Code borrowed from:
//  - "Scalp Jockey - MTF MA Cross Visual Strategizer by JayRogers"
//  - "QQE MT4 by glaz"
//  - "Strategy Code Example by JayRogers"  
//  Inspiration from:
//  - http://www.forexstrategiesresources.com/binary-options-strategies-ii/189-aurora-binary-trading/
//  - http://www.forexstrategiesresources.com/metatrader-4-trading-systems-v/652-qqe-smoothed-trading/
//  - http://dewinforex.com/forex-indicators/qqe-indicator-not-quite-grail-but-accurately-defines-trend-and-flat.html
//

strategy(title='[STRATEGY][UL]QQE Cross v1.1', pyramiding=0, overlay=true )


// - INPUTS START
// Fast MA - type, source, length
type1   = input(defval="EMA", title="Fast MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, ZEMA ( case sensitive )")
len1    = input(defval=8, title="Fast - Length", minval=1)
// Medium Fast MA - type, source, length
type2   = input(defval="EMA", title="Medium Fast MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, ZEMA ( case sensitive )")
len2    = input(defval=20, title="Medium Fast - Length", minval=1)
// Slow MA - type, source, length
type3   = input(defval="SMA", title="Slow MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, LSMA, ZEMA ( case sensitive )")
len3    = input(defval=50, title="Slow Length", minval=1)
//
// QQE rsi Length, Smoothing, fast ATR factor, source
RSILen  = input(6,title='RSI Length')
SF      = input(3,title='RSI Smoothing Factor')
QQE     = input(2.618,title='Fast QQE Factor')
threshhold = input(10, title="RSI Threshhold")
//
sQQEx   = input(false,title="Show QQE Signal crosses")
sQQEz   = input(false,title="Show QQE Zero crosses")
//
filter  = input(false,title="Use Moving Average Filter")
dfilter = input(true, title="Use Trend Directional Filter" )
RSIsrc  = input(close,title="Source")
srcclose= RSIsrc

// - INPUTS END

// - FUNCTIONS

// Returns MA input selection variant, default to SMA if blank or typo.
variant(type, src, len) =>
    v1 = sma(src, len)                                                  // Simple
    v2 = ema(src, len)                                                  // Exponential
    v3 = wma(src, len)                                                  // Weighted
    v4 = vwma(src, len)                                                 // Volume Weighted
    v5 = na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len    // Smoothed
    v6 = 2 * v2 - ema(v2, len)                                          // Double Exponential
    v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)               // Triple Exponential
    v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))   // Hull
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    v10 = ema1+(ema1-ema2)                                              // Zero Lag Exponential
    // return variant, defaults to SMA if input invalid.
    type=="EMA"?v2 : type=="WMA"?v3 : type=="VWMA"?v4 : type=="SMMA"?v5 : type=="DEMA"?v6 : type=="TEMA"?v7 : type=="HullMA"?v8 : type=="ZEMA"?v10 : v1

// - FUNCTIONS END

// - Fast ATR QQE
//
Wilders_Period = RSILen * 2 - 1
//
Rsi = rsi(RSIsrc,RSILen)
RSIndex = ema(Rsi, SF)
AtrRsi = abs(RSIndex[1] - RSIndex)
MaAtrRsi = ema(AtrRsi, Wilders_Period)
DeltaFastAtrRsi = ema(MaAtrRsi,Wilders_Period) * QQE
//
newshortband=  RSIndex + DeltaFastAtrRsi
newlongband= RSIndex - DeltaFastAtrRsi
longband=RSIndex[1] > longband[1] and RSIndex > longband[1] ? max(longband[1],newlongband) : newlongband
shortband=RSIndex[1] < shortband[1] and  RSIndex < shortband[1] ? min(shortband[1],newshortband) : newshortband
trend=cross(RSIndex, shortband[1])? 1 : cross(longband[1], RSIndex) ? -1 : nz(trend[1],1)
FastAtrRsiTL = trend==1 ? longband : shortband


// - SERIES VARIABLES
// MA's
ma_fast    = variant(type1, srcclose, len1)
ma_medium  = variant(type2, srcclose, len2)
ma_slow    = variant(type3, srcclose, len3)
// Get Direction From Medium Moving Average
direction = rising(ma_medium,3) ? 1 : falling(ma_medium,3) ? -1 : 0
//
// Find all the QQE Crosses
QQExshort = sQQEx and crossover(FastAtrRsiTL, RSIndex)
QQExlong  = sQQEx and crossunder(FastAtrRsiTL, RSIndex)
// Zero cross
QQEzlong = sQQEz and crossover(RSIndex,50)
QQEzshort  = sQQEz and crossunder(RSIndex,50)
//  
// Thresh Hold channel Crosses give the BUY/SELL alerts.
QQEclong = RSIndex>(50+threshhold) ? na(QQEclong[1]) ? 1 : QQEclong[1]+1 : 0
QQEcshort = RSIndex<(50-threshhold) ? na(QQEcshort[1]) ? 1 : QQEcshort[1]+1 : 0

//
// Check Filtering.
QQEflong = (not filter or (srcclose>ma_fast and ma_medium>ma_slow and ma_fast>ma_medium)) and 
  (not dfilter or (direction>0 and srcclose>ma_slow))
QQEfshort = (not filter or (srcclose<ma_fast and ma_medium<ma_slow and ma_fast<ma_medium)) and
  (not dfilter or (direction<0 and srcclose<ma_slow))
//
// Get final BUY / SELL alert determination
buy = QQEclong>0 and QQEflong ? na(buy[1]) ? 1 : buy[1]+1 : 0
sell= QQEcshort>0 and QQEfshort ? na(sell[1]) ? 1 : sell[1]+1 : 0

// - SERIES VARIABLES END

// - PLOTTING
// Ma's
plot(ma_fast, title="MA Fast", color=olive, linewidth=2, transp=20)
plot(ma_medium, title="MA Medium Fast", color=direction<0?red:green, linewidth=3, transp=0)
plot(ma_slow, title="MA Slow", color=blue, linewidth=2, transp=20)
// QQE crosses
plotshape(QQExlong and buy!=1, title="QQE Cross Over", style=shape.triangleup, location=location.belowbar, text="XQQE", color=blue, transp=20, size=size.tiny)
plotshape(QQExshort and sell!=1, title="QQE Cross Under", style=shape.triangledown, location=location.abovebar, text="XQQE", color=black, transp=20, size=size.tiny)
// Signal crosses zero line
plotshape(QQEzlong and buy!=1 and not QQExlong, title="QQE Zero Cross Over", style=shape.triangleup, location=location.belowbar, text="XZERO", color=aqua, transp=20, size=size.tiny)
plotshape(QQEzshort and sell!=1 and not QQExshort, title="QQE Zero Cross Under", style=shape.triangledown, location=location.abovebar, text="XZERO", color=fuchsia, transp=20, size=size.tiny)

// - PLOTTING END

// Create alert for cross, shunt back 1 if source is not 'open', this should prevent repaint issue.
//shunt = RSIsrc == open ? 0 : 1
shunt = 0
c_alert = (buy[shunt]==1 or sell[shunt]==1)
//alertcondition(c_alert, title="QQECROSS Alert", message="QQECROSS Alert")
// show only when alert condition is met and bar closed.
plotshape(c_alert,title= "Alert Indicator Closed", location=location.bottom, color=sell[shunt]==1?red:green, transp=0, style=shape.circle)


//  Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
//tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss     = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop    = input(defval = 100, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === STRATEGY - LONG POSITION EXECUTION ===
strategy.entry(id = "Buy", long = true, when = buy[shunt]==1 )// use function or simple condition to decide when to get in
strategy.close(id = "Buy", when = direction[shunt]!=direction[shunt+1])// ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===
strategy.entry(id = "Sell", long = false, when = sell[shunt]==1)
strategy.close(id = "Sell", when = direction[shunt]!=direction[shunt+1])

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)

//eof

Más.