Estratégia de negociação de tempo inteligente de crossover de indicador duplo adaptável

RSI CCI EMA TIMEFRAME THRESHOLD
Data de criação: 2025-02-19 10:56:59 última modificação: 2025-02-19 10:56:59
cópia: 2 Cliques: 435
1
focar em
1617
Seguidores

Estratégia de negociação de tempo inteligente de crossover de indicador duplo adaptável

Visão geral

Trata-se de uma estratégia de negociação auto-adaptativa baseada em indicadores de tecnologia dupla RSI e CCI. A estratégia monitora o estado cruzado dos indicadores RSI e CCI em diferentes períodos de tempo, combinando a tendência da linha de equilíbrio EMA, para construir um sistema de negociação completo. A estratégia possui características de forte auto-adaptação, estabilidade do sinal e outras características, e é capaz de capturar efetivamente oportunidades de supera compra e venda no mercado.

Princípio da estratégia

A lógica central da estratégia é a seguinte:

  1. Adaptação do ciclo de tempo: ajuste dinâmico dos parâmetros do RSI e do CCI de acordo com diferentes períodos de tempo (de 1 minuto a 4 horas).
  2. Confirmação de duplo indicador: usar uma combinação de RSI (indicador de força relativa) e CCI (indicador de tendência ascendente) para filtrar o sinal de negociação. O sinal de negociação é gerado quando o RSI e o CCI simultaneamente satisfazem determinadas condições.
  3. Verificação de continuidade do sinal: para garantir a estabilidade do sinal, configure o tempo mínimo de permanência (stayTimeFrames).
  4. Stop loss dinâmico: o ponto de stop loss é configurado dinamicamente com base nos níveis de RSI e CCI no momento da entrada.
  5. Confirmação de tendência: Use o EMA de 200 ciclos como referência de tendência.

Vantagens estratégicas

  1. Adaptabilidade: A estratégia pode ajustar os parâmetros automaticamente de acordo com diferentes períodos de tempo, sendo mais adaptável.
  2. Alta confiabilidade do sinal: a confiabilidade do sinal foi significativamente aumentada através da confirmação cruzada de indicadores técnicos duplos.
  3. Controle de risco perfeito: o mecanismo de stop loss dinâmico permite o controle eficaz do risco.
  4. As regras de operação são claras: as condições de entrada e saída são claras, facilitando a operação.
  5. Boa escalabilidade: A estrutura de políticas é flexível, podendo ser adicionada nova condição de filtragem conforme necessário.

Risco estratégico

  1. Sensibilidade de parâmetros: os parâmetros ótimos podem variar em diferentes ambientes de mercado.
  2. Risco de oscilação horizontal: pode produzir falsos sinais durante oscilações de mercado.
  3. Efeitos do ponto de deslizamento: as transações de alta frequência podem sofrer efeitos de deslizamento.
  4. Atraso de sinal: o mecanismo de confirmação múltipla pode causar um pequeno atraso no tempo de entrada.
  5. Dependência do cenário de mercado: o desempenho em um mercado de forte tendência pode ser melhor do que em um mercado de turbulência.

Direção de otimização da estratégia

  1. Adaptação dos parâmetros: pode ser introduzido um mecanismo de otimização dos parâmetros de adaptação, ajustando os parâmetros de acordo com a dinâmica do mercado.
  2. Identificação do cenário de mercado: adição de módulos de identificação do cenário de mercado para diferentes estratégias de negociação em diferentes estados de mercado.
  3. Adaptação de taxa de flutuação: introdução de indicadores de taxa de flutuação, ajustando o parâmetro de parada e perda de acordo com o tamanho da taxa de flutuação.
  4. Filtragem de sinais: adicionar mais indicadores técnicos e reconhecimento de formas para filtrar falsos sinais.
  5. Gerenciamento de riscos: aperfeiçoamento do programa de gestão de fundos, aumento do tempo de detenção e controle de posições.

Resumir

A estratégia, combinando os benefícios dos indicadores RSI e CCI, constrói um robusto sistema de negociação. As características auto-adaptáveis da estratégia e o mecanismo de controle de risco perfeito tornam-na de boa prática. Com otimização e aperfeiçoamento contínuos, a estratégia tem a perspectiva de obter um melhor desempenho em negociações reais.

