Squeeze Momentum Trading Strategy Berdasarkan Indikator LazyBear

Penulis:ChaoZhang, Tanggal: 2024-02-05 14:48:01
Tag:

img

Gambaran umum

Strategi ini didasarkan pada Indikator Momentum Squeeze LazyBear, dengan penyaring momentum yang ditambahkan, sumber data yang diubah, dan sistem manajemen risiko yang ditingkatkan dan kerangka waktu backtesting yang dapat disesuaikan, yang bertujuan untuk menangkap lonjakan harga setelah tekanan volatilitas.

Logika Strategi

Strategi ini menggunakan Bollinger Bands dan Keltner Channels untuk menghitung saluran harga. Breakout menandakan peningkatan volatilitas. Ini menggabungkan Squeeze Momentum Indicator LazyBear yang menggunakan regresi linier untuk menentukan arah momentum harga.

Strategi ini menambahkan filter momentum, hanya berdagang ketika momentum absolut melebihi ambang batas. Pada perampasan volatilitas (penegangan saluran) dengan filter momentum dilewati, strategi ini menilai arah tren untuk panjang / pendek.

Analisis Keuntungan

Strategi ini mengintegrasikan beberapa indikator untuk penilaian yang komprehensif. Ini membatasi kerugian per perdagangan dengan mekanisme manajemen risiko. Ini dapat menilai tren harga pasca-penekanan tepat waktu. Parameter yang dapat disesuaikan membuatnya dapat beradaptasi.

Analisis Risiko

Risiko utama termasuk: penyusutan palsu yang menyebabkan penilaian yang salah; kegagalan untuk membalikkan tepat waktu dengan pengaturan parameter yang tidak tepat; pelanggaran stop loss yang memperbesar kerugian.

Arahan Optimasi

Pertimbangkan untuk menggabungkan filter indikator lain seperti volume; menyempurnakan ambang momentum untuk presisi yang lebih tinggi; menambahkan stop loss penarikan untuk kontrol risiko yang lebih ketat; efektivitas uji di lebih banyak produk. Optimasi ini dapat membuat strategi lebih kuat dan umum.

Ringkasan

Strategi ini menilai tren harga dan volatilitas secara relatif komprehensif dengan tingkat integrasi yang tinggi dan langkah-langkah pengendalian risiko yang ditingkatkan.


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



Lebih banyak