Die Ressourcen sind geladen. Beförderung...

Multi-Indikator-gefilterte Handelsstrategie mit Bollinger-Bändern und Woodies-CCI

Schriftsteller:ChaoZhang, Datum: 2024-12-27 15:32:30
Tags:BBCCI- Nein.OBVATRSMATPSL

img

Übersicht

Diese Strategie ist ein Multi-Indikator-Handelssystem, das Bollinger Bands, Woodies CCI (Commodity Channel Index), Moving Averages (MA) und On-Balance Volume (OBV) kombiniert. Es verwendet Bollinger Bands zur Bereitstellung von Marktvolatilitätsbereichen, CCI-Indikatoren zur Signalfilterung und kombiniert MA-Systeme mit Volumenbestätigung, um Trades auszuführen, wenn die Markttrends klar sind. Darüber hinaus verwendet es ATR für dynamische Stop-Loss- und Take-Profit-Platzierung, um das Risiko effektiv zu kontrollieren.

Strategieprinzipien

Die Kernlogik beruht auf folgenden Schlüsselelementen:

  1. Verwendet zwei Standardabweichungs-Bollinger-Bänder (1x und 2x) zur Konstruktion von Preisschwankungen
  2. Benutzt CCI-Indikatoren mit 6 und 14 Perioden als Signalfilter, die eine Bestätigung aus beiden Perioden erfordern
  3. Kombination von gleitenden Durchschnitten für 50 und 200 Zeiträume zur Ermittlung von Marktentwicklungen
  4. Bestätigt Volumenentwicklungen durch 10-Perioden-Gleichgestelltes OBV
  5. Verwendet 14-Perioden-ATR für dynamische Stop-Loss- und Take-Profit-Level

Strategische Vorteile

  1. Die Kreuzvalidierung mehrerer Indikatoren reduziert die falschen Signale erheblich
  2. Die Kombination von Bollinger Bands und CCI liefert eine genaue Bewertung der Marktvolatilität
  3. Langfristige und kurzfristige MA-Systeme erfassen die wichtigsten Trends effektiv
  4. OBV bestätigt Volumenunterstützung, erhöht Signalzuverlässigkeit
  5. Dynamische Stop-Loss- und Take-Profit-Einstellungen passen sich unterschiedlichen Marktbedingungen an
  6. Übersichtliche Handelssignale mit standardisierter Ausführung, geeignet für eine quantitative Ausführung

Strategische Risiken

  1. Mehrere Indikatoren können zu verzögerten Signalen führen
  2. Häufige Stopp-Losses auf den verschiedenen Märkten
  3. Risiko einer Überanpassung der Parameteroptimierung
  4. In volatilen Perioden können Stop-Losss möglicherweise nicht schnell genug ausgelöst werden Schadensminderungsmaßnahmen
  • Dynamische Anpassung der Indikatorparameter für verschiedene Marktzyklen
  • Überwachung der Abnahme für die Positionskontrolle
  • Regelmäßige Validierung von Parametern
  • Festlegen von Höchstverlustgrenzen

Optimierungsrichtlinien

  1. Einführung von Volatilitätsindikatoren zur Anpassung von Positionen in Zeiten hoher Volatilität
  2. Hinzufügen von Trendstärkefiltern, um unterschiedliche Marktgeschäfte zu vermeiden
  3. Optimierung der CCI-Periodenwahl für eine verbesserte Signalempfindlichkeit
  4. Verbesserung des Gewinn-/Verlustmanagements durch teilweise Gewinnentnahme
  5. Implementieren Sie ein Volumen-Anomalien-Warnsystem

Zusammenfassung

Es handelt sich um ein vollständiges Handelssystem, das auf Kombinationen technischer Indikatoren basiert und die Genauigkeit des Handels durch mehrere Signalbestätigungen verbessert. Das Strategiedesign ist vernünftig mit angemessener Risikokontrolle und hat einen guten praktischen Anwendungswert.


/*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!")

Verwandt

Mehr