La estrategia de seguimiento de tendencias es una estrategia de trading de tendencias basada en el cruce de medias móviles. Utiliza el cruce de una media móvil exponencial (EMA) y una media móvil de Hull (HMA) para determinar la dirección de la tendencia y generar señales comerciales en consecuencia.
La estrategia emplea dos promedios móviles con parámetros diferentes: una EMA más rápida y una HMA más lenta.
Cuando la EMA más rápida cruza por encima de la HMA más lenta, se considera el comienzo de una tendencia al alza, y la estrategia colocará una orden larga al precio de mercado en la siguiente barra abierta.
Para optimizar el tiempo de entrada, la estrategia incorpora una opción Heikin-Ashi. Cuando se activa, las señales de compra y venta se basarán en barras Heikin-Ashi en lugar de velas normales.
La estrategia también emplea una configuración de stop loss. Cuando la pérdida de posición alcanza el porcentaje de stop loss preestablecido, la posición se cerrará al precio de mercado, limitando la pérdida máxima por operación.
Las ventajas de esta estrategia incluyen:
El uso del cruce de EMA y HMA para determinar las tendencias puede aprovechar las diferentes medias móviles de período y mejorar la precisión.
El comercio basado en las tendencias evita agitarse en oscilaciones menores y reduce las operaciones innecesarias.
La opción Heikin-Ashi optimiza el tiempo de entrada filtrando las señales falsas.
El stop loss móvil limita efectivamente la pérdida máxima por operación.
Los parámetros personalizables permiten la optimización para diferentes productos y plazos.
Los riesgos de esta estrategia incluyen:
Como sistema de seguimiento de tendencias, su rendimiento es inferior durante los mercados de rango.
Puede incurrir en grandes pérdidas cuando se produce una inversión de tendencia.
Los ajustes incorrectos de la parada de pérdidas pueden causar paradas innecesarias o aumentar las pérdidas.
El mal ajuste de los parámetros puede llevar a un exceso de comercio o a la inacción.
Los períodos de EMA y HMA requieren optimización para diferentes productos y plazos.
Heikin-Ashi no puede evitar completamente el riesgo de fuga falsa.
La estrategia puede mejorarse en los siguientes aspectos:
Utilice más indicadores como MACD, KDJ para mejorar la precisión de la tendencia.
Añadir más filtros tales como el volumen, ATR para reducir las fallas.
Optimizar los parámetros de las medias móviles en función de los productos y los plazos.
Ajuste el porcentaje de stop loss para un mejor comportamiento de stop loss.
Considere las características de toma de ganancias como el movimiento de la parada de ganancias y la toma parcial de ganancias.
Prueba de formas alternativas para calcular la base de costos de posición para la optimización.
La estrategia de seguimiento de tendencias identifica tendencias utilizando cruces de promedios móviles y optimiza el rendimiento a través de Heikin-Ashi y stop loss móviles. Es adecuado para el comercio de tendencias a medio y largo plazo, y puede mejorarse aún más a través de la puesta a punto de parámetros y la expansión de características. Pero los usuarios deben ser conscientes de los riesgos de reversiones y stop loss inadecuados. En general, proporciona un marco universal y personalizable para el comercio de tendencias que funciona en diferentes productos y marcos de tiempo. Se necesita una prueba de parámetros adecuada al aplicarlo.
/*backtest start: 2022-10-30 00:00:00 end: 2023-11-05 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("𝐉𝐔𝐈𝐂𝐘 𝐓𝐑𝐄𝐍𝐃", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=15) //Heikin Ashi Option ha = input(true, title = "Heikin Ashi Source") src = ha ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, barmerge.gaps_off, barmerge.lookahead_off) : close usestoploss = input(true, title="Stop Loss") //EMA len1 = input.int(9, minval=1, title="EMA Length") ema = ta.ema(src, len1) emaline = plot(ema, title="EMA", color=color.blue, linewidth=2) //HMA len2 = input.int(69, minval=1, title="HMA Length") hma = ta.wma(2*ta.wma(src, len2/2)-ta.wma(src, len2), math.floor(math.sqrt(len2))) hmaline = plot(hma, title="HMA", color=color.purple, linewidth=2) fillcolor = hma < ema ? color.blue : color.purple fill(emaline, hmaline, title="EMA Fill", color=color.new(fillcolor, 80), editable=true) //Stop Loss Conditions stoplosspercent = input.float(title="Stop Loss (%)", defval=-6.5, minval=-50, maxval=0, step=.1) / 100 stoploss = strategy.position_avg_price * (1 + stoplosspercent) stop = stoploss > close and stoploss[1] < close[1] and strategy.position_size > 0 and usestoploss //Buy Sell Conditions buy = hma < ema sell = hma > ema //Trades and Alerts if buy strategy.entry("Long Position", strategy.long, comment="BUY") // alert("{\n\"message_type\": \"bot\",\n\"bot_id\": 6477543,\n\"email_token\": \"9b842a1b-9cb4-48ac-9ed4-524c98557e5f\",\n\"delay_seconds\": 0\n}", alert.freq_once_per_bar) if sell and strategy.openprofit > 0 strategy.close("Long Position", comment="SELL") // alert("{\n\"action\": \"close_at_market_price\",\n\"message_type\": \"bot\",\n\"bot_id\": 6477543,\n\"email_token\": \"9b842a1b-9cb4-48ac-9ed4-524c98557e5f\",\n\"delay_seconds\": 0\n}", alert.freq_once_per_bar) if stop strategy.close("Long Position", comment="STOP") // alert("{\n\"action\": \"close_at_market_price\",\n\"message_type\": \"bot\",\n\"bot_id\": 6477543,\n\"email_token\": \"9b842a1b-9cb4-48ac-9ed4-524c98557e5f\",\n\"delay_seconds\": 0\n}", alert.freq_once_per_bar) //Alternate Labels var pos = 0 if buy and pos <= 0 pos := 1 if sell and pos >= 0 pos := -1 buylabel = pos == 1 and (pos != 1)[1] selllabel = pos == -1 and (pos != -1)[1] //Plot Labels plotshape(buylabel, style=shape.labelup, location=location.belowbar, color=color.blue, text="BUY", textcolor=color.white, size=size.tiny) plotshape(selllabel, style=shape.labeldown, location=location.abovebar, color=color.purple, text="SELL", textcolor=color.white, size=size.tiny) plotshape(stop, style=shape.labeldown, location=location.abovebar, color=color.yellow, text="STOP", textcolor=color.white, size=size.tiny)