Diese Strategie basiert auf dem Bollinger Bands Indikator, um eine dynamische Breakout-Handelsstrategie zu erstellen. Sie kombiniert die Bedingungen des Kerzenkörperfilters und des Farbfilters, um nach Breakout-Eintrittsmöglichkeiten um das untere Bollinger Band zu suchen. Die Ausgänge basieren auf dem Körperfilter. Die Strategie verwaltet automatisch die Positionsgröße und das Risiko.
Berechnen Sie zunächst die Basislinie und das untere Band der Bollinger Bands anhand des niedrigen Preises:
src = low
basis = sma(src, length)
dev = mult * stdev(src, length)
lower = basis - dev
Hierbei ist src der niedrige Preis, Länge der Berechnungszeitraum, Basis der gleitende Durchschnitt, dev die Standardabweichung und niedriger das untere Band.
Mult wird normalerweise auf 2 gesetzt, was bedeutet, dass das untere Band eine Standardabweichung entfernt ist.
Die Strategie beinhaltet zwei Filterbedingungen:
KerzenkörperfilterVerwenden Sie die Körpergröße nbody und seine durchschnittliche Körpergröße, um zu bestimmen, erzeugen Sie nur ein Handelssignal, wenn nbody größer als die Hälfte der Körpergröße ist.
Farbfilter
Nicht lange, wenn die Kerze positiv schließt (schließen > öffnen). Dies verhindert einen falschen Ausbruch an der Spitze der Box.
Länges Signal erzeugen, wenn folgende Bedingungen erfüllt sind:
low < lower // price breaks lower band
close < open or usecol == false // color filter
nbody > abody / 2 or usebod == false // body filter
Wenn die Körpergröße erneut die Hälfte des Mittelwerts überschreitet, muss die Position der Nähe:
close > open and nbody > abody / 2
Die Strategie berechnet automatisch die Handelsgröße für das exponentielle Wachstum der Position:
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
Hinzufügen von Einschränkungen für Jahr, Monat und Datum, um den Handel nur in einem bestimmten Datumsbereich zu begrenzen:
when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))
Das untere Bollinger-Band bietet einen dynamischen Unterstützungsbereich, um Retracements nach Trends zu erfassen.
Die Kombination von Kerzenkörper und Farbfiltern verhindert effektiv falsche Ausbrüche.
Die Positionsgröße steigt exponentiell auf 100% und das Risikomanagement automatisch.
Die Festlegung eines Datumsbereichs verringert das mit der Marktvolatilität in bestimmten Perioden verbundene Risiko.
Bei starkem Aufwärtstrend können sich BB-Mitte- und Oberbands schnell nach oben bewegen und einen längeren Rückgang verursachen.
Kombiniert mit Trendindikatoren, Stopp-Strategie, wenn es sich um einen Bullenmarkt handelt, um einen längeren Rückgang zu vermeiden.
Der Ausbruch kann scheitern, wenn die Unterbänder zurückgezogen und erneut getestet werden.
Fügen Sie Stop-Loss unterhalb des Support-Niveaus hinzu oder Logik hinzu, um fehlgeschlagene Wiederholungstests für einen schnellen Stop-Loss zu erkennen.
Optimieren Sie den Stop-Loss unterhalb der Unterstützung basierend auf den Rücktests.
Feinschaltkörperfilter Aufenthaltsdauer, Farbfilter usw., um das Optimum zu finden.
Stoppen Sie die Strategie, wenn es sich um einen Bullenmarkt handelt.
Diese Strategie kombiniert BB-Unterstützung, Körperfilter, Farbfilter und Breakout-Logik, um Hochwahrscheinlichkeits-Retracements zu erfassen.
/*backtest start: 2022-11-14 00:00:00 end: 2023-11-20 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Wizard Strategy v1.0", shorttitle = "Wizard str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10) //Settings capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") length = input(25, defval = 25, minval = 1, maxval = 200, title = "BB Period") usebod = input(false, defval = false, title = "Use Body-Filter") usecol = input(false, defval = false, title = "Use Color-Filter") showar = input(false, defval = false, title = "Show Arrows") 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") //Bollinger src = low mult = 2 basis = sma(src, length) dev = mult * stdev(src, length) lower = basis - dev plot(lower, color = lime, linewidth = 3, title="Bottom Line") //Body Filter nbody = abs(close - open) abody = sma(nbody, 10) body = nbody > abody / 2 or usebod == false //Signals up1 = low < lower and (close < open or usecol == false) and body exit = close > open and nbody > abody / 2 //Arrows needar = up1 and showar plotarrow(needar ? 1 : na) //Trading lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1] if up1 if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()