Strategi ini adalah berdasarkan kepada LazyBear’s Compression Momentum Indicator dengan penambahan penapis momentum, perubahan sumber data, dan penambahan sistem pengurusan risiko yang boleh disesuaikan dengan tempoh masa pengembalian yang bertujuan untuk menangkap ledakan harga selepas kompresi yang tidak menentu.
Strategi ini menggunakan indikator Brin Belt dan indikator Keltner Channel untuk mengira saluran harga, yang dianggap sebagai isyarat peningkatan turun naik apabila harga menembusi saluran. Ia digabungkan dengan indikator momentum kompresi LazyBear, yang menggunakan kaedah regresi linear untuk menentukan arah pergerakan harga.
Strategi ini menambah penapis momentum, yang hanya akan mengeluarkan isyarat perdagangan apabila nilai mutlak momentum melebihi nilai terendah. Apabila kompresi bergelombang (pengetatan dalam saluran) dan penapis momentum berlalu, strategi menilai arah trend, melakukan lebih banyak atau kosong.
Strategi ini mengintegrasikan pelbagai penilaian indikator, lebih komprehensif; menggabungkan mekanisme pengurusan risiko, yang dapat mengehadkan kerugian tunggal; dapat menentukan arah trend harga tepat pada masanya selepas pemampatan turun naik; parameter boleh disesuaikan, beradaptasi kuat.
Risiko utama adalah: penembusan palsu menyebabkan kesalahan penghakiman; parameter tidak ditetapkan dengan betul, gagal untuk berbalik dalam masa yang tepat; Hentikan kerugian yang disebabkan oleh penembusan dan kekalahan diperluaskan. Anda boleh mengoptimumkan parameter, menyesuaikan parameter pengurusan risiko, memilih varieti dan masa perdagangan yang sesuai untuk mengurangkan risiko ini.
Anda boleh mempertimbangkan untuk menggabungkan isyarat penapis indikator lain, seperti indikator jumlah dagangan; menyesuaikan nilai terhad kuantiti dinamik dengan lebih tepat; menetapkan hentian penarikan balik untuk mengawal risiko lebih lanjut; menguji lebih banyak kesan data varieti. Pengoptimuman ini dapat menjadikan strategi lebih stabil dan meluas.
Strategi ini lebih menyeluruh menilai trend harga dan turun naik, tahap integrasi yang tinggi, langkah-langkah kawalan risiko yang lebih baik, boleh diperbaiki lagi mengikut arah pengoptimuman, dan mempunyai daya adaptasi yang kuat terhadap ledakan harga selepas menangkap kompresi turun naik.
/*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)