Código-fonte da estratégia
/*backtest
start: 2025-01-19 00:00:00
end: 2025-02-18 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("RSI & CCI Strategy with Alerts", overlay=true)

// Detect current chart timeframe
tf = timeframe.period

// Define settings for different timeframes
rsiLength = tf == "1" ? 30 : tf == "5" ? 30 : tf == "15" ? 30 : tf == "30" ? 30 : 30  // Default
cciLength = tf == "1" ? 15 : tf == "5" ? 20 : tf == "15" ? 20 : tf == "30" ? 20 : 20  // Default
cciBuyThreshold = tf == "1" ? -100 : tf == "5" ? -100 : tf == "15" ? -100 : tf == "30" ? -100 : -100
cciSellThreshold = tf == "1" ? 100 : tf == "5" ? 100 : tf == "15" ? 100 : tf == "30" ? 100 : 100  // Default
stayTimeFrames = tf == "1" ? 1 : tf == "5" ? 1 : tf == "15" ? 1 : tf == "30" ? 1 : tf == "240" ? 1 : 2  // Default
stayTimeFramesOver =tf == "1" ? 1 : tf == "5" ? 2 : tf == "15" ? 2 : tf == "30" ? 3 : 2 // Default

// Calculate RSI & CCI
rsi = ta.rsi(close, rsiLength)
rsiOver = ta.rsi(close, 14)
cci = ta.cci(close, cciLength)

// EMA 50
ema200 = ta.ema(close, 200)
plot(ema200, color=color.rgb(255, 255, 255), linewidth=2, title="EMA 200")

// CCI candle threshold tracking
var int cciEntryTimeLong = na
var int cciEntryTimeShort = na

// Store entry time when CCI enters the zone
if (cci < cciBuyThreshold)
    if na(cciEntryTimeLong)
        cciEntryTimeLong := bar_index
else
    cciEntryTimeLong := na

if (cci > cciSellThreshold)
    if na(cciEntryTimeShort)
        cciEntryTimeShort := bar_index
else
    cciEntryTimeShort := na

// Confirming CCI has stayed in the threshold for required bars
cciStayedBelowNeg100 = not na(cciEntryTimeLong) and (bar_index - cciEntryTimeLong >= stayTimeFrames) and rsi >= 53
cciStayedAbove100 = not na(cciEntryTimeShort) and (bar_index - cciEntryTimeShort >= stayTimeFrames) and rsi <= 47


// CCI & RSI candle threshold tracking for Buy Over and Sell Over signals
var int buyOverEntryTime = na
var int sellOverEntryTime = na

// Track entry time when RSI and CCI conditions are met
if (rsiOver <= 31 and cci <= -120)
    if na(buyOverEntryTime)
        buyOverEntryTime := bar_index
else
    buyOverEntryTime := na

if (rsiOver >= 69 and cci >= 120)
    if na(sellOverEntryTime)
        sellOverEntryTime := bar_index
else
    sellOverEntryTime := na

// Confirm that conditions are met for the required stayTimeFrames
buyOverCondition = not na(buyOverEntryTime) and (bar_index - buyOverEntryTime >= stayTimeFramesOver)
sellOverCondition = not na(sellOverEntryTime) and (bar_index - sellOverEntryTime <= stayTimeFramesOver)

//Buy and sell for over bought or sell 
conditionOverBuy = buyOverCondition
conditionOverSell = sellOverCondition

// Buy and sell conditions
buyCondition = cciStayedBelowNeg100
sellCondition = cciStayedAbove100

// // Track open positions
var bool isLongOpen = false
var bool isShortOpen = false

// // Strategy logic for backtesting
// if (buyCondition and not isLongOpen)
//     strategy.entry("Long", strategy.long)
//     isLongOpen := true
//     isShortOpen := false

// if (sellCondition and not isShortOpen)
//     strategy.entry("Short", strategy.short)
//     isShortOpen := true
//     isLongOpen := false

// // Close positions based on EMA 50
// if (isLongOpen and exitLongCondition)
//     strategy.close("Long")
//     isLongOpen := false

// if (isShortOpen and exitShortCondition)
//     strategy.close("Short")
//     isShortOpen := false



// Track RSI at position entry
var float entryRSILong = na
var float entryRSIShort = na

// Track CCI at position entry
var float entryCCILong = na
var float entryCCIShort = na

if (buyOverCondition and not isLongOpen)
    strategy.entry("Long", strategy.long)
    entryRSILong := rsi  // Store RSI at entry
    entryCCILong := cci
    isLongOpen := true
    isShortOpen := false

if (sellOverCondition and not isShortOpen)
    strategy.entry("Short", strategy.short)
    entryRSIShort := rsi  // Store RSI at entry
    entryCCIShort := cci  // Stpre CCI at entry
    isShortOpen := true
    isLongOpen := false

exitLongRSICondition = isLongOpen and not na(entryRSILong) and rsi >= (entryRSILong + 12)  or rsi <= (entryRSILong -8)
exitShortRSICondition = isShortOpen and not na(entryRSIShort) and rsi <= (entryRSIShort - 12)  or rsi >= (entryRSIShort +8)

exitLongCCICondition = isLongOpen and not na(entryCCILong) and cci <= (entryCCILong -100)
exitShortCCICondition = isShortOpen and not na(entryCCIShort) and cci >= (entryCCIShort +100)

// Close positions based on EMA 50 or RSI change
if (isLongOpen and (exitLongRSICondition) or (exitLongCCICondition))
    strategy.close("Long")
    isLongOpen := false
    entryRSILong := na
    entryCCILong := na
    isLongOpen := false

if (isShortOpen and (exitShortRSICondition) or (exitShortCCICondition))
    strategy.close("Short")
    isShortOpen := false
    entryRSIShort := na
    entryCCIShort := na
    isShortOpen := false



// Plot buy and sell signals
plotshape(buyCondition, style=shape.labelup, location=location.belowbar, color=color.green, size=size.large, title="Buy Signal", text="BUY")
plotshape(sellCondition, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.large, title="Sell Signal", text="SELL")

//Plot buy and sell OverBought
plotshape(conditionOverBuy, style=shape.labelup, location=location.belowbar, color=color.rgb(255, 238, 0), size=size.large, title="OverBuy Signal", text="Over Sell")
plotshape(conditionOverSell, style=shape.labeldown, location=location.abovebar, color=color.rgb(186, 40, 223), size=size.large, title="OverSell Signal", text="Over Buy")

// Alerts
alertcondition(buyCondition, title="Buy Alert", message="Buy Signal Triggered")
alertcondition(sellCondition, title="Sell Alert", message="Sell Signal Triggered")