Die Ressourcen sind geladen. Beförderung...

Die Bollinger Bands Stop-Loss-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-11-23 15:49:12
Tags:

img

Übersicht

Die Bollinger Bands Strategie ist eine klassische Strategie, die Bollinger Bands für die Trendverfolgung und Überkauf/Überverkaufssignale verwendet.

Die Strategie beurteilt überkaufte/überverkaufte Konditionen durch goldene/tote Crossovers der oberen/unteren Bollinger-Bänder, um Positionen zu etablieren. Der Bereich zwischen den Bändern spiegelt den aktuellen Marktvolatilitätsbereich wider. Die Banden bestehen aus mittleren, oberen und unteren Bändern, wobei das mittlere Band der einfache gleitende Durchschnitt für N-Tage ist und die oberen/unteren Banden das mittlere Band +/- K Standardabweichungen sind.

Grundsätze

Bollinger-Bänder spiegeln die Marktvolatilität und den Schwingungsbereich wider. Das Berühren des unteren Bands bedeutet, dass der Status quo überverkauft ist - Lücken haben eine höhere Wahrscheinlichkeit, dass sie gefüllt werden. Daher sollten Long-Positionen basierend auf dem Prinzip der Durchschnittsumkehr in Betracht gezogen werden. Ebenso stellt das Berühren des oberen Bands potenzielle Überkaufbedingungen und wahrscheinliche Preisumkehrungen dar, so dass Short-Positionen eingerichtet werden können, um von den Abwärtsbewegungen zu profitieren.

Diese Strategie kombiniert die Überkauf-/Überverkaufssignale von Bollinger Bands für Trendverfolgungseinträge.

Wenn der Preis über den unteren Bereich geht, verlässt der Markt den Überverkaufsbereich in einen angemessenen Bereich. Long-Positionen können geöffnet werden. Wenn der Preis unter den oberen Bereich geht, wird der Markt überkauft. Kurze können dann geöffnet werden.

Nach Ausfüllung der Aufträge werden festgelegte Stop-Loss-Levels festgelegt, um Risiken zu managen.

Vorteile

  1. Identifizieren Sie überkaufte/überverkaufte Niveaus mit Bollinger-Bändern für Low-Buy-High-Sell-Setups nach Band-Crossovers.

  2. Erfassen von Trends durch Volatilitäts-Eigenschaft von Bollinger Bands.

  3. Der Stop-Loss-Mechanismus begrenzt effektiv den maximalen Verlust pro Handel.

  4. Die Kombination von Trendverfolgung und Stop-Loss führt zu stetigen Gewinnen.

Risiken und Optimierung

  1. Die Einstellungen der Parameter beeinflussen die Signalqualität. Die mittlere Bandlänge N und der Multiplikator für die Standardabweichung K sollten für verschiedene Märkte rationell eingestellt werden, sonst wird die Genauigkeit beeinträchtigt.

  2. Übergroße oder untergroße Stop-Loss schädigt die Rendite Stabilität. Übergroße Prozentsatzrisiken schwerere Verluste pro Handel, während untergroße Prozentsatzrisiken vorzeitige Stop-Loss auslöst. Ein angemessener Prozentsatz sollte basierend auf verschiedenen Produkten festgelegt werden.

  3. Zusätzliche Filter mit anderen Indikatoren können die Signalgenauigkeit verbessern.

  4. Es können verschiedene Haltedauer-Einstellungen getestet werden, z. B. die Kombination von stündlichen oder kürzeren Periodenbändern für höhere Frequenzhandels- und Kapitalnutzungs-Effizienzverbesserungen.

Schlussfolgerung

Diese Strategie nutzt Bollinger Bands für überkaufte/überverkaufte Signale und beinhaltet Stop Loss zur Risikokontrolle.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Bollinger Bands Strategy", overlay=false, shorttitle="BBS", pyramiding=0, currency=currency.USD, commission_type=strategy.commission.percent, commission_value=0.03, initial_capital=1000)
source = input(close, "Source")
length = input.int(20, minval=1)
mult = input.float(2.0, minval=0.001, maxval=50, step=0.001)
stopLossFactor = input.float(1, "Stop Loss Percent", maxval = 100, minval = 0, step=0.1)

basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)
upper = basis + dev
lower = basis - dev

var float lastTradePrice = na
var float stopLossLow = na
var float stopLossHigh = na
var bool currentIsLong = na

var bool nextExpectedIsLong = true

var bool existedLong = false
var bool existedShort = false

buyEntry = ta.crossover(source, lower)
sellEntry = ta.crossunder(source, upper)

if (buyEntry and nextExpectedIsLong == true)
	strategy.entry("BBandLE", strategy.long, comment="BBandLE")
	nextExpectedIsLong := false
	if(nz(strategy.position_size[1], 0) < 0) // new position detected
	    lastTradePrice := close
	    stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100))
	    stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100))
else
    strategy.cancel("BBandLE")

if (sellEntry and nextExpectedIsLong == false)
	strategy.entry("BBandSE", strategy.short, comment="BBandSE")
	nextExpectedIsLong := true
	if(nz(strategy.position_size[1], 0) > 0) // new position detected
        lastTradePrice := close
        stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100))
        stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100))
else
    strategy.cancel("BBandSE")

strategy.close("BBandLE", close < stopLossLow)
strategy.close("BBandSE", close > stopLossHigh)

// if(nz(strategy.position_size[1], 0) < 0 and close > stopLossHigh)
//     strategy.entry("BBandLE", strategy.long, comment="BBandLE")
// 	lastTradePrice := close
// 	stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100))
// 	stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100))
// if(nz(strategy.position_size[1], 0) > 0 and close < stopLossLow)
//     strategy.exit("BBandSE", strategy.short, comment="BBandSE")
//     lastTradePrice := close
//     stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100))
//     stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100))

plot(source, "close", color.blue)
plot(lower, "lower", color.red)
plot(upper, "upper", color.red)
plot(stopLossLow, "StopLossLow", color.black)
plot(stopLossHigh, "StopLossHigh", color.black)
plot(lastTradePrice, "lastTradePrice", color.green)
plotchar(strategy.position_size > 0, char="-", size=size.tiny, location=location.bottom, color=color.green)
plotchar(strategy.position_size < 0, char="-", size=size.tiny, location=location.bottom, color=color.red)




Mehr