Esta estratégia baseia-se em dois indicadores de Super Tendência com configurações de parâmetros diferentes e no indicador CCI, com o objetivo de capturar flutuações de preços de curto prazo para negociações de alta frequência.
Use 14 períodos ATR para calcular a Super Tendência rápida, com um fator definido como 3; use 14 períodos ATR para calcular a Super Tendência lenta, com um fator definido como 6. A Super Tendência rápida é mais sensível e pode capturar mudanças de curto prazo; a Super Tendência lenta determina a direção da tendência principal.
Quando a Super Tendência rápida cruza abaixo do preço, e a Super Tendência lenta ainda está acima do preço, é julgada como um possível sinal de reversão para ir longo; quando a Super Tendência rápida cruza acima do preço, e a Super Tendência lenta ainda está abaixo do preço, é julgada como um possível sinal de reversão para ir curto.
Ao mesmo tempo, use o CCI para julgar se o mercado está sobrecomprado ou sobrevendido. CCI acima de 100 indica um mercado sobrecomprado, enquanto abaixo de -100 significa um mercado sobrevendido.
A probabilidade de o indicador Super Trend emitir um sinal de reversão é maior quando o mercado está sobrecomprado ou sobrevendido.
A combinação de Super Trend para determinar pontos de reversão da tendência e CCI para julgar condições de sobrecompra/supervenda pode filtrar efetivamente falsas rupturas e melhorar a qualidade do sinal.
Crossovers Super Trend rápidos e lentos formam sinais de negociação para alcançar entrada e saída de alta frequência.
Os parâmetros CCI e Super Trend podem ser ajustados de forma flexível para se adaptarem às diferentes condições do mercado.
A ideia de estratégia é clara e fácil de entender, e o ajuste de parâmetros também é relativamente simples.
A própria Super Tendência tem efeito retardador, possivelmente perdendo a primeira oportunidade de reversão.
O CCI tem riscos de recompra, e as flutuações excessivas também podem causar negociações repetitivas.
A negociação de alta frequência tende a aumentar a frequência das transacções e os custos de negociação.
A combinação de parâmetros pode ser percorrida e otimizada com base no drawdown máximo ou na relação lucro/perda para encontrar o parâmetro ideal.
Métodos de aprendizado de máquina como Random Forest podem ser usados para seleção de recursos em parâmetros para obter otimização automática de parâmetros.
Explorar a limitação do número máximo de posições abertas num determinado ciclo para controlar os riscos.
A estratégia faz pleno uso do indicador Super Trend para determinar pontos de reversão de tendência de curto prazo, complementado pelo indicador CCI para filtrar sinais. Quando as configurações de parâmetros são razoáveis, pode alcançar uma negociação eficiente de curto prazo. Mas também precisa ser cauteloso com os riscos decorrentes de negociação excessiva e melhorar continuamente o desempenho da estratégia através do ajuste de parâmetros e otimização de algoritmos.
/*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")