Graduelle BB KC-Trendstrategie

Schriftsteller:ChaoZhang, Datum: 2024-01-26 15:10:41
Tags:

img

Übersicht

Diese Strategie verwendet eine Kombination von Bollinger Bands und Keltner Channel Signalen, um Markttrends zu identifizieren. Bollinger Bands sind ein technisches Analysetool, das Kanäle basierend auf Preisvolatilitätsbereichen definiert. Das Keltner Channel Signal kombiniert Preisvolatilität und Trends, um Unterstützungs- oder Widerstandsniveaus zu bestimmen. Diese Strategie nutzt die Vorteile beider Indikatoren, indem sie beurteilt, ob ein goldenes Kreuz zwischen den Bollinger Bands und Keltner Channels auftritt, um lange und kurze Chancen zu finden.

Strategieprinzipien

  1. Berechnen Sie die mittleren, oberen und unteren Bollinger Bands über 20 Perioden.
  2. Berechnen Sie die mittleren, oberen und unteren Keltner-Kanäle über 20 Perioden.
  3. Wenn die oberste Linie des Keltner-Kanals über die oberste Linie des Bollinger-Bands geht und das Volumen größer ist als der gleitende Durchschnitt der 10-Perioden, gehen Sie lang.
  4. Wenn die Unterlinie des Keltner-Kanals unterhalb der Unterlinie des Bollinger-Bands kreuzt und das Volumen größer ist als der gleitende 10-Perioden-Durchschnitt, gehen Sie kurz.
  5. Schließen Sie alle Positionen, wenn nach 20 Bar seit dem Eintritt keine Ausgangssignale ausgelöst werden.
  6. Setzen Sie einen Stop-Loss von 1,5% für lange Trades und einen Stop-Loss von -1,5% für kurze Trades.

Diese Strategie stützt sich hauptsächlich auf die Bollinger Bands, um Volatilitätsbereiche und Dynamik zu beurteilen. Der Keltner Channel dient aufgrund seiner ähnlichen Eigenschaften, aber unterschiedlichen Parameter als Verifizierungswerkzeug.

Stärkeanalyse

  1. Nutzt die kombinierten Vorteile von Bollinger-Bändern und Keltner-Kanälen, um die Signalgenauigkeit zu verbessern.
  2. Die Filterung nach Handelsvolumen reduziert ungültige Signale durch häufige Linienberührungen.
  3. Wirksame Risikokontrolle durch programmierte Stop-Loss- und Trailing-Stop-Mechanismen.
  4. Schnelle Ausgänge und Verlustbegrenzungen bei Zwangsgewinn nach ungültigen Signalen.

Risikoanalyse

  1. Sowohl Bollinger-Bänder als auch Keltner-Kanäle basieren auf gleitenden Durchschnitten und Volatilität.
  2. Keine Komponentenmechanik bedeutet, dass mehrere Stopp-Outs zu übergroßen Verlusten führen können.
  3. Umkehrsignale treten häufig auf. Parametertweaks können dazu führen, dass Trendchancen verpasst werden.

Die Erweiterung der Stop-Loss-Bereiche oder das Hinzufügen bestätigender Indikatoren wie MACD können die Risiken falscher Signale reduzieren.

Optimierungsrichtlinien

  1. Auswirkungen von Prüfparametern auf die Strategierendite, wie Längen, Standard-Abweichungs-Multiplikatoren usw.
  2. Hinzufügen anderer Indikatoren zur Signalbestätigung, z. B. KDJ, MACD.
  3. Verwenden Sie maschinelles Lernen zur automatisierten Optimierung von Parametern.

Zusammenfassung

Diese Strategie kombiniert Bollinger Bands und Keltner Channels, um Trends zu identifizieren, die durch das Handelsvolumen überprüft werden. Weitere Verbesserungen wie Parameteroptimierung und Hinzufügen von Indikatoren werden sie für mehr Marktregime stärken.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jensenvilhelm

