Ini adalah strategi perdagangan kuantitatif yang dikembangkan berdasarkan indikator Momentum Squeeze LazyBear. Strategi ini mengintegrasikan Bollinger Band, Saluran Keltner, dan indikator momentum untuk mencapai perdagangan momentum breakout tingkat kemenangan tinggi melalui kombinasi beberapa indikator teknis.
Indikator inti dari strategi ini adalah Indikator Momentum Squeeze LazyBear. Indikator ini menentukan apakah Bollinger Bands sedang 'diperas' oleh Saluran Keltner. Ketika tekanan terjadi, itu mewakili bahwa pasar telah memasuki titik pecah potensial. Dengan menggabungkan arah indikator momentum, perdagangan dapat dilakukan ketika tekanan dilepaskan untuk menangkap pecahnya pasar.
Secara khusus, strategi ini pertama-tama menghitung Bollinger Bands 21 periode, dengan lebar 2 standar deviasi harga. Pada saat yang sama, strategi ini menghitung 20 periode Keltner Channels, dengan lebar 1,5 kali amplitudo harga. Ketika Bollinger Bands dipencet
Untuk keluar, ketika warna indikator momentum berubah menjadi abu-abu, itu mewakili bahwa keadaan menekan telah berakhir dan tren dapat berbalik.
Dengan menilai hubungan keseluruhan antara indikator-indikator ini, akurasi keputusan perdagangan dapat ditingkatkan dan kemungkinan kesalahan perdagangan dikurangi.
Strategi momentum squeeze dapat menangkap titik-titik kunci di mana pasar cenderung pecah. Titik-titik ini seringkali merupakan titik infleksi di mana pasar membuat penilaian arah yang penting. Jika dinilai dengan benar, pergerakan pasar berikutnya akan relatif lama, sehingga ruang keuntungan potensial dari strategi ini besar.
Dibandingkan dengan perdagangan breakout acak, titik masuk yang dipilih oleh strategi ini adalah pada titik perampasan antara Bollinger Bands dan Keltner Channels.
Parameter siklus dan parameter bandwidth dari Bollinger Bands dan Keltner Channels memiliki dampak besar pada hasil perdagangan. Jika parameter ditetapkan tidak tepat, penilaian yang salah dapat terjadi. Ini membutuhkan menemukan parameter optimal melalui banyak backtesting.
Selalu ada risiko bahwa harga dapat kembali setelah menembus titik yang dipilih oleh strategi ini, menyebabkan kerugian.
Ketika keadaan squeeze berakhir, strategi ini akan menutup semua posisi. Namun, kadang-kadang tren harga mungkin masih berlanjut, yang menimbulkan risiko keluar prematur. Logika keluar perlu dioptimalkan.
Melalui uji coba data backtesting yang lebih banyak, pengaturan siklus dan parameter bandwidth yang lebih baik dapat ditemukan untuk meningkatkan kinerja strategi.
Atur stop bergerak atau berosilasi untuk cepat memotong kerugian ketika harga berbalik.
Ketika strategi keluar dari posisi, kondisi masuk kembali tertentu dapat ditetapkan untuk masuk kembali ke pasar jika tren berlanjut.
Cobalah untuk memasukkan lebih banyak indikator dari berbagai jenis, seperti indikator volatilitas lainnya, indikator volume, dll, untuk membangun strategi komposit integrasi indikator, sehingga meningkatkan akurasi keputusan.
Strategi ini mengintegrasikan Bollinger Bands, Saluran Keltner dan indikator momentum. Dengan menilai hubungan antara indikator ini, ia memasuki titik-titik break-out tingkat keberhasilan yang tinggi. Ada ruang optimasi dalam banyak aspek seperti optimasi parameter, strategi stop loss, kondisi re-entry, dan integrasi indikator komposit untuk meningkatkan kinerja strategi.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //All credits to LazyBear. All I did was turn it into a strategy! strategy(title = "SQZMOM STRAT", overlay=false) // --- GENERAL INPUTS --- FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12) FromYear = input(defval = 2020, title = "From Year", minval = 2012) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToYear = input(defval = 9999, title = "To Year", minval = 2017) FromDay = 1 ToDay = 1 start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true get_round(value, precision) => round(value * (pow(10, precision))) / pow(10, precision) trade_leverage = input(1, title = "Trade - Leverage", step = 0.25) trade_risk = input(100, title = "Trade - Risk Percent", type = input.float, step = 0.1, minval = 0.1, maxval = 100) tradeType = input("LONG", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH"]) // --- SQZMOM CODE length = input(21, title="BB Length") mult = input(2.0,title="BB MultFactor") lengthKC=input(20, title="KC Length") multKC = input(1.5, title="KC MultFactor") useTrueRange = input(true, title="Use TrueRange (KC)", type=input.bool) // Calculate BB source = close basis = sma(source, length) dev = multKC * stdev(source, length) upperBB = basis + dev lowerBB = basis - dev // Calculate KC ma = sma(source, lengthKC) range = useTrueRange ? tr : (high - low) rangema = sma(range, lengthKC) upperKC = ma + rangema * multKC lowerKC = ma - rangema * multKC sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC) sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC) noSqz = (sqzOn == false) and (sqzOff == false) val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0) bcolor = color.gray if (val > 0 and val > nz(val[1])) bcolor := color.green if (val < 0 and val < nz(val[1])) bcolor := color.red scolor = noSqz ? color.blue : sqzOn ? color.black : color.gray plot(val, color=bcolor, style=plot.style_histogram, linewidth=4) plot(0, color=scolor, style=plot.style_cross, linewidth=2) // --- VWMA CODE --- useVWMA = input(false, title = "Use VWMA to selectively long/short?", type = input.bool) lengthVWMA=input(42, title = "VWMA Length", step = 1, minval = 1) useCV=input(false, type=input.bool, title="Use Cumulative Volume for VWMA?") nbfs = useCV ? cum(volume) : sum(volume, lengthVWMA) medianSrc=close calc_evwma(price, lengthVWMA, nb_floating_shares) => data = (nz(close[1]) * (nb_floating_shares - volume)/nb_floating_shares) + (volume*price/nb_floating_shares) m=calc_evwma(medianSrc, lengthVWMA, nbfs) // ---STRATEGY--- if ((tradeType == "LONG" or tradeType == "BOTH") and (m>0 or useVWMA == false)) longCondition = (val > 0 and noSqz == 0 and sqzOn == 0 and sqzOn[1] == 1) if (longCondition) contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4) strategy.entry("LONG", strategy.long, qty = contracts, when = window()) if((tradeType == "SHORT" or tradeType == "BOTH") and (m<0 or useVWMA == false)) shortCondition = (val < 0 and noSqz == 0 and sqzOn == 0 and sqzOn[1] == 1) if (shortCondition) contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4) strategy.entry("SHORT", strategy.short, qty = contracts, when = window()) if (bcolor == color.gray) strategy.close("LONG") strategy.close("SHORT")