Quantitative Handelsstrategie basierend auf dem LazyBear-Kompressions-Momentum-Indikator


Erstellungsdatum: 2024-02-05 14:48:01 zuletzt geändert: 2024-02-05 14:48:01
Kopie: 0 Klicks: 1277
1
konzentrieren Sie sich auf
1228
Anhänger

Quantitative Handelsstrategie basierend auf dem LazyBear-Kompressions-Momentum-Indikator

Überblick

Die Strategie basiert auf LazyBear’s Compression Dynamics Indicator, mit der Hinzufügung eines Dynamics Filters, einer Änderung der Datenquelle und der Hinzufügung eines Risikomanagementsystems, das einen benutzerdefinierten Rücklaufzeitbereich bietet, um Preissprung nach der kompressiven Volatilität zu erfassen.

Strategieprinzip

Die Strategie verwendet den Brin-Band-Indikator und den Keltner-Kanal-Indikator, um den Preiskanal zu berechnen, der als Signal für erhöhte Volatilität gilt, wenn der Preis den Kanal durchbricht. Es kombiniert den Kompressionsmomentum-Indikator von LazyBear, der die Richtung des Preismomentums anhand einer linearen Regressionsmethode beurteilt.

Die Strategie enthält einen Momentumfilter, der nur dann ein Handelssignal erzeugt, wenn der Momentumabsolutwert über dem Schwellenwert liegt. Wenn die Volatilitätskompression (die Innerkanalverstärkung) und der Momentumfilter durchlaufen werden, beurteilt die Strategie die Richtung des Trends, um zu tun oder zu tun. Gleichzeitig werden Stop-Losses, Stopps und Stop-Loss-Tracking eingerichtet, um das Risiko zu kontrollieren.

Analyse der Stärken

Die Strategie integriert mehrere Indikatoren und ist relativ umfassend. Die Einbeziehung von Risikomanagementmechanismen kann einzelne Verluste begrenzen. Nach der Kompression der Volatilität kann die Richtung der Preisentwicklung rechtzeitig beurteilt werden. Die Parameter sind anpassbar und anpassungsfähig.

Risikoanalyse

Die Risiken bestehen hauptsächlich aus: falsche Durchbrüche führen zu Fehleinschätzungen; die Parameter sind falsch eingestellt und können nicht rechtzeitig umgekehrt werden; die Stop-Loss-Verluste werden durch Durchbrüche vergrößert. Die Parameter können optimiert werden, die Risikomanagementparameter angepasst werden und die richtigen Sorten und Handelszeiten gewählt werden, um diese Risiken zu verringern.

Optimierungsrichtung

Es kann in Kombination mit anderen Indikatoren geprüft werden, um Filtersignale zu filtern, z. B. den Handelsvolumen-Indikator; die Anpassung der dynamischen Wertminderung wird präziser; die Einstellung von Rücknahme-Stopps zur weiteren Risikokontrolle; die Prüfung der Wirksamkeit von mehr Sortendaten. Diese Optimierungen können die Strategie stabilisieren und verallgemeinern.

Zusammenfassen

Diese Strategie ist umfassender in der Beurteilung von Preistrends und -volatilität, hat einen hohen Grad an Integration, die Risikokontrollen sind vollständig, kann weiter verbessert werden, je nach Optimierungsrichtung, und ist stark anpassungsfähig für Preissprung nach der Erfassung von Volatilitätskompressionen.

Strategiequellcode
/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// Strategy based on LazyBear Squeeze Momentum Indicator
// © Bitduke
// All scripts: https://www.tradingview.com/u/Bitduke/#published-scripts

strategy(shorttitle="SMS", title="Squeeze Momentum Strategy", overlay=false )

length = input(12, title="BB Length")
mult = input(2.0, title="BB MultFactor")
lengthKC = input(16, title="KC Length")
mult_kc = input(1.5, title="KC MultFactor")


//FILTERS
useMomAverage = input(false, title="Filter for Momenutum value", type=input.bool)
MomentumMin = input(20, title="Min for momentum")

// Calculate BB
src = ohlc4

ma_1 = sma(src, length)
ma_2 = sma(src, lengthKC)
range_ma = sma(high - low, lengthKC)

dev = mult * stdev(src, length)

upper_bb = ma_1 + dev
lower_bb = ma_1 - dev

upper_kc = ma_2 + range_ma * mult_kc
lower_kc = ma_2 - range_ma * mult_kc

sqz_on = lower_bb > lower_kc and upper_bb < upper_kc
sqz_off = lower_bb < lower_kc and upper_bb > upper_kc
no_sqz = sqz_on == false and sqz_off == false

val = linreg(src - avg(avg(highest(hl2, lengthKC), lowest(low, lengthKC)), sma(hl2, lengthKC)), lengthKC, 0)

bcolor = iff(val > 0, iff(val > nz(val[1]), color.lime, color.green), iff(val < nz(val[1]), color.red, color.maroon))
scolor = no_sqz ? color.blue : sqz_on ? color.black : color.aqua
plot(val, color=bcolor, style=plot.style_histogram, linewidth=4)
plot(0, color=scolor, style=plot.style_cross, linewidth=2)

//LOGIC
//momentum filter
filterMom = useMomAverage ? abs(val) > MomentumMin / 100000 ? true : false : true

//standard condition
longCondition = scolor[1] != color.aqua and scolor == color.aqua and bcolor == color.lime and filterMom
exitLongCondition = bcolor == color.green
shortCondition = scolor[1] != color.aqua and scolor == color.aqua and bcolor == color.red and filterMom
exitShortCondition = bcolor == color.maroon

// Risk Management Sysyem
stop_loss = input(defval = 600, title="Stop Loss", minval = 0)
take_profit = input(defval = 1000, title="Take Profit", minval = 0)
trailing_stop = input(defval = 20, title="Trailing Stop", minval = 0)
// If the zero value is set for stop loss, take profit or trailing stop, then the function is disabled
s_loss = stop_loss >= 1 ? stop_loss : na
tk_profit = take_profit >= 1 ? take_profit : na
tr_stop = trailing_stop >= 1 ? trailing_stop : na


//STRATEGY
strategy.entry("SQ_Long", strategy.long, when=longCondition)
strategy.exit("Exit Long", from_entry = "SQ_Long", profit = take_profit, trail_points = trailing_stop, loss = s_loss)
strategy.close("SQ_Long", exitLongCondition)

strategy.entry("SQ_Short", strategy.short, when=shortCondition)
strategy.exit("Exit Short", from_entry = "SQ_Short", profit = take_profit, trail_points = trailing_stop, loss = s_loss )
strategy.close("SQ_Short", when=exitShortCondition)