Estrategia de captura de tendencias del HLHB

El autor:¿ Qué pasa?, Fecha: 2023-09-28 11:44:04
Las etiquetas:

Resumen general

La estrategia tiene como objetivo capturar las tendencias de divisas a corto plazo utilizando el cruce EMA y el RSI como señales de negociación, con filtro ADX para ingresar a las operaciones y stop loss para bloquear las ganancias.

Estrategia lógica

La estrategia se basa en los siguientes indicadores y condiciones para generar señales comerciales:

  • EMA rápida de 5 períodos: línea azul
  • EMA lenta de 10 períodos: línea roja
  • Indicador de variabilidad de 10 períodos aplicado al precio medio (H+L)/2
  • ADX de 14 períodos

Señales de entrada:

  • Long: cuando la EMA rápida cruza por encima de la EMA lenta desde abajo y el RSI cruza por encima de 50 desde abajo
  • Corto: cuando la EMA rápida cruza por debajo de la EMA lenta desde arriba y el RSI cruza por debajo de 50 desde arriba
  • Solo recibirá señales cuando el ADX sea > 25

Señales de salida:

  • Utilizar el stop de pérdida, 150 pips distancia de rastro y 400 pips tomar ganancias
  • Cierre el comercio cuando se produzca una nueva señal
  • Cierre todas las operaciones antes de fin de semana

La estrategia combina el cruce de la EMA, el RSI sobrecomprado/sobrevendido y la fuerza de la tendencia de ADX para crear reglas de entrada sólidas.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. El cruce de la EMA para la dirección de la tendencia. El cruce ascendente sugiere una tendencia alcista mientras que el cruce descendente una tendencia bajista. Puede identificar cambios en la tendencia.

  2. La adición del RSI filtra algunas señales falsas de ruptura. Las zonas sobrevendidas/sobrecompradas indican retrocesos a corto plazo y evitan entradas innecesarias en mercados de rango.

  3. ADX para garantizar la existencia de una tendencia verdadera. Solo considere señales de negociación cuando ADX > 25, garantizando una tendencia sólida.

  4. Seguir el stop loss y tomar ganancias dejar que las ganancias corran mientras se controla el riesgo. 150 pips de distancia de seguimiento y 400 pips de objetivo de ganancia siguen la tendencia.

  5. El cierre de todas las posiciones antes del fin de semana evita los riesgos del fin de semana y garantiza la regularidad de las operaciones.

Análisis de riesgos

La estrategia también presenta los siguientes riesgos:

  1. Los sistemas de cruce de EMA son propensos a señales falsas de ruptura, lo que conduce a pérdidas.

  2. El RSI sólo identifica los niveles de sobrecompra/sobreventa, no las inversiones de tendencia.

  3. ADX sólo juzga la existencia de tendencia, el tiempo de entrada puede estar fuera.

  4. Los niveles fijos de stop loss y take profit pueden no adaptarse a los cambios del mercado.

  5. El cierre forzado semanal podría perder buenas oportunidades de tendencia.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Prueba diferentes combinaciones de EMA para encontrar longitudes óptimas.

  2. Pruebe diferentes parámetros del RSI o combínelo con KDJ para una mejor evaluación de sobrecompra/sobreventa.

  3. Optimizar los parámetros ADX para un filtrado más adecuado y una mayor calidad de entrada.

  4. Combinación de ensayos de paradas fijas y tracción dinámica basada en ATR.

  5. La entidad deberá incluir en su balance las entradas de retroceso de la ruptura intradiaria después de la confirmación de la tendencia, como los marcos de tiempo más bajos.

  6. Introducir el dimensionamiento de las posiciones basado en la volatilidad para el ajuste dinámico basado en la volatilidad del mercado.

  7. Explorar técnicas de aprendizaje automático para optimizar automáticamente los parámetros de adaptabilidad.

Resumen de las actividades

En resumen, se trata de una sencilla estrategia de seguimiento de tendencias, identificando la dirección de tendencia con el cruce de la EMA, filtrando con el RSI, requiriendo tendencia con el ADX y deteniendo el seguimiento para obtener ganancias. La optimización consiste principalmente en encontrar mejores combinaciones de indicadores para flexibilidad y agregar dimensionamiento dinámico de posiciones. La lógica tiene mérito, pero aún requiere más pruebas y optimización para su aplicación práctica.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Hucklekiwi Pip - HLHB Trend-Catcher System", shorttitle="HLHB TCS", overlay=true,
  default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// -----------------------------------------------------------------------------
