Negociação de curto prazo com estratégias Supertrend e CCI


Data de criação: 2024-02-26 10:39:49 última modificação: 2024-02-26 10:39:49
cópia: 0 Cliques: 927
1
focar em
1617
Seguidores

Negociação de curto prazo com estratégias Supertrend e CCI

Visão geral

A estratégia baseia-se em dois diferentes parâmetros de configuração, o indicador de tendência e o indicador CCI, com o objetivo de capturar oscilações de preços de linhas curtas e realizar negociações de alta frequência. O indicador de tendência determina a direção da tendência dos preços através do cálculo dinâmico do ATR, enquanto o indicador CCI é usado para determinar se o mercado está sobrecomprando ou sobrevendendo. A estratégia combina os dois para formar um sinal de negociação.

Princípio da estratégia

  • O ATR de 14 ciclos calcula o excesso rápido, com um fator de configuração de 3; o ATR de 14 ciclos calcula o excesso lento, com um fator de configuração de 6. O excesso rápido é mais sensível e pode capturar mudanças de curto prazo; o excesso lento determina a direção da tendência principal.

  • Quando a supertrend rápida atravessa o preço e a supertrend lenta ainda está acima do preço, considere como um possível sinal de reversão, faça mais; quando a supertrend rápida atravessa o preço e a supertrend lenta ainda está abaixo do preço, considere como um possível sinal de reversão, faça um espaço.

  • Ao mesmo tempo, usar o CCI para determinar a situação de sobrecompra e sobrevenda no mercado. Quando o CCI é superior a 100, o mercado é sobrecomprado, e quando é inferior a 100, o mercado é sobrevendido. Combinado com o filtro de sinal do CCI, o falso rompimento.

  • A lógica central da estratégia é que os indicadores de tendência são mais propensos a emitir sinais de reversão em situações de sobrevenda e sobrecompra.

Análise de vantagens

  • A combinação de um ultra-trend para julgar o ponto de reversão da tendência e um ultra-comprado para julgar o ultra-vendido pode filtrar eficazmente as brechas falsas e melhorar a qualidade do sinal.

  • Os sinais de transação são formados por um cruzamento entre as tendências ultrapassadas, permitindo a entrada e saída de alta frequência.

  • Os parâmetros do CCI e do supertrend podem ser ajustados com flexibilidade para se adaptar a diferentes condições de mercado.

  • A estratégia é clara e fácil de entender, e o ajuste de parâmetros é simples.

Riscos e soluções

  • A supertrend tem um atraso em si e pode perder a primeira oportunidade de reversão. Pode-se experimentar a redução do ciclo ATR.

  • O CCI apresenta um risco de reajuste, e oscilações excessivas também podem causar transações repetidas. Pode-se experimentar o aumento dos parâmetros do CCI ou ajustar os limites.

  • A alta frequência de negociação pode aumentar a frequência de negociação e a carga de taxas. Recomenda-se ajustar o tempo de manutenção da posição e reduzir a frequência de abertura de posições.

Otimização de ideias

  • A combinação de parâmetros pode ser optimizada em busca de parâmetros ótimos com base em indicadores como a máxima retração ou a taxa de ganho-perda.

  • Pode ser combinado com métodos de aprendizagem de máquina, como a seleção de características para parâmetros de florestas aleatórias, para a otimização automática dos parâmetros.

  • Pode-se explorar a possibilidade de limitar o número máximo de posições abertas em um determinado período para controlar o risco.

Resumir

A estratégia aproveita ao máximo o indicador de tendência ultra para determinar o ponto de reversão de tendência de curto prazo, auxiliado pelo sinal de filtragem do indicador CCI. Quando a configuração dos parâmetros é razoável, a negociação de linha curta de alta eficiência pode ser alcançada.

Código-fonte da estratégia
/*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")