Bollinger-Ausbruchstrategie mit Pyramiden

Schriftsteller:ChaoZhang, Datum: 2023-11-23 14:01:57
Tags:

img

Übersicht

Diese Strategie führt auf der Grundlage von Breakouts von Bollinger Bands in Long- oder Short-Positionen ein. Sie geht lang, wenn der Preis unter den unteren Band bricht, und kurz, wenn der Preis über den oberen Band bricht.

Strategie Logik

Die Strategie verwendet 3 Linien von Bollinger Bands - mittlere, obere und untere. Die mittlere Linie ist der n-Tage gleitende Durchschnitt. Die obere Linie ist die mittlere Linie + k * n-Tage Standardabweichung. Die untere Linie ist die mittlere Linie - k * n-Tage Standardabweichung. Normalerweise ist n 20 und k ist 2.

Wenn der Preis über die obere Linie bricht, signalisiert er einen Abwärtstrend und geht kurz.

Nach der Einnahme von Positionen hält die Strategie die Pyramide, was bedeutet, mehr Positionen in die gleiche Richtung hinzuzufügen.

Die Stop-Loss für alle Positionen werden auch in Echtzeit basierend auf der Differenz zwischen dem aktuellen durchschnittlichen Haltepreis und dem Bandpreis aktualisiert.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Verwenden Sie Bollinger-Bänder, um Ausbrüche und Trendänderungen genau zu identifizieren.
  2. Geben Sie systematisch Positionen auf goldenem Kreuz und totem Kreuz ein.
  3. Mehr Profit durch Pyramiden machen.
  4. Echtzeit-Stop-Loss-Aktualisierung, um nicht ausgeschaltet zu werden.

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Bollinger-Bänder sind empfindlich auf Marktvolatilität reagieren und können zu Whipsaws führen.
  2. Pyramiden erhöhen die Exposition und nutzen potenzielle Verluste.
  3. Der Stop-Loss ist nicht garantiert und besteht immer noch die Wahrscheinlichkeit, dass er gestoppt wird.

Einige Methoden zur Bekämpfung der Risiken:

  1. Optimieren Sie die Bollinger-Band-Parameter für verschiedene Zyklen.
  2. Passen Sie die Pyramidenskala und Frequenz an.
  3. Die mittlere Linie als weitere Stop-Loss-Linie hinzufügen.

Optimierungsrichtlinien

Die Strategie kann aus folgenden Aspekten optimiert werden:

  1. Optimierung der Parameter der Bollinger-Bänder zur Anpassung mehrer Marktregime.
  2. Verbesserung der Pyramidenlogik, um Risiko-Belohnung auszugleichen.
  3. Fügen Sie mehr Stop-Loss-Linien wie die mittlere Linie hinzu.
  4. Entwicklung eines Profit-taking-Mechanismus zur proaktiven Gewinnbindung.
  5. Kombination anderer Indikatoren zum Filtern von Einträgen.
  6. Verbesserung des Risikomanagements zur Kontrolle von Verlusten pro Handel.

Schlussfolgerung

Die Strategie ist eine typische Trend-Folge-Strategie. Sie setzt die Dynamik ein, wenn sich ein Trend entwickelt, und erzielt dementsprechend Gewinn. Gleichzeitig enthält sie auch inhärente Risiken. Weitere Optimierungen sind erforderlich, um mehr Marktbedingungen anzupassen und das Whipsaw-Risiko zu bekämpfen.


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy(title='Bollinger Band strategy with split, limit, stop', shorttitle='bb strategy', overlay=true,commission_type = strategy.commission.percent, commission_value = 0.01, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, pyramiding = 4)



//Summary: Going Long or Short when Entering after Breaking the Bollinger Bands\
//At this time, the stop-loss, profit-taking price, and pyramiding standard\
// are determined from the difference between the position average price and the band price.

//After entering the position, if the price crosses the mid-band line, the stop loss is adjusted to the mid-band line.



//each trade, entry position size = 10% of total cash
//max pyramiding is 4
//commission = 0.01%





in_period = true


bb_length = input.int(20)
bb_mult = input.int(2)

[middle, upper, lower] = ta.bb(close,bb_length, bb_mult)
plot(middle, color=color.aqua)
plot(upper, color=color.orange)
plot(lower, color=color.orange)
long_cond = ta.crossover(close,lower)
short_cond = ta.crossunder(close,upper)

var saved_ph = 0.0
if strategy.opentrades>0 and strategy.opentrades[1]==0 and strategy.position_size > 0
    saved_ph := upper[1]
var saved_pl = 0.0
if strategy.opentrades>0 and strategy.opentrades[1]==0 and strategy.position_size < 0
    saved_pl := lower[1]

avg = strategy.position_avg_price

long_diff = saved_ph-avg
short_diff = saved_pl-avg

long_stoploss = avg - 1*long_diff
short_stoploss = avg - 1*short_diff

long_avgdown = avg - 0.5*long_diff
short_avgup = avg - 0.5*short_diff

long_profit_price = avg + 0.5*long_diff
short_profit_price = avg + 0.5*short_diff

var label _label = na
if in_period
    if long_cond and strategy.opentrades==0
        strategy.entry("Long",strategy.long)
    if long_cond and strategy.opentrades >0 and (close[1]<long_avgdown or close[2]<long_avgdown)
        strategy.entry("Long",strategy.long)

    if short_cond and strategy.opentrades==0
        strategy.entry("Short", strategy.short)
    if short_cond and strategy.opentrades>0 and (close[1]>short_avgup or close[2]>short_avgup)
        strategy.entry("Short",strategy.short)

plot(avg, style=plot.style_linebr)


plot(strategy.position_size > 0? long_profit_price: na,color=color.green, style=plot.style_linebr)
plot(strategy.position_size > 0? long_avgdown: na,color=color.yellow, style=plot.style_linebr)
plot(strategy.position_size > 0? long_stoploss: na,color=color.red, style=plot.style_linebr)

plot(strategy.position_size < 0? short_profit_price: na,color=color.green, style=plot.style_linebr)
plot(strategy.position_size < 0? short_avgup: na,color=color.yellow, style=plot.style_linebr)
plot(strategy.position_size < 0? short_stoploss: na,color=color.red, style=plot.style_linebr)

if strategy.position_size > 0
    if ta.crossover(close, middle)
        strategy.exit("Long Exit", "Long", limit=long_profit_price, stop=middle)
    else
        strategy.exit("Long Exit", "Long", limit=long_profit_price, stop=long_stoploss)
if strategy.position_size < 0
    if ta.crossunder(close, middle)
        strategy.exit("Short Exit", "Short", limit=short_profit_price, stop=middle)
    else
        strategy.exit("Short Exit", "Short", limit=short_profit_price, stop=short_stoploss)

Mehr