Squeeze Momentum Breakout Strategi

Penulis:ChaoZhang, Tanggal: 2024-01-30 17:33:49
Tag:

img

Gambaran umum

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.

Logika Strategi

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 oleh Keltner Channels, sinyal menekan dipicu. Selain itu, strategi ini juga menghitung momentum harga relatif terhadap titik tengah saluran harga sendiri selama periode waktu. Ketika menekan terjadi, dikombinasikan dengan arah indikator momentum, menentukan apakah akan membeli atau menjual.

Untuk keluar, ketika warna indikator momentum berubah menjadi abu-abu, itu mewakili bahwa keadaan menekan telah berakhir dan tren dapat berbalik.

Keuntungan

  1. Mengintegrasikan beberapa indikator teknis untuk meningkatkan akurasi

Dengan menilai hubungan keseluruhan antara indikator-indikator ini, akurasi keputusan perdagangan dapat ditingkatkan dan kemungkinan kesalahan perdagangan dikurangi.

  1. Titik pemadatan momentum yang akurat dengan potensi keuntungan yang besar

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.

  1. Mencapai perdagangan breakout dengan tingkat keberhasilan yang tinggi

Dibandingkan dengan perdagangan breakout acak, titik masuk yang dipilih oleh strategi ini adalah pada titik perampasan antara Bollinger Bands dan Keltner Channels.

Risiko

  1. Risiko pengaturan parameter yang tidak benar

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.

  1. Risiko kegagalan penembusan

Selalu ada risiko bahwa harga dapat kembali setelah menembus titik yang dipilih oleh strategi ini, menyebabkan kerugian.

  1. Risiko pembalikan tren

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.

Arahan Optimasi

  1. Mengoptimalkan pengaturan parameter

Melalui uji coba data backtesting yang lebih banyak, pengaturan siklus dan parameter bandwidth yang lebih baik dapat ditemukan untuk meningkatkan kinerja strategi.

  1. Tambahkan strategi stop loss

Atur stop bergerak atau berosilasi untuk cepat memotong kerugian ketika harga berbalik.

  1. Tambahkan kondisi masuk kembali

Ketika strategi keluar dari posisi, kondisi masuk kembali tertentu dapat ditetapkan untuk masuk kembali ke pasar jika tren berlanjut.

  1. Masukkan lebih banyak indikator

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.

Ringkasan

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

Lebih banyak