
Esta estrategia es una estrategia de comercio cuantitativa que combina el triple indicador de tendencia de super, el indicador de la nube de Ichimoku, el indicador de la amplitud real media (ATR) y el promedio móvil del índice (EMA). Esta estrategia determina la dirección de la tendencia del mercado a través del triple indicador de tendencia de super, el indicador de la nube de Ichimoku determina la presión de soporte, el indicador de ATR establece el stop loss y el indicador de EMA confirma la tendencia, formando un sistema de comercio más completo.
La lógica central de esta estrategia se basa en el juicio de tres indicadores de tendencia superior. Los indicadores de tendencia superior juzgan la dirección de la tendencia mediante la comparación de la relación entre el precio y la magnitud de la amplitud real promedio en un período determinado.
Además, el índice de densidad de la nube de Ichimoku determina la fuerza y la debilidad de la tendencia actual, eliminando así algunas señales falsas. El índice ATR se utiliza para establecer el punto de parada. El índice EMA se utiliza para confirmar la tendencia de la línea media y larga.
Concretamente, hacer más cuando el precio está por encima de la recta superior de los tres grupos de indicadores de tendencia superior; hacer un vacío cuando el precio está por debajo de la recta inferior de los tres grupos de indicadores de tendencia superior. Al mismo tiempo, se requiere que el precio esté por encima o por debajo de la nube de Ichimoku, filtrando las señales de incertidumbre.
Los parámetros de los indicadores de la triple superación de tendencia se configuran de manera diferente, lo que permite filtrar eficazmente el ruido en el mercado y determinar con mayor precisión la dirección de la tendencia.
El indicador de la nube de Ichimoku determina la tendencia como fuerte o débil, evitando falsas rupturas. La configuración de stop loss de ATR es razonable, evitando al máximo las pérdidas masivas.
Los indicadores EMA ayudan a determinar la dirección de la tendencia de la línea media larga y se verifican mutuamente con los juicios de la tendencia hiper, mejorando aún más la fiabilidad de la señal.
La combinación de varios indicadores, entre los diferentes indicadores se pueden verificar mutuamente, para juzgar la tendencia del mercado, la señal es más confiable.
Aunque se incluye el juicio del indicador de la nube de Ichimoku, también existe el riesgo de que la densidad de la nube entre en la zona de invalidez. En este caso, el indicador ATR controlará la pérdida parcial en un cierto rango.
Cuando el mercado fluctúa fuertemente, los puntos de parada establecidos en el indicador ATR pueden ser directamente activados, lo que aumenta la tasa de pérdida de la estrategia. En este caso, se puede ajustar adecuadamente los parámetros ATR o aumentar el rango de parada.
Si los parámetros del indicador de la triple tendencia se ajustan incorrectamente, se pueden generar muchas señales no válidas. Esto requiere buscar la mejor combinación de parámetros a través de una gran cantidad de retroalimentación.
Se pueden añadir otros indicadores, como el índice de fluctuación, el índice de banda de Brin, etc., para ayudar a filtrar la señal y mejorar la fiabilidad.
Se puede ajustar dinámicamente el margen de pérdidas en grandes fluctuaciones, reduciendo la tasa de pérdidas mediante la mejora de la forma de calcular el indicador ATR.
Se pueden incorporar modelos de aprendizaje automático para juzgar las señales de compra y venta mediante el entrenamiento de datos históricos, reducir el impacto de la configuración de parámetros artificiales y mejorar la precisión de la señal.
Esta estrategia utiliza la triple supertrend, la nube de Ichimoku, el indicador ATR y las cuatro partes del indicador EMA. Para determinar la dirección de la tendencia del mercado, las señales se verifican entre sí a través de diferentes indicadores. El riesgo de control de pérdidas de la nube de Ichimoku y el ATR, la EMA ayuda a confirmar la tendencia de la línea media. Esta señal estratégica es más confiable y adecuada para la línea media.
/*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")