O recurso está a ser carregado... Carregamento...

Estratégia de negociação filtrada com múltiplos indicadores com Bollinger Bands e Woodies CCI

Autora:ChaoZhang, Data: 2024-12-27 15:32:30
Tags:BBCCIMAOBVATRSMATPSL

img

Resumo

Esta estratégia é um sistema de negociação de múltiplos indicadores que combina Bandas de Bollinger, Woodies CCI (Índice do Canal de Commodities), Médias Móveis (MA) e Volume no Balanço (OBV). Ele usa Bandas de Bollinger para fornecer intervalos de volatilidade do mercado, indicadores CCI para filtragem de sinais e combina sistemas de MA com confirmação de volume para executar negociações quando as tendências do mercado são claras. Além disso, ele emprega ATR para colocação dinâmica de stop-loss e take-profit para controlar efetivamente o risco.

Princípios de estratégia

A lógica central baseia-se nos seguintes elementos-chave:

  1. Utiliza duas bandas de Bollinger de desvio padrão (1x e 2x) para construir canais de volatilidade de preços
  2. Utiliza indicadores CCI de 6 e 14 períodos como filtros de sinal, exigindo confirmação de ambos os períodos
  3. Combina médias móveis de 50 e 200 períodos para determinar as tendências do mercado
  4. Confirma tendências de volume através de OBV suavizado de 10 períodos
  5. O valor da posição em risco deve ser calculado de acordo com o método de cálculo da posição em risco.

Vantagens da estratégia

  1. A validação cruzada de vários indicadores reduz significativamente os falsos sinais
  2. A combinação das bandas de Bollinger e do CCI fornece um julgamento preciso da volatilidade do mercado
  3. Os sistemas de MA a longo e a curto prazo captam eficazmente as principais tendências
  4. OBV confirma suporte de volume, aumentando a confiabilidade do sinal
  5. A definição dinâmica de stop-loss e take-profit adapta-se às diferentes condições de mercado
  6. Sinais comerciais claros com execução padronizada, adequados para aplicação quantitativa

Riscos estratégicos

  1. Indicadores múltiplos podem levar a sinais atrasados
  2. Previsão de prejuízos
  3. Risco de sobreajuste da otimização dos parâmetros
  4. O risco de perda de liquidez deve ser calculado de acordo com o método de classificação do risco. Medidas de atenuação:
  • Ajustar dinamicamente os parâmetros dos indicadores para os diferentes ciclos de mercado
  • Monitorização da retirada para controlo de posição
  • Validação regular de parâmetros
  • Estabelecer limites máximos de perdas

Orientações de otimização

  1. Introduzir indicadores de volatilidade para ajustar posições em períodos de alta volatilidade
  2. Adicionar filtragem de força de tendência para evitar transações de mercado variáveis
  3. Otimizar a seleção do período CCI para melhorar a sensibilidade do sinal
  4. Melhorar a gestão dos lucros/perdas com a captação parcial dos lucros
  5. Implementar um sistema de alerta de anomalias de volume

Resumo

Este é um sistema de negociação completo baseado em combinações de indicadores técnicos que melhora a precisão de negociação através de múltiplas confirmações de sinal. O design da estratégia é razoável com controle de risco adequado e tem bom valor prático de aplicação. Recomenda-se testar com posições conservadoras em negociação ao vivo e otimizar continuamente os parâmetros com base nas condições do mercado.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy(shorttitle="BB Debug + Woodies CCI Filter", title="Debug Buy/Sell Signals with Woodies CCI Filter", overlay=true)

// Input Parameters
length = input.int(20, minval=1, title="BB MA Length")
src = input.source(close, title="BB Source")
mult1 = input.float(1.0, minval=0.001, maxval=50, title="BB Multiplier 1 (Std Dev 1)")
mult2 = input.float(2.0, minval=0.001, maxval=50, title="BB Multiplier 2 (Std Dev 2)")
ma_length = input.int(50, minval=1, title="MA Length")
ma_long_length = input.int(200, minval=1, title="Long MA Length")
obv_smoothing = input.int(10, minval=1, title="OBV Smoothing Length")
atr_length = input.int(14, minval=1, title="ATR Length") // ATR Length for TP/SL

