En la carga de los recursos... Cargando...

Estrategia de negociación filtrada por múltiples indicadores con bandas de Bollinger y CCI de Woodies

El autor:¿ Qué pasa?, fecha: 2024-12-27 15:32:30
Las etiquetas:- ¿ Qué?CCI- ¿Qué es?Vehículo de transporteEl ATRLa SMATPSL

img

Resumen general

Esta estrategia es un sistema de negociación de múltiples indicadores que combina bandas de Bollinger, Woodies CCI (índice de canal de productos básicos), promedios móviles (MA) y volumen en el balance (OBV). Utiliza bandas de Bollinger para proporcionar rangos de volatilidad del mercado, indicadores CCI para filtrar señales y combina sistemas de MA con confirmación de volumen para ejecutar operaciones cuando las tendencias del mercado son claras. Además, emplea ATR para la colocación dinámica de stop-loss y take-profit para controlar eficazmente el riesgo.

Principios de estrategia

La lógica central se basa en los siguientes elementos clave:

  1. Utiliza dos bandas de Bollinger de desviación estándar (1x y 2x) para construir canales de volatilidad de precios
  2. Utiliza indicadores CCI de 6 y 14 períodos como filtros de señal, que requieren confirmación de ambos períodos
  3. Combina medias móviles de 50 y 200 períodos para determinar las tendencias del mercado
  4. Confirma las tendencias de volumen a través de OBV suavizado de 10 períodos
  5. Se utilizará un ATR de 14 períodos para los niveles dinámicos de stop-loss y take profit.

Ventajas estratégicas

  1. La validación cruzada de múltiples indicadores reduce significativamente las señales falsas
  2. Las bandas de Bollinger y la combinación de CCI proporcionan un juicio preciso de la volatilidad del mercado
  3. Los sistemas de AEM a largo y corto plazo capturan eficazmente las principales tendencias
  4. OBV confirma el soporte de volumen, aumentando la fiabilidad de la señal
  5. Las opciones dinámicas de stop loss y take profit se adaptan a las diferentes condiciones del mercado
  6. Señales comerciales claras con ejecución estandarizada, adecuadas para la aplicación cuantitativa

Riesgos estratégicos

  1. Los indicadores múltiples pueden dar lugar a señales con retraso
  2. Las pérdidas de detención frecuentes en los mercados variados
  3. Riesgo de sobreajuste de la optimización de parámetros
  4. Las pérdidas de detención pueden no activarse lo suficientemente rápido en períodos volátiles Medidas de mitigación:
  • Ajuste dinámico de los parámetros de los indicadores para los diferentes ciclos de mercado
  • Monitorear el descenso para el control de posición
  • Validación regular de parámetros
  • Establecer límites máximos de pérdida

Direcciones de optimización

  1. Introducir indicadores de volatilidad para ajustar las posiciones en períodos de alta volatilidad
  2. Añadir filtro de fuerza de tendencia para evitar intercambios de mercado variados
  3. Optimizar la selección del período CCI para mejorar la sensibilidad de la señal
  4. Mejorar la gestión de las pérdidas/beneficios con la obtención parcial de beneficios
  5. Implementar un sistema de advertencia de anomalías de volumen

Resumen de las actividades

Este es un sistema de negociación completo basado en combinaciones de indicadores técnicos que mejora la precisión de la negociación a través de múltiples confirmaciones de señales.


/*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

Más.