Squeeze Momentum Trading Strategie auf Basis des LazyBear-Indikators

Schriftsteller:ChaoZhang, Datum: 2024-02-05 14:48:01
Tags:

img

Übersicht

Diese Strategie basiert auf dem Squeeze Momentum Indicator von LazyBear, mit zusätzlichen Momentumfiltern, einer geänderten Datenquelle und einem verbesserten Risikomanagementsystem und einem anpassbaren Backtesting-Zeitrahmen, mit dem Ziel, Preisausbrüche nach einer Volatilitätsdruck zu erfassen.

Strategie Logik

Die Strategie verwendet Bollinger-Bänder und Keltner-Kanäle zur Berechnung der Preiskanäle. Breakouts signalisieren eine erhöhte Volatilität.

Die Strategie fügt Momentumfilter hinzu und handelt nur, wenn die absolute Momentum-Schwelle überschritten wird. Bei Volatilitätspressing (Kanalverschärfung) mit Pass des Momentumfilters beurteilt sie die Trendrichtung für Long/Short. Sie setzt auch Stop Loss, Take Profit und Trailing Stop, um Risiken zu kontrollieren.

Analyse der Vorteile

Die Strategie integriert mehrere Indikatoren für ein umfassendes Urteilsvermögen. Sie begrenzt Verluste pro Handel mit Risikomanagementmechanismen. Sie kann die Preisentwicklung nach dem Druck rechtzeitig beurteilen. Anpassbare Parameter machen sie anpassungsfähig.

Risikoanalyse

Zu den Hauptrisiken gehören: falsche Ausbrüche, die zu falschen Beurteilungen führen; fehlende rechtzeitige Rückkehr bei unsachgemäßen Parameter-Einstellungen; Stop-Loss-Verstöße, die Verluste vergrößern. Diese können durch Optimierung von Parametern, Anpassung von Risikomanagement-Einstellungen, Auswahl geeigneter Produkte und Handelssessions gemildert werden.

Optimierungsrichtlinien

Überlegen Sie, andere Indikatorfilter wie Volumen zu kombinieren; die Schwellungsschwelle für höhere Präzision fein einstellen; den Stop-Loss für eine engere Risikokontrolle hinzufügen; die Testwirksamkeit für mehr Produkte. Diese Optimierungen können die Strategie robuster und allgemeiner machen.

Zusammenfassung

Die Strategie beurteilt Preisentwicklungen und -volatilität relativ umfassend mit einem hohen Integrationsgrad und verbesserten Risikokontrollmaßnahmen.


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



Mehr