// Bollinger Bands
basis = ta.sma(src, length)
dev1 = mult1 * ta.stdev(src, length)
dev2 = mult2 * ta.stdev(src, length)

upper_1 = basis + dev1
lower_1 = basis - dev1
upper_2 = basis + dev2
lower_2 = basis - dev2

plot(basis, color=color.blue, title="BB MA")
p1 = plot(upper_1, color=color.new(color.green, 80), title="BB Upper 1")
p2 = plot(lower_1, color=color.new(color.green, 80), title="BB Lower 1")
p3 = plot(upper_2, color=color.new(color.red, 80), title="BB Upper 2")
p4 = plot(lower_2, color=color.new(color.red, 80), title="BB Lower 2")

fill(p1, p2, color=color.new(color.green, 90))
fill(p3, p4, color=color.new(color.red, 90))

// Moving Averages
ma_short = ta.sma(close, ma_length)
ma_long = ta.sma(close, ma_long_length)
plot(ma_short, color=color.orange, title="MA Short")
plot(ma_long, color=color.yellow, title="MA Long")

// OBV and Smoothing
obv = ta.cum(ta.change(close) > 0 ? volume : ta.change(close) < 0 ? -volume : 0)
obv_smooth = ta.sma(obv, obv_smoothing)

// Debugging: Buy/Sell Signals
debugBuy = ta.crossover(close, ma_short)
debugSell = ta.crossunder(close, ma_short)

// Woodies CCI
cciTurboLength = 6
cci14Length = 14
cciTurbo = ta.cci(src, cciTurboLength)
cci14 = ta.cci(src, cci14Length)

// Filter: Only allow trades when CCI confirms the signal
cciBuyFilter = cciTurbo > 0 and cci14 > 0
cciSellFilter = cciTurbo < 0 and cci14 < 0

finalBuySignal = debugBuy and cciBuyFilter
finalSellSignal = debugSell and cciSellFilter

// Plot Debug Buy/Sell Signals
plotshape(finalBuySignal, title="Filtered Buy", location=location.belowbar, color=color.lime, style=shape.triangleup, size=size.normal)
plotshape(finalSellSignal, title="Filtered Sell", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.normal)

// Change candle color based on filtered signals
barcolor(finalBuySignal ? color.lime : finalSellSignal ? color.red : na)

// ATR for Stop Loss and Take Profit
atr = ta.atr(atr_length)
tp_long = close + 2 * atr  // Take Profit for Long = 2x ATR
sl_long = close - 1 * atr  // Stop Loss for Long = 1x ATR
tp_short = close - 2 * atr // Take Profit for Short = 2x ATR
sl_short = close + 1 * atr // Stop Loss for Short = 1x ATR

// Strategy Execution
if (finalBuySignal)
    strategy.entry("Buy", strategy.long)
    strategy.exit("Take Profit/Stop Loss", "Buy", limit=tp_long, stop=sl_long)

if (finalSellSignal)
    strategy.entry("Sell", strategy.short)
    strategy.exit("Take Profit/Stop Loss", "Sell", limit=tp_short, stop=sl_short)

// Check for BTC/USDT pair
isBTCUSDT = syminfo.ticker == "BTCUSDT"

// Add alerts only for BTC/USDT
alertcondition(isBTCUSDT and finalBuySignal, title="BTCUSDT Buy Signal", message="Buy signal detected for BTCUSDT!")
alertcondition(isBTCUSDT and finalSellSignal, title="BTCUSDT Sell Signal", message="Sell signal detected for BTCUSDT!")

Relacionados

Mais.