//@version=5
strategy("BB and KC Strategy", overlay=true)

// Define the input parameters for the strategy, these can be changed by the user to adjust the strategy
kcLength = input.int(20, "KC Length", minval=1) // Length for Keltner Channel calculation
kcStdDev = input.float(2.2, "KC StdDev") // Standard Deviation for Keltner Channel calculation
bbLength = input.int(20, "BB Length", minval=1) // Length for Bollinger Bands calculation
bbStdDev = input.float(2, "BB StdDev") // Standard Deviation for Bollinger Bands calculation
volumeLength = input.int(10, "Volume MA Length", minval=1) // Length for moving average of volume calculation
stopLossPercent = input.float(1.5, "Stop Loss (%)") // Percent of price for Stop loss 
trailStopPercent = input.float(2, "Trail Stop (%)") // Percent of price for Trailing Stop
barsInTrade = input.int(20, "Bars in trade before exit", minval = 1) // Minimum number of bars in trade before considering exit

// Calculate Bollinger Bands and Keltner Channel
[bb_middle, bb_upper, bb_lower] = ta.bb(close, bbLength, bbStdDev) // Bollinger Bands calculation
[kc_middle, kc_upper, kc_lower] = ta.kc(close, kcLength, kcStdDev) // Keltner Channel calculation

// Calculate moving average of volume
vol_ma = ta.sma(volume, volumeLength) // Moving average of volume calculation

// Plotting Bollinger Bands and Keltner Channels on the chart
plot(bb_upper, color=color.red) // Bollinger Bands upper line
plot(bb_middle, color=color.blue) // Bollinger Bands middle line
plot(bb_lower, color=color.red) // Bollinger Bands lower line
plot(kc_upper, color=color.rgb(105, 255, 82)) // Keltner Channel upper line
plot(kc_middle, color=color.blue) // Keltner Channel middle line
plot(kc_lower, color=color.rgb(105, 255, 82)) // Keltner Channel lower line

// Define entry conditions: long position if upper KC line crosses above upper BB line and volume is above MA of volume
// and short position if lower KC line crosses below lower BB line and volume is above MA of volume
longCond = ta.crossover(kc_upper, bb_upper) and volume > vol_ma // Entry condition for long position
shortCond = ta.crossunder(kc_lower, bb_lower) and volume > vol_ma // Entry condition for short position

// Define variables to store entry price and bar counter at entry point
var float entry_price = na // variable to store entry price
var int bar_counter = na // variable to store bar counter at entry point

// Check entry conditions and if met, open long or short position
if (longCond)
    strategy.entry("Buy", strategy.long) // Open long position
    entry_price := close // Store entry price
    bar_counter := 1 // Start bar counter
if (shortCond)
    strategy.entry("Sell", strategy.short) // Open short position
    entry_price := close // Store entry price
    bar_counter := 1 // Start bar counter

// If in a position and bar counter is not na, increment bar counter
if (strategy.position_size != 0 and na(bar_counter) == false)
    bar_counter := bar_counter + 1 // Increment bar counter

// Define exit conditions: close position if been in trade for more than specified bars
// or if price drops by more than specified percent for long or rises by more than specified percent for short
if (bar_counter > barsInTrade) // Only consider exit after minimum bars in trade
    if (bar_counter >= barsInTrade)
        strategy.close_all() // Close all positions
    // Stop loss and trailing stop
    if (strategy.position_size > 0)
        strategy.exit("Sell", "Buy", stop=entry_price * (1 - stopLossPercent/100), trail_points=entry_price * trailStopPercent/100) // Set stop loss and trailing stop for long position
    else if (strategy.position_size < 0)
        strategy.exit("Buy", "Sell", stop=entry_price * (1 + stopLossPercent/100), trail_points=entry_price * trailStopPercent/100) // Set stop loss and trailing stop for short position


Mehr