
Ini adalah strategi perdagangan kuantitatif yang dikembangkan berdasarkan indikator momentum yang diekstraksi oleh LazyBear. Strategi ini mengintegrasikan Brin Belt, Kalkin Channel, dan indikator momentum, untuk mencapai penjualan momentum yang sangat tinggi melalui kombinasi berbagai indikator teknis.
Indikator utama dari strategi ini adalah LazyBear’s momentum squeeze indicator. Indikator ini menentukan apakah Bollinger Bands telah diekspresikan oleh Kalkin Channel, dan ketika squeeze terjadi, pasar memasuki titik ledakan potensial.
Secara khusus, strategi ini pertama-tama menghitung pita Brin 21 siklus dengan bandwidth 2 kali lipat dari selisih standar harga. Di samping itu, menghitung saluran Kalkin 20 siklus dengan bandwidth 1,5 kali lipat dari amplitudo harga. Ketika pita Brin diekstrusi oleh kalkin, sinyal eksekusi dikeluarkan. Selain itu, strategi ini juga menghitung momentum harga relatif terhadap titik tengah saluran harga sendiri selama beberapa waktu.
Di luar lapangan, tren mungkin akan berbalik ketika indikator dinamika berubah warna menjadi abu-abu, meratakan posisi, menandakan berakhirnya keadaan ekses.
Strategi ini mengintegrasikan Brin Belt, Kalkin Channel, dan Dynamic Indicators, yang dapat meningkatkan keakuratan keputusan perdagangan dan mengurangi probabilitas perdagangan yang salah dengan menilai hubungan kompleks dari indikator-indikator ini.
Strategi eksekusi momentum dapat menangkap titik-titik penting dari ledakan pasar, titik-titik ini seringkali merupakan titik pivot di mana pasar membuat keputusan arah yang penting, dan jika keputusan itu benar, maka operasi tren selanjutnya akan relatif panjang, sehingga potensi keuntungan dari strategi sangat besar.
Berbeda dengan penembusan acak, strategi ini memilih titik masuk yang berada di titik-titik kesesakan antara Brin Belt dan Kalkin Corridor, yang memiliki tingkat keberhasilan transaksi yang tinggi berdasarkan integrasi indikator.
Periode parameter dan bandwidth parameter pengaturan Brin Belt dan Kalkin Channel sangat berpengaruh pada hasil perdagangan strategi. Jika parameter yang tidak benar diatur, dapat menyebabkan kesalahan penilaian. Ini membutuhkan banyak pengulangan untuk menemukan parameter terbaik.
Setiap perdagangan yang terobosan memiliki risiko kegagalan, dan mungkin akan kembali kembali dan menyebabkan kerugian ketika harga melewati titik yang dipilih oleh strategi tersebut. Hal ini memerlukan penghentian kerugian yang ketat untuk dikendalikan.
Strategi ini akan meratakan semua posisi ketika kondisi squeeze berakhir. Namun, kadang-kadang tren harga masih dapat berlanjut, yang menimbulkan risiko bahwa strategi akan keluar lebih awal. Ini memerlukan optimasi logika penilaian keluar.
Dengan lebih banyak data pengembalian, dapat ditemukan siklus parameter yang lebih baik dan pengaturan bandwidth untuk jalur Brink dan Kalkin, untuk meningkatkan efektivitas strategi.
Anda dapat mengatur stop loss bergerak atau stop loss berosilasi, stop loss cepat ketika harga berbalik, untuk mengontrol strategi maksimum withdrawal.
Ketika strategi keluar dari posisi, Anda dapat mengatur kondisi masuk kembali tertentu, dan Anda dapat masuk kembali jika tren berlanjut.
Anda dapat mencoba menggabungkan lebih banyak jenis indikator, seperti indikator volatilitas lainnya, indikator volume transaksi, dan lain-lain, untuk membangun strategi gabungan yang mengintegrasikan indikator untuk meningkatkan akurasi keputusan.
Strategi ini mengintegrasikan Brin Belt, Kalkin Channel dan momentum indikator, dengan menilai hubungan indikator ini, memilih titik masuk terobosan dengan tingkat keberhasilan yang tinggi. Ada ruang untuk pengoptimalan dalam berbagai aspek seperti optimasi parameter, strategi stop loss, kondisi masuk kembali, dan integrasi indikator komposit.
/*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")