Esta estrategia se basa en dos indicadores de Super Tendencia con diferentes configuraciones de parámetros y el indicador CCI, con el objetivo de capturar las fluctuaciones de precios a corto plazo para la negociación de alta frecuencia. El indicador Super Tendencia juzga la dirección de la tendencia dinámicamente mediante el cálculo del ATR, mientras que el indicador CCI se utiliza para determinar si el mercado está sobrecomprado o sobrevendido. La estrategia combina ambos para formar señales de negociación.
Utilice 14 períodos ATR para calcular la súper tendencia rápida, con un factor establecido en 3; utilice 14 períodos ATR para calcular la súper tendencia lenta, con un factor establecido en 6. La súper tendencia rápida es más sensible y puede capturar cambios a corto plazo; la súper tendencia lenta determina la dirección de la tendencia principal.
Cuando la súper tendencia rápida cruza por debajo del precio, y la súper tendencia lenta sigue por encima del precio, se juzga como una posible señal de reversión para ir largo; cuando la súper tendencia rápida cruza por encima del precio, y la súper tendencia lenta sigue por debajo del precio, se juzga como una posible señal de reversión para ir corto.
Al mismo tiempo, use el CCI para juzgar si el mercado está sobrecomprado o sobrevendido. El CCI por encima de 100 indica un mercado sobrecomprado, mientras que por debajo de -100 significa un mercado sobrevendido. Las señales CCI se combinan para filtrar las fallas falsas.
La probabilidad de que el indicador Super Trend emita una señal de reversión es mayor cuando el mercado está sobrecomprado o sobrevendido.
La combinación de Super Trend para determinar los puntos de reversión de la tendencia y CCI para juzgar las condiciones de sobrecompra/sobreventa puede filtrar eficazmente las falsas rupturas y mejorar la calidad de la señal.
Los cruces rápidos y lentos de Super Trend forman señales comerciales para lograr una entrada y salida de alta frecuencia.
Los parámetros del CCI y los parámetros del Super Trend pueden ajustarse de forma flexible para adaptarse a las diferentes condiciones del mercado.
La idea de la estrategia es clara y fácil de entender, y el ajuste de parámetros también es relativamente simple.
La Super Tendencia en sí tiene un efecto de retraso, posiblemente perdiendo la primera oportunidad de reversión.
El CCI tiene riesgos de devolución, y las fluctuaciones excesivas también pueden causar operaciones repetitivas.
El comercio de alta frecuencia es propenso a aumentar la frecuencia de las transacciones y los costes de negociación.
La combinación de parámetros se puede recorrer y optimizar en función del aprovechamiento máximo o la relación ganancia/pérdida para encontrar el parámetro óptimo.
Los métodos de aprendizaje automático como Random Forest se pueden usar para la selección de características en parámetros para lograr la optimización automática de parámetros.
Explorar la limitación del número máximo de posiciones abiertas dentro de un determinado ciclo para controlar los riesgos.
La estrategia hace pleno uso del indicador de Super Tendencia para determinar los puntos de reversión de tendencia a corto plazo, complementado por el indicador CCI para filtrar las señales. Cuando las configuraciones de parámetros son razonables, puede lograr una negociación eficiente a corto plazo. Pero también debe tener cuidado con los riesgos derivados de la negociación excesiva y mejorar continuamente el rendimiento de la estrategia a través del ajuste de parámetros y la optimización del algoritmo.
/*backtest start: 2023-02-19 00:00:00 end: 2024-02-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Supertrend & CCI Strategy Scalp", overlay=true) // SuperTrend Settings atrLength1 = input(14, "ATR Length 1") factor1 = input(3.0, "Factor 1" ) atrLength2 = input(14, "ATR Length 2") factor2 = input(6.0, "Factor 2") // Calculate SuperTrend 1 [superTrend1, direction1] = ta.supertrend(factor1, atrLength1) // // Calculate SuperTrend 2 [superTrend2, direction2] = ta.supertrend(factor2, atrLength2) // superTrend1 := barstate.isfirst ? na : superTrend1 // 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) // bodyMiddle1 = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none) // fill(bodyMiddle1, upTrend1, color.new(color.green, 90), fillgaps = false) // fill(bodyMiddle1, downTrend1, color.new(color.red, 90), fillgaps = false) // superTrend2 := barstate.isfirst ? na : superTrend2 // upTrend2 = plot(direction1 < 0 ? superTrend2 : na, "Up Trend", color = color.green, style = plot.style_linebr) // downTrend2 = plot(direction1 < 0 ? na : superTrend2, "Down Trend", color = color.red, style = plot.style_linebr) // bodyMiddle2 = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none) // fill(bodyMiddle2, upTrend2, color.new(color.green, 90), fillgaps = false) // fill(bodyMiddle2, downTrend2, color.new(color.red, 90), fillgaps = false) // CCI Settings //cciLength = input.int(14, title="CCI Length") cciLevel = input.int(100, title="CCI Level") // Calculate CCI length = input.int(20, minval=1) src = input(hlc3, title="Source") ma = ta.sma(src, length) cci = (src - ma) / (0.015 * ta.dev(src, length)) //plot(cci, "CCI", color=#2962FF) //band1 = hline(100, "Upper Band", color=#787B86, linestyle=hline.style_dashed) //hline(0, "Middle Band", color=color.new(#787B86, 50)) //band0 = hline(-100, "Lower Band", color=#787B86, linestyle=hline.style_dashed) //fill(band1, band0, color=color.rgb(33, 150, 243, 90), title="Background") ma(source, length, type) => switch type "SMA" => ta.sma(source, length) "EMA" => ta.ema(source, length) "SMMA (RMA)" => ta.rma(source, length) "WMA" => ta.wma(source, length) "VWMA" => ta.vwma(source, length) typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing") smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="Smoothing") smoothingLine = ma(cci, smoothingLength, typeMA) //plot(smoothingLine, title="Smoothing Line", color=#f37f20, display=display.none) // Entry conditions longCondition = superTrend1 > close and superTrend2 < close and smoothingLine < -100 shortCondition = superTrend1 < close and superTrend2 > close and smoothingLine > 100 /// Initialize variables to track trade direction var bool isLong = na var bool isShort = na // Strategy entry and exit if (longCondition) strategy.entry("Long", strategy.long) isLong := true isShort := false if (shortCondition) strategy.entry("Short", strategy.short) isShort := true isLong := false // Close Long positions if (isLong) strategy.close("Long", when = superTrend1 < close or superTrend2 > close or cci > 100) // Close Short positions if (isShort) strategy.close("Short", when = superTrend1 > close or superTrend2 < close or cci < -100) // Plotting plot(superTrend1, color=color.blue, title="SuperTrend 1") plot(superTrend2, color=color.red, title="SuperTrend 2") //plot(cci, color=color.orange, title="CCI")