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.
Zu den wichtigsten Punkten dieser Strategie gehören:
Berechnen Sie die mittlere Schiene des Preises, die der einfache gleitende Durchschnitt des Preises ist.
Berechnen Sie den einfachen gleitenden Durchschnitt der absoluten Abweichung des Preises als Kanalbandbreite.
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.
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.
Wenn der Preis über die obere Schiene 2 überschreitet, gehen Sie lang.
Die Stop-Loss-Linie für lange Aufträge ist die untere Schiene 1 und für kurze Aufträge die obere Schiene 1.
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.
Die wichtigsten Vorteile dieser Strategie sind:
Das Doppelschienensystem kann die Stärke des Trends besser einschätzen.
Bollinger-Bänder haben eine starke Regressionsfunktion, um falsche Ausbrüche effektiv zu vermeiden.
Die Differenz zwischen den zwei Schienen in Kombination mit der Regression der Bollinger Bands bildet relativ stabile Handelssignale.
Es gibt eine klare Stop-Loss-/Exit-Logik zur Risikokontrolle.
Die Positionsgröße entspricht den Anforderungen des Kapitalmanagements und vermeidet einen Superleverage.
Die Strategieidee ist klar und leicht zu verstehen und zu optimieren.
Durch die flexible Einstellung der Parameter ist es für verschiedene Märkte anpassungsfähig.
Die Strategie birgt auch einige Risiken:
Unzulängliche Bollinger-Band-Parameter können zu Abfallwirkungen führen, da sie die Preise nicht effektiv verfolgen.
Der Unterschied zwischen zwei Schienen kann keine fehlerhaften Trendbeurteilungen vollständig vermeiden.
Es kann mehr ungültige Signale in Bereichsgebundenen Märkten erzeugen.
Bei falschen Ausbrüchen kann es zu Verlusten kommen.
Es gibt eine gewisse Zeitverzögerung, möglicherweise fehlende Wendepunkte.
Das Risiko-Rendite-Verhältnis ist durch den Stop-Loss-Punkt begrenzt und kann Trends nicht unbegrenzt verfolgen.
Entsprechende Risikomanagementmaßnahmen:
Optimierung der Parameter, um Bollinger-Bänder an unterschiedliche Zyklen anzupassen.
Verknüpfen Sie andere Indikatoren zur Bestätigung, um Fehleinschätzungen zu vermeiden.
Reduzieren Sie die Positionsgröße, um Einzelverluste zu kontrollieren.
Optimieren Sie die Stop-Loss-Punkte, um das Risiko-Rendite-Verhältnis zu gewährleisten.
Um die Verzögerung zu verringern, sollte der Zyklus angemessen verkürzt werden.
Die Risikokontrolle sollte robust sein, keine unbegrenzten Verfolgungen.
Die Strategie kann in folgenden Richtungen optimiert werden:
Optimierung der Bollinger-Bänderparameter für eine bessere Preisverfolgung.
Versuchen Sie verschiedene gleitende Durchschnitte wie EMA, DWMA, etc.
Hinzufügen einer Trendfilterung, um den Handel in den Märkten mit Bandbreiten zu vermeiden.
Zusätzlich können aggressive Exit-Methoden verwendet werden, um mehr Trendgewinne zu erzielen.
Einführung mehrerer Zeitrahmen für die Kombination, die für verschiedene Marktbedingungen geeignet sind.
Fügen Sie zusätzliche Bedingungen hinzu, wie Volumenspitzen, um falsche Ausbrüche zu vermeiden.
Betrachten Sie umgekehrte Bollinger Bands, Verkauf der oberen Band, Kauf der unteren Band.
Parameteroptimierung für beste Parameterkombinationen durchführen.
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")