// HLHB Trend-Catcher System as described on BabyPips.com
//
// Strategy Author: Hucklekiwi Pip 
// Coded By: Backtest Rookies
// -----------------------------------------------------------------------------
//
// Refs:
//   - Original System: https://www.babypips.com/trading/forex-hlhb-system-explained
//   - Updated System: https://www.babypips.com/trading/forex-hlhb-system-20190311
//
//
// Description (From Hucklekiwi Pip)
// 
//   The HLHB System simply aims to catch short-term forex trends.
//   It is patterned after the Amazing Crossover System that Robopip once backtested.
//   In fact, it was one of his highest-scoring mechanical systems in 2014! 
//   The system can be applied to any pair, but since I’m into major pairs, 
//   I’m applying it to the 1-hour charts of EUR/USD and GBP/USD.
// -----------------------------------------------------------------------------
// STRATEGY REQUIREMENTS
// -----------------------------------------------------------------------------
//
// Setup
// -----
//  - EUR/USD 1-hour chart
//  - GBP/USD 1-hour chart
//  - 5 EMA: blue line
//  - 10 EMA: red line
//  - RSI (10) applied to the median price (HL/2)
//  - ADX (14)
//
// Entry
// -----
//  - BUY when the 5 EMA crosses above the 10 EMA from underneath and the RSI 
//    crosses above the 50.0 mark from the bottom.
//  - SELL when the 5 EMA crosses below the 10 EMA from the top and the RSI 
//    crosses below the 50.0 mark from the top.
//  - Make sure that the RSI did cross 50.0 from the top or bottom and not just 
//    ranging tightly around the level.
//  - ADX > 25 for Buy and Sells
//
// Exit
// ----
//  - Use a 50-pip trailing stop and a 200-pip profit target. This increases the 
//    chances of the system riding longer trends.
//  - Close the trade when a new signal materializes.
//  - Close all trades by the end of the week.
// 
// -----------------------------------------------------------------------------

// Strategy Varaibles
// -------------------
ema_fast_len = input(5, title='Fast EMA Length')
ema_slow_len = input(10 , title='Slow EMA Length')
rsi_len = input(10, title='Slow EMA Length')
session_end_hour = input(16, minval=0, maxval=23, title='Weekly Session End (Hour)')
session_end_minute = input(0, minval=0, maxval=59, title='Weekly Session End (Minute)')
// Targets taken from the update post which states 150 & 400 instead of 50 and 200.
profit_target = input(400, title='Profit Target (Pips/Points)')
trailing_stop_dist = input(150, title='Trailing Stop Distance (Pips/Points)')
adx_filt = input(true, title='User ADX Filter')
adx_min = input(25, minval=0, title='Minimum ADX Level')
adx_len = input(14, title="ADX Smoothing")
di_len = input(14, title="DI Length")

// Setup the Indicators
ema_fast = ema(close, ema_fast_len)
ema_slow = ema(close, ema_slow_len)
rsi_ind = rsi(close, rsi_len)

// ADX
adx_dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]

adx_adx(dilen, adxlen) =>
	[plus, minus] = adx_dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]

[adx_sig, adx_plus, adx_minus] = adx_adx(di_len, adx_len)


// Strategy Logic
ema_long_cross = crossover(ema_fast, ema_slow)
ema_short_cross = crossunder(ema_fast, ema_slow)
rsi_long_cross = crossover(rsi_ind, 50)
rsi_short_cross = crossunder(rsi_ind, 50)
adx_check = adx_filt ? adx_sig >= adx_min : true

longCondition = ema_long_cross and rsi_long_cross and adx_check
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = ema_short_cross and rsi_short_cross and adx_check
if (shortCondition)
    strategy.entry("Short", strategy.short)

strategy.exit("SL/TP", "Long", profit=profit_target,  loss=trailing_stop_dist, trail_points=trailing_stop_dist)  
strategy.exit("SL/TP", "Short", profit=profit_target, loss=trailing_stop_dist, trail_points=trailing_stop_dist)  

// Friday = 6
// If we miss the hour for some reason (due to strange timeframe), then close immediately
// Else if we are on the closing hour, then check to see if we are on or passed the close minute
close_time = dayofweek == 6 ? 
  hour[0] > session_end_hour ? true :
  hour[0] == session_end_hour ?
      minute[0] >= session_end_minute :
  false : false

strategy.close_all(when=close_time)

// Plotting
plot(ema_fast, color=blue, title="Fast EMA")
plot(ema_slow, color=red, title="Slow EMA")

plotshape(rsi_long_cross, style=shape.triangleup, size=size.tiny, location=location.belowbar, color=green, title='RSI Long Cross Marker')
plotshape(rsi_short_cross, style=shape.triangledown, size=size.tiny, location=location.abovebar, color=red, title='RSI Short Cross Marker')

// ADX Filter Highlight
bgcolor(adx_filt and adx_check ? orange : na, transp=90)

Más.