Handelsstrategie für die Dynamik der Bollinger-Bande auf zwei Wegen

Schriftsteller:ChaoZhang, Datum: 2023-11-16 17:36:00
Tags:

img

Übersicht

Diese Strategie basiert auf dem Konzept der Bollinger Bands, wobei die oberen und unteren Schienen für den Preiskanal festgelegt werden und sie zur Trendbeurteilung und Handelssignalgenerierung verwendet werden. Konkret berechnet sie die durchschnittliche absolute Abweichung des Preises als die Kanalbandbreite. Die mittlere Schiene des Kanals ist der einfache gleitende Durchschnitt des Preises, und die oberen und unteren Schienen sind die mittlere Schiene plus oder minus 1 oder 2 Mal die Kanalbandbreite. Wenn der Preis durch die obere Schiene bricht, gehen Sie lang. Wenn er durch die untere Schiene bricht, gehen Sie kurz.

Grundsätze

Zu den wichtigsten Punkten dieser Strategie gehören:

  1. Berechnen Sie die mittlere Schiene des Preises, die der einfache gleitende Durchschnitt des Preises ist.

  2. Berechnen Sie den einfachen gleitenden Durchschnitt der absoluten Abweichung des Preises als Kanalbandbreite.

  3. Bestimmen Sie die oberen und unteren Schienen nach der mittleren Schiene und Bandbreite. Die oberen Schienen sind die mittleren Schienen plus 1 oder 2 mal die Bandbreite. Die unteren Schienen sind die mittleren Schienen minus 1 oder 2 mal die Bandbreite.

  4. Berechnen Sie den Trendbeurteilungsindikator für Long und Short. Wenn der Preis über der oberen Schiene 2 ist, ist er lang. Wenn der Preis unter der unteren Schiene 2 ist, ist er kurz.

  5. Wenn der Preis über die obere Schiene 2 überschreitet, gehen Sie lang.

  6. Die Stop-Loss-Linie für lange Aufträge ist die untere Schiene 1 und für kurze Aufträge die obere Schiene 1.

  7. Berechnung der Positionsgröße nach den Anforderungen an die Kapitalverwaltung.

Die Strategie integriert die Ideen, gleitende Durchschnitte zu verwenden, um Trends zu beurteilen, Bollinger Bands, um Überkauf und Überverkauf zu beurteilen, und Ausbrüche, um Umkehrungen zu machen.

Analyse der Vorteile

Die wichtigsten Vorteile dieser Strategie sind:

  1. Das Doppelschienensystem kann die Stärke des Trends besser einschätzen.

  2. Bollinger-Bänder haben eine starke Regressionsfunktion, um falsche Ausbrüche effektiv zu vermeiden.

  3. Die Differenz zwischen den zwei Schienen in Kombination mit der Regression der Bollinger Bands bildet relativ stabile Handelssignale.

  4. Es gibt eine klare Stop-Loss-/Exit-Logik zur Risikokontrolle.

  5. Die Positionsgröße entspricht den Anforderungen des Kapitalmanagements und vermeidet einen Superleverage.

  6. Die Strategieidee ist klar und leicht zu verstehen und zu optimieren.

  7. Durch die flexible Einstellung der Parameter ist es für verschiedene Märkte anpassungsfähig.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Unzulängliche Bollinger-Band-Parameter können zu Abfallwirkungen führen, da sie die Preise nicht effektiv verfolgen.

  2. Der Unterschied zwischen zwei Schienen kann keine fehlerhaften Trendbeurteilungen vollständig vermeiden.

  3. Es kann mehr ungültige Signale in Bereichsgebundenen Märkten erzeugen.

  4. Bei falschen Ausbrüchen kann es zu Verlusten kommen.

  5. Es gibt eine gewisse Zeitverzögerung, möglicherweise fehlende Wendepunkte.

  6. Das Risiko-Rendite-Verhältnis ist durch den Stop-Loss-Punkt begrenzt und kann Trends nicht unbegrenzt verfolgen.

Entsprechende Risikomanagementmaßnahmen:

  1. Optimierung der Parameter, um Bollinger-Bänder an unterschiedliche Zyklen anzupassen.

  2. Verknüpfen Sie andere Indikatoren zur Bestätigung, um Fehleinschätzungen zu vermeiden.

  3. Reduzieren Sie die Positionsgröße, um Einzelverluste zu kontrollieren.

  4. Optimieren Sie die Stop-Loss-Punkte, um das Risiko-Rendite-Verhältnis zu gewährleisten.

  5. Um die Verzögerung zu verringern, sollte der Zyklus angemessen verkürzt werden.

  6. Die Risikokontrolle sollte robust sein, keine unbegrenzten Verfolgungen.

Optimierungsrichtlinien

Die Strategie kann in folgenden Richtungen optimiert werden:

  1. Optimierung der Bollinger-Bänderparameter für eine bessere Preisverfolgung.

  2. Versuchen Sie verschiedene gleitende Durchschnitte wie EMA, DWMA, etc.

  3. Hinzufügen einer Trendfilterung, um den Handel in den Märkten mit Bandbreiten zu vermeiden.

  4. Zusätzlich können aggressive Exit-Methoden verwendet werden, um mehr Trendgewinne zu erzielen.

  5. Einführung mehrerer Zeitrahmen für die Kombination, die für verschiedene Marktbedingungen geeignet sind.

  6. Fügen Sie zusätzliche Bedingungen hinzu, wie Volumenspitzen, um falsche Ausbrüche zu vermeiden.

  7. Betrachten Sie umgekehrte Bollinger Bands, Verkauf der oberen Band, Kauf der unteren Band.

  8. Parameteroptimierung für beste Parameterkombinationen durchführen.

Zusammenfassung

Die Gesamtidee dieser Strategie ist klar und stabil. Es gibt auch Raum für Verbesserungen durch Parameteroptimierung, Logikverbesserung, Risikomanagement usw., um sie weiter zu einer sehr praktischen quantitativen Handelsstrategie zu verfeinern.


/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
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/
// © noro

//@version=4
strategy(title = "Noro's Bands Strategy", shorttitle = "Bands", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, commission_value = 0.1)

//Sattings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
len = input(20, defval = 20, minval = 1, maxval = 1000, title = "Length")
src = input(ohlc4, title = "Source")
showbb = input(true, title = "Show Bands")
showof = input(true, title = "Show Offset")
showbg = input(false, title = "Show Background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
trend = 0
trend := high > hd2 ? 1 : low < ld2 ? -1 : trend[1]
bgcol = showbg == false ? na : trend == 1 ? color.lime : color.red
bgcolor(bgcol, transp = 70)

//Lines
colo = showbb == false ? na : color.black
offset = showof ? 1 : 0
plot(hd2, color = colo, linewidth = 1, transp = 0, offset = offset, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, offset = offset, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, offset = offset, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, offset = offset, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, offset = offset, title = "Low band 2")

//Trading
size = strategy.position_size
needstop = needlong == false or needshort == false
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if distsma > 0
    strategy.entry("Long", strategy.long, lot, stop = hd2, when = truetime and needlong)
    strategy.entry("Short", strategy.short, lot, stop = ld2, when = truetime and needshort)
sl = size > 0 ? ld2 : size < 0 ? hd2 : na
if size > 0 and needstop
    strategy.exit("Stop Long", "Long", stop = sl)
if size < 0 and needstop
    strategy.exit("Stop Short", "Short", stop = sl)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Mehr