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.
La estrategia se basa en los siguientes indicadores y condiciones para generar señales comerciales:
Señales de entrada:
Señales de salida:
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.
La estrategia tiene las siguientes ventajas:
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.
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.
ADX para garantizar la existencia de una tendencia verdadera. Solo considere señales de negociación cuando ADX > 25, garantizando una tendencia sólida.
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.
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.
La estrategia también presenta los siguientes riesgos:
Los sistemas de cruce de EMA son propensos a señales falsas de ruptura, lo que conduce a pérdidas.
El RSI sólo identifica los niveles de sobrecompra/sobreventa, no las inversiones de tendencia.
ADX sólo juzga la existencia de tendencia, el tiempo de entrada puede estar fuera.
Los niveles fijos de stop loss y take profit pueden no adaptarse a los cambios del mercado.
El cierre forzado semanal podría perder buenas oportunidades de tendencia.
La estrategia se puede optimizar en los siguientes aspectos:
Prueba diferentes combinaciones de EMA para encontrar longitudes óptimas.
Pruebe diferentes parámetros del RSI o combínelo con KDJ para una mejor evaluación de sobrecompra/sobreventa.
Optimizar los parámetros ADX para un filtrado más adecuado y una mayor calidad de entrada.
Combinación de ensayos de paradas fijas y tracción dinámica basada en ATR.
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.
Introducir el dimensionamiento de las posiciones basado en la volatilidad para el ajuste dinámico basado en la volatilidad del mercado.
Explorar técnicas de aprendizaje automático para optimizar automáticamente los parámetros de adaptabilidad.
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)