Estrategia rápida de cruce de QQE basada en filtrado de tendencias


Fecha de creación: 2024-01-25 11:34:58 Última modificación: 2024-01-25 11:34:58
Copiar: 1 Número de Visitas: 1235
1
Seguir
1617
Seguidores

Estrategia rápida de cruce de QQE basada en filtrado de tendencias

Descripción general

La estrategia de cruce rápido de QQE basada en filtros de tendencia es una estrategia de negociación que sigue la tendencia y que utiliza cruces rápidos de QQE y medias móviles para filtrar la dirección de la tendencia. QQE o estimación cualitativa cuantitativa se basa en el índice de fuerza relativa, pero se utiliza la técnica de suavización como una conversión adicional.

  • La señal RSI cruza la línea cero ((XZERO)
  • RSI señal cruzada RSIatr línea rápida ((XQQE)
  • La señal de RSI se retira del canal de descenso del RSI (comprar/vender)

Las señales de compra/venta se pueden filtrar opcionalmente a través de las medias móviles:

  • Para una señal de compra, el precio de cierre debe estar por encima de la media móvil rápida, y la media móvil rápida (EMA8) > media móvil rápida (EMA20) > media móvil lenta (SMA50)
  • Para una señal de venta, el precio de cierre debe estar por debajo de la media móvil rápida, y la media móvil rápida (EMA8) < media móvil rápida (EMA20) < media móvil lenta (SMA50)

y/o filtro de dirección de tendencia:

  • Para una señal de compra, el precio de cierre debe estar por encima de la media móvil lenta (SMA50) y la media móvil direccional (EMA20) debe ser verde.
  • Para una señal de venta, el precio de cierre debe estar por debajo de la media móvil lenta (SMA50) y la media móvil direccional (EMA20) debe ser roja.

XZERO y XQQE no están incluidos en el filtro, y son usados para indicar las señales de compra/venta pendientes, especialmente XZERO.

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

Principio de estrategia

La idea central de esta estrategia es aprovechar la intersección direccional del indicador QQE rápido como señal de negociación y filtrar la señal de negociación de ruido a través de una combinación de medias móviles para capturar la dirección de la tendencia.

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

Indicadores rápidos de QQE: Es un indicador basado en el RSI, con un procesamiento de suavización adicional para que sea más sensible y rápido. El indicador consta de tres líneas: la media es el promedio móvil de RSI, la media es la media + ATR rápido * un factor, y la media es la media - ATR rápido * un factor.

Línea cero cruzadaCuando el RSI cruza la línea cero, una cruza hacia arriba es una señal de compra y una cruza hacia abajo es una señal de venta. Estas señales indican un cambio de tendencia.

La brecha en el canal: Cuando la órbita media del RSI entra en el canal de umbral establecido, se genera una señal, la ruptura del canal superior es una señal de venta, la ruptura del canal inferior es una señal de compra. Estas son señales de tendencia más fuertes.

Combinación de las medias móvilesUtiliza tres grupos de promedios móviles rápidos y lentos, con una línea rápida de 8 ciclos, una línea media de 20 ciclos y una línea lenta de 50 ciclos. Cuando las tres líneas se alinean como: rápido> mediano> lento, la tendencia es ascendente, cuando es rápido < mediano < lento, la tendencia es descendente. La combinación se utiliza para determinar la dirección de la tendencia general.

Filtrado por dirección de tendenciaLa señal de compra se produce cuando el precio de cierre está por encima de la media móvil lenta y la media móvil lenta hacia arriba (el precio más alto> el precio más bajo en el ciclo); la señal de venta se produce cuando el precio de cierre está por debajo de la media móvil lenta y la media móvil lenta hacia abajo. Esto puede filtrar algunas señales falsas invertidas.

Mediante la combinación del uso de señales cruzadas de índices rápidos de QQE y el filtro de tendencias de las medias móviles, se pueden capturar reveses de corta y media duración en la dirección de la tendencia en un marco de tiempo más grande, formando un sistema de negociación más completo. Al mismo tiempo, los parámetros del indicador están configurados de manera más sensible, lo que permite capturar los puntos de inflexión de la tendencia lo antes posible.

En general, se trata de una estrategia de seguimiento de tendencias a medio y largo plazo, que captura los momentos de compra/venta inversa a corto plazo a través de indicadores rápidos y utiliza filtros de medias móviles para reducir el riesgo de inversiones y maximizar los beneficios.

Ventajas estratégicas

  • El uso de indicadores rápidos sensibles QQE, puede capturar rápidamente la señal de reversión
  • Aplicación de múltiples grupos de medias móviles para determinar la dirección del gran ciclo y evitar el comercio inverso
  • Contiene múltiples señales cruzadas que se pueden combinar para mejorar las oportunidades de ganancias
  • Los parámetros son ajustables y se pueden optimizar para diferentes variedades y ciclos
  • Utiliza el indicador en sí mismo para la señal de ruptura de canal, sin diseñar canales independientes, evitando la dependencia de parámetros
  • Es una buena manera de capturar un cambio de tendencia a corto plazo en una tendencia a largo plazo.
  • Conceptos sencillos, claros, fáciles de entender y ejecutar

Riesgo estratégico

La estrategia también tiene algunos riesgos potenciales:

  • Los indicadores rápidos son propensos a generar falsas señales, las medias móviles no pueden filtrarse completamente, y existe el riesgo de seguir la dirección equivocada.
  • Las señales inversas de comercio son propensas a crear riesgos cuando se produce un giro en el ciclo grande.
  • No se tiene en cuenta el factor de gestión de fondos y existe la posibilidad de pérdidas por exceso de operaciones
  • No hay paradas de pérdidas, mayor riesgo de pérdidas
  • El riesgo de la retroalimentación de los datos de la compatibilidad, la eficacia en el disco duro está por comprobarse

Las medidas y soluciones incluyen:

  • Ajustar los parámetros de las medias móviles para usar más períodos para determinar tendencias
  • Añadir filtros de combinación de otros indicadores, como MACD, sesgo, etc.
  • Adherirse a una estrategia de stop loss para controlar las pérdidas individuales
  • Parámetros de verificación y optimización

Dirección de optimización de la estrategia

La estrategia tiene espacio para ser optimizada aún más:

  1. Optimización de los parámetros de la línea rápida y lenta del indicador QQE para encontrar la combinación óptima de parámetros
  2. Prueba más combinaciones de medias móviles para encontrar el mejor filtro
  3. La adición de una combinación de otros indicadores, como MACD y otras señales de filtración auxiliares
  4. Aplicar estrategias de gestión de fondos y optimizar la gestión de posiciones
  5. Establecer una estrategia de stop loss para controlar el riesgo de pérdidas individuales
  6. Optimización para diferentes parámetros de variedad
  7. Evite ser engañado por las inversiones a corto plazo al juzgar tendencias en ciclos más altos

La optimización de los parámetros, la combinación de más indicadores y la incorporación de herramientas de gestión de fondos y riesgos viables, podrían mejorar el rendimiento de la estrategia en el mercado.

Resumir

En general, la estrategia de cruce rápido de QQE basada en filtración de tendencias es una opción muy interesante de considerar. Su ventaja reside en aprovechar rápidamente las oportunidades de inversión y, al mismo tiempo, usar múltiples grupos de medias móviles para juzgar las grandes tendencias y evitar los errores de inversión.

Por supuesto, no se puede ignorar el riesgo, la verificación en el terreno y el ajuste de la optimización continua son necesarios para garantizar la utilidad y la fiabilidad de las estrategias. En general, vale la pena que los inversores aprendan y sigan la práctica a largo plazo.

Código Fuente de la Estrategia
/*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