Dynamic Range Breakout-Strategie


Erstellungsdatum: 2023-11-21 15:03:19 zuletzt geändert: 2023-12-01 15:00:31
Kopie: 0 Klicks: 691
1
konzentrieren Sie sich auf
1617
Anhänger

Dynamic Range Breakout-Strategie

Überblick

Diese Strategie basiert auf dem Brin-Band-Indikator und entwickelt eine dynamische Breakout-Trading-Strategie. Sie kombiniert K-Line-Einzelfilterung und Farbfilterung, um Breakout-Entry-Gelegenheiten in der Nähe des Brin-Band-Abstiegs zu suchen. Die Exit-Strategie basiert auf der Einzelfilterung. Die Strategie verwaltet automatisch die Anzahl der Positionen und das Risiko.

Strategieprinzip

Indikatorberechnung

Zunächst die Basislinie und die Unterbahn des Brin-Bandes nach dem Tiefpunkt:

src = low 
basis = sma(src, length)
dev = mult * stdev(src, length) 
lower = basis - dev

Hierbei ist src der Tiefpunkt, length die Berechnungsdauer, basis die Durchschnittslinie, dev die Standarddeviation und lower die Unterbahn.

In der Regel wird mult auf 2 gesetzt, was bedeutet, dass die Unterbahn eine Standarddifferenz hat.

Filterbedingungen

Die Strategie enthält zwei Filterbedingungen:

K-Linien-Einheitsfilter Das Signal wird nur erzeugt, wenn nbody größer als die Hälfte von abody ist.

Farbfilter Das ist ein falscher Durchbruch des hbox-Kopfes.

Handelssignale

Mehrfachsignale werden erzeugt, wenn die folgenden Bedingungen erfüllt sind:

low < lower  // 价格突破下轨
close < open or usecol == false // 色彩过滤
nbody > abody / 2 or usebod == false // 实体过滤

Wenn die Größe der Einheit erneut größer als die Hälfte des Durchschnitts ist, entsteht ein Niederlassungsrisiko:

close > open and nbody > abody / 2

Positionsverwaltung

Strategie zur automatischen Berechnung der Anzahl der Transaktionen, um einen Indexzuwachs zu erzielen:

lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]  

Risikokontrolle

Ein Jahr, ein Monat und ein Tag sind erforderlich, um den Handel innerhalb des angegebenen Datums zu beschränken:

when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))

Strategische Vorteile

Dynamische Handelsbereiche

Der Brin-Abtrieb ist ein dynamischer Unterstützungsbereich, der die Chance auf einen Aufprall nach einem Markttrend erfasst.

Doppelfilter

In Kombination mit K-Linien-Einheiten und Farbverurteilungen, wirkungsvolle Filterung von False-Breakings.

Automatische Positionsverwaltung

Die Position wächst exponentiell auf 100% und die Risiken werden automatisch verwaltet.

Geben Sie einen Zeitrahmen an

Das Setup von Datumsbereichen verringert die Risiken, die mit der Marktschwankung zu bestimmten Zeiten verbunden sind.

Strategisches Risiko

Die Leerlaufzeit ist zu lang

Wenn der Markt in einem langen Bullmarkt ist, bewegen sich die Brin-Band-Mittel- und Oberbahnen schnell und können zu lange leeren.

Die Lösung

Wenn Sie die Trendindikatoren verwenden, können Sie die Strategie aussetzen, wenn die mittlere und lange Linie als Bullenmarkt beurteilt wird, um zu lange Leerpositionen zu vermeiden.

Der Durchbruch scheiterte.

Nach einem Unterbahnbruch kann es zu Rückstellungen und erneuten Unterbahnversuchen kommen.

Die Lösung

Stopp-Linien mit einem bestimmten Prozentsatz des Stopps unterhalb der Stütze. Oder die Urteilslogik des erneuten Versuchs mit einem schnellen Stopp.

Strategieoptimierung

Erhöhung der Stop Loss Logik

Stell die Stop-Loss-Position unterhalb der vernünftigen Unterstützung fest, basierend auf den Rückmessdaten.

Optimierung der Filterbedingungen

Anpassung der Abody-Periode des Filters, Verwendung des COLOR-Filters usw.; Suche nach der optimalen Kombination von Parametern;

Zusammenfassung von Trends

Erhöhung der mittleren und langen Trendbeurteilung, Strategie-Stopp bei der Beurteilung eines Bullenmarktes. Verringerung der Leerlaufzeit.

Zusammenfassen

Diese Strategie kombiniert Brin-Band-Unterstützung und entwirft die Strategie-Logik der Entity-Filterung, Farbfilterung und des Durchbruchs von Geschäften, um nach rückläufigen Gelegenheiten mit hoher Wahrscheinlichkeit zu suchen. In der Praxis können die Parameter kontinuierlich nach den Rückmeldungsergebnissen optimiert werden, und ein Stop-Loss- und Trendbeurteilungsmodul wird hinzugefügt, um das Risiko zu kontrollieren und so eine bessere Leistung zu erzielen.

Strategiequellcode
/*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()