Strategi Momentum Squeeze Berdasarkan Bollinger Bands dan Kalkin Channels


Tanggal Pembuatan: 2024-01-30 17:33:49 Akhirnya memodifikasi: 2024-01-30 17:33:49
menyalin: 0 Jumlah klik: 869
1
fokus pada
1617
Pengikut

Strategi Momentum Squeeze Berdasarkan Bollinger Bands dan Kalkin Channels

Ringkasan

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.

Prinsip Strategi

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.

Keunggulan Strategis

  1. Integrasi berbagai indikator teknis untuk meningkatkan akurasi keputusan perdagangan

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.

  1. Titik-titik pengekstrakan momentum akurat, potensi keuntungan besar

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.

  1. Transaksi terobosan dengan tingkat keberhasilan yang tinggi

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.

Risiko Strategis

  1. Pengaturan risiko untuk Brin Belt dan Kalkin Channel Parameter

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.

  1. Risiko terobosan

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.

  1. Risiko pembalikan tren

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.

Arah optimasi strategi

  1. Pengaturan Parameter Optimasi

Dengan lebih banyak data pengembalian, dapat ditemukan siklus parameter yang lebih baik dan pengaturan bandwidth untuk jalur Brink dan Kalkin, untuk meningkatkan efektivitas strategi.

  1. Meningkatkan strategi stop loss

Anda dapat mengatur stop loss bergerak atau stop loss berosilasi, stop loss cepat ketika harga berbalik, untuk mengontrol strategi maksimum withdrawal.

  1. Peningkatan persyaratan masuk kembali

Ketika strategi keluar dari posisi, Anda dapat mengatur kondisi masuk kembali tertentu, dan Anda dapat masuk kembali jika tren berlanjut.

  1. Tergabung dengan lebih banyak indikator

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.

Meringkaskan

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.

Kode Sumber 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")