Esta estrategia es una estrategia de trading cuantitativa que combina el indicador triple de supertrend, el indicador de la nube de Ichimoku, el indicador de rango verdadero promedio (ATR) y el promedio móvil exponencial (EMA).
La lógica central de esta estrategia se basa en el indicador triple de supertrend. El indicador de supertrend determina la dirección de la tendencia comparando el precio con el rango verdadero promedio dentro de un cierto período. Cuando el precio está por encima de la banda superior, es una señal alcista, y cuando el precio está por debajo de la banda inferior, es una señal bajista. Esta estrategia adopta tres indicadores de supertrend con diferentes parámetros. Las señales de negociación se generan cuando los tres dan señales de compra o venta al mismo tiempo.
Además, el espesor de la nube Ichimoku ayuda a determinar la fuerza de la tendencia actual para filtrar algunas señales falsas.
Específicamente, ir largo cuando el precio está por encima de la banda superior de los tres indicadores de supertrend, y ir corto cuando está por debajo de la banda inferior de los tres. También requiere que el precio esté por encima o por debajo de la nube de Ichimoku para filtrar señales inciertas.
Los indicadores de súper tendencia triples con diferentes ajustes pueden filtrar eficazmente el ruido del mercado y determinar la dirección de la tendencia con mayor precisión.
La nube de Ichimoku determina la fuerza de la tendencia para evitar falsos breakouts.
La EMA ayuda a confirmar la dirección de la tendencia a medio y largo plazo, a verificar las señales de la súper tendencia, mejorando aún más la fiabilidad.
Al combinar múltiples indicadores, las señales son más fiables ya que pueden verificarse entre sí al determinar la tendencia del mercado.
Aunque la nube Ichimoku se añade, todavía existe el riesgo de entrar en la zona inválida si el espesor de la nube se penetra.
Cuando la volatilidad es alta, el stop loss establecido por ATR podría activarse directamente, aumentando así la tasa de pérdida.
Las señales no válidas pueden ocurrir con frecuencia si los parámetros de supertrend se establecen de manera inadecuada.
Se pueden añadir más indicadores como el índice de volatilidad, las bandas de Bollinger para ayudar a filtrar las señales y mejorar la confiabilidad.
Mejorar el cálculo de ATR para ajustar dinámicamente el rango de pérdida de parada durante grandes oscilaciones para reducir la tasa de pérdida.
Añadir un modelo de aprendizaje automático entrenado en datos históricos para juzgar las señales comerciales en lugar de la configuración manual de parámetros.
Esta estrategia combina cuatro partes incluyendo triple supertrend, nube Ichimoku, ATR y EMA. Las señales se verifican a través de indicadores al determinar la tendencia del mercado. Nube Ichimoku y ATR controlan el riesgo de stop loss. EMA confirma la tendencia a medio y largo plazo. Las señales de esta estrategia son relativamente confiables para la tenencia a medio y largo plazo. La stop loss se puede optimizar aún más y se pueden agregar más indicadores de asistencia para obtener un mejor rendimiento de la estrategia.
/*backtest start: 2022-12-20 00:00:00 end: 2023-12-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="HyperTrend", shorttitle="HyperTrend", overlay=true ) // float percent_of_portfo = input.int(2, title = "percent of portfo per order", minval = 0, maxval = 100) / 100 // ichimoku Cloud conversionPeriods = input.int(9, minval=1, title="Conversion Line Length", group = "ichimoku") basePeriods = input.int(26, minval=1, title="Base Line Length", group = "ichimoku") laggingSpan2Periods = input.int(52, minval=1, title="Leading Span B Length", group = "ichimoku") displacement = input.int(26, minval=1, title="Lagging Span", group = "ichimoku") donchian(len) => math.avg(ta.lowest(len), ta.highest(len)) conversionLine = donchian(conversionPeriods) baseLine = donchian(basePeriods) leadLine1 = math.avg(conversionLine, baseLine) leadLine2 = donchian(laggingSpan2Periods) p1 = plot(leadLine1, offset = displacement - 1, color=#A5D6A7, title="Leading Span A", display = display.none) p2 = plot(leadLine2, offset = displacement - 1, color=#ef9a9a, title="Leading Span B", display = display.none) plot(leadLine1 > leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Upper Line", display = display.none) plot(leadLine1 < leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Lower Line", display = display.none) fill(p1, p2, color = leadLine1 > leadLine2 ? color.rgb(67, 160, 72, 59) : color.rgb(244, 67, 54, 70)) // three supertrend //1 atrPeriod1 = input(10, "ATR Length1", group="SuperTrend") factor1 = input.float(1.0, "Factor1", step = 0.01, group="SuperTrend") [supertrend1, direction1] = ta.supertrend(factor1, atrPeriod1) supertrend1 := barstate.isfirst ? na : supertrend1 bodyMiddle1 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none) upTrend1 = plot(direction1 < 0 ? supertrend1 : na, "Up Trend", color = color.green, style = plot.style_linebr) downTrend1 = plot(direction1 < 0 ? na : supertrend1, "Down Trend", color = color.red, style = plot.style_linebr) //2 atrPeriod2 = input(11, "ATR Length2", group="SuperTrend") factor2 = input.float(2.0, "Factor2", step = 0.01, group="SuperTrend") [supertrend2, direction2] = ta.supertrend(factor2, atrPeriod2) supertrend2 := barstate.isfirst ? na : supertrend2 bodyMiddle2 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none) upTrend2 = plot(direction2 < 0 ? supertrend2 : na, "Up Trend", color = color.green, style = plot.style_linebr) downTrend2 = plot(direction2 < 0 ? na : supertrend2, "Down Trend", color = color.red, style = plot.style_linebr) //3 atrPeriod3 = input(12, "ATR Length2", group="SuperTrend") factor3 = input.float(3.0, "Factor2", step = 0.01, group="SuperTrend") [supertrend3, direction3] = ta.supertrend(factor3, atrPeriod3) supertrend3 := barstate.isfirst ? na : supertrend3 bodyMiddle3 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none) upTrend3 = plot(direction3 < 0 ? supertrend3 : na, "Up Trend", color = color.green, style = plot.style_linebr) downTrend3 = plot(direction3 < 0 ? na : supertrend3, "Down Trend", color = color.red, style = plot.style_linebr) // ATR lengthATR = input.int(title="Length (ATR)", defval=14, minval=1, group="ATR") smoothingATR = input.string(title="Smoothing (ATR)", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"], group="ATR") ma_function(sourceATR, lengthATR) => switch smoothingATR "RMA" => ta.rma(sourceATR, lengthATR) "SMA" => ta.sma(sourceATR, lengthATR) "EMA" => ta.ema(sourceATR, lengthATR) => ta.wma(sourceATR, lengthATR) ATR = ma_function(ta.tr(true), lengthATR) plot(ATR, title = "ATR", color=color.new(#B71C1C, 0), display = display.none) // EMA lenEMA = input.int(200, minval=1, title="Length of EMA", group="EMA") srcEMA = input(close, title="Source of EMA", group="EMA") offset = input.int(title="Offset (EMA)", defval=0, minval=-500, maxval=500, group="EMA") outEMA = ta.ema(srcEMA, lenEMA) plot(outEMA, title="EMA", color=color.blue, offset=offset, display = display.none) ma(sourceEMA, lengthEMA, type) => switch type "SMA" => ta.sma(sourceEMA, lengthEMA) "EMA" => ta.ema(sourceEMA, lengthEMA) "SMMA (RMA)" => ta.rma(sourceEMA, lengthEMA) "WMA" => ta.wma(sourceEMA, lengthEMA) "VWMA" => ta.vwma(sourceEMA, lengthEMA) typeMA = input.string(title = "Method (EMA)", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="EMA") smoothingLengthEMA = input.int(title = "Smoothing Length (EMA)", defval = 5, minval = 1, maxval = 100, group="EMA") smoothingLine = ma(outEMA, smoothingLengthEMA, typeMA) plot(smoothingLine, title="Smoothing Line", color=#f37f20, offset=offset, display=display.none) //logic if (open + ATR > supertrend1) and (open + ATR > supertrend2) and (open + ATR > supertrend3) strategy.entry("L", strategy.long) else if (open < supertrend1 + ATR) and (open < supertrend2 + ATR) and (open < supertrend3 + ATR) strategy.entry("S", strategy.short) else strategy.close_all("C")