Squeeze Momentum Breakout Strategi

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

img

Ringkasan

Ini adalah strategi dagangan kuantitatif yang dibangunkan berdasarkan penunjuk Momentum Squeeze LazyBear. Strategi ini mengintegrasikan Bollinger Bands, Saluran Keltner, dan penunjuk momentum untuk mencapai perdagangan pecah momentum dengan kadar kemenangan yang tinggi melalui gabungan beberapa penunjuk teknikal.

Logika Strategi

Indikator utama strategi ini ialah Indikator Momentum Squeeze LazyBear. Indikator ini menentukan sama ada Bollinger Bands sedang 'diperas' oleh Saluran Keltner. Apabila tekanan berlaku, ia mewakili bahawa pasaran telah memasuki titik pecah berpotensi. Dengan menggabungkan arah penunjuk momentum, dagangan boleh diambil apabila tekanan dilepaskan untuk menangkap pecah pasaran.

Secara khusus, strategi ini mula-mula mengira Bollinger Bands 21 tempoh, dengan lebar 2 penyimpangan standard harga. Pada masa yang sama, ia mengira Saluran Keltner 20 tempoh, dengan lebar 1.5 kali amplitud harga. Apabila Bollinger Bands disekat oleh Saluran Keltner, isyarat menekan dicetuskan. Di samping itu, strategi ini juga mengira momentum harga berbanding dengan titik tengah saluran harga sendiri dalam tempoh masa. Apabila tekanan berlaku, digabungkan dengan arah penunjuk momentum, ia menentukan sama ada untuk membeli atau menjual.

Untuk keluar, apabila warna penunjuk momentum berubah menjadi kelabu, ia mewakili bahawa keadaan memerah telah berakhir dan trend mungkin berbalik.

Kelebihan

  1. Mengintegrasikan pelbagai penunjuk teknikal untuk meningkatkan ketepatan

Dengan menilai hubungan keseluruhan antara penunjuk ini, ketepatan keputusan dagangan dapat ditingkatkan dan kebarangkalian perdagangan yang salah dikurangkan.

  1. Titik pemampatan momentum yang tepat dengan potensi keuntungan yang besar

Strategi memampatkan momentum boleh menangkap titik-titik utama di mana pasaran mungkin pecah. Titik-titik ini sering merupakan titik perubahan di mana pasaran membuat penilaian arah yang penting. Jika dinilai dengan betul, pergerakan pasaran berikutnya akan agak lama, jadi ruang keuntungan berpotensi strategi adalah besar.

  1. Mencapai perdagangan breakout dengan kadar kejayaan tinggi

Berbanding dengan perdagangan pecah rawak, titik masuk yang dipilih oleh strategi ini adalah pada titik memerah antara Bollinger Bands dan Saluran Keltner.

Risiko

  1. Risiko tetapan parameter yang tidak betul

Parameter kitaran dan parameter lebar jalur Bollinger Bands dan Saluran Keltner mempunyai kesan yang besar terhadap hasil perdagangan. Jika parameter ditetapkan dengan tidak tepat, penilaian yang salah mungkin berlaku. Ini memerlukan mencari parameter optimum melalui banyak pengujian belakang.

  1. Risiko kegagalan pecah

Selalu ada risiko bahawa harga boleh kembali selepas memecahkan titik yang dipilih oleh strategi ini, menyebabkan kerugian. Ini perlu dihentikan dengan ketat untuk mengawal kerugian.

  1. Risiko pembalikan trend

Apabila keadaan memerah berakhir, strategi ini akan menutup semua kedudukan. Walau bagaimanapun, kadang-kadang trend harga masih boleh berterusan, yang menimbulkan risiko keluar awal. Logik keluar perlu dioptimumkan.

Arahan pengoptimuman

  1. Mengoptimumkan tetapan parameter

Melalui percubaan data backtesting yang lebih banyak, tetapan parameter kitaran dan lebar jalur yang lebih baik boleh didapati untuk meningkatkan prestasi strategi.

  1. Tambah strategi stop loss

Tetapkan henti bergerak atau berayun untuk mengurangkan kerugian dengan cepat apabila harga berbalik.

  1. Tambah syarat kemasukan semula

Apabila strategi keluar dari kedudukan, syarat-syarat kemasukan semula tertentu boleh ditetapkan untuk memasuki semula pasaran jika trend berterusan.

  1. Masukkan lebih banyak penunjuk

Cuba untuk menggabungkan lebih banyak penunjuk jenis yang berbeza, seperti penunjuk turun naik lain, penunjuk jumlah, dan lain-lain, untuk mewujudkan strategi komposit integrasi penunjuk, untuk meningkatkan ketepatan keputusan.

Ringkasan

Strategi ini mengintegrasikan Bollinger Band, Saluran Keltner dan penunjuk momentum. Dengan menilai hubungan antara penunjuk ini, ia memasuki titik-titik penembusan kadar kejayaan yang tinggi. Terdapat ruang pengoptimuman dalam banyak aspek seperti pengoptimuman parameter, strategi stop loss, syarat masuk semula, dan integrasi penunjuk komposit untuk meningkatkan prestasi 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 lanjut