Strategi Squeeze Momentum Berdasarkan Bollinger Bands dan Saluran Kalkin


Tarikh penciptaan: 2024-01-30 17:33:49 Akhirnya diubah suai: 2024-01-30 17:33:49
Salin: 0 Bilangan klik: 869
1
fokus pada
1617
Pengikut

Strategi Squeeze Momentum Berdasarkan Bollinger Bands dan Saluran Kalkin

Gambaran keseluruhan

Ini adalah strategi dagangan kuantitatif yang dibangunkan berdasarkan LazyBear’s Momentum Extrusion Indicator. Strategi ini mengintegrasikan Brin Belt, Kalkin Channel, dan Momentum Indicator untuk mencapai kejayaan yang tinggi dalam penembusan momentum melalui gabungan pelbagai petunjuk teknikal.

Prinsip Strategi

Penunjuk utama strategi ini adalah penunjuk pelepasan momentum LazyBear. Penunjuk ini menentukan sama ada Bollinger Bands telah dipotong oleh saluran Kalkin, dan apabila pelepasan berlaku, ia mewakili pasaran memasuki titik pecah yang berpotensi.

Khususnya, strategi ini pertama-tama mengira 21 kitaran pita Brin, dengan lebar 2 kali perbezaan piawai harga. Pada masa yang sama, ia mengira 20 kitaran saluran Kalkin, dengan lebar 1.5 kali kenaikan harga. Apabila pita Brin dipaku oleh batang saluran Kalkin, ia mengeluarkan isyarat penekanan.

Di luar lapangan, trend mungkin berbalik apabila warna indikator momentum menjadi kelabu, meratakan kedudukan, yang mewakili berakhirnya keadaan tekanan.

Kelebihan Strategik

  1. Mengintegrasikan pelbagai petunjuk teknikal untuk meningkatkan ketepatan keputusan perdagangan

Strategi ini mengintegrasikan Brin Belt, Kalkin Channel, dan Indeks Kinerja, yang dapat meningkatkan ketepatan keputusan perdagangan dan mengurangkan kemungkinan perdagangan yang salah dengan menilai hubungan komprehensif antara indikator-indikator ini.

  1. Pengekstrakan momentum tepat, peluang keuntungan yang besar

Strategi penyemprotan momentum dapat menangkap titik-titik penting di mana pasaran meletus, titik-titik ini sering menjadi titik-titik penting di mana pasaran membuat keputusan arah yang penting, dan jika keputusan itu betul, maka pergerakan yang akan berlaku kemudian akan lebih lama, oleh itu potensi keuntungan strategi adalah besar.

  1. Transaksi terobosan dengan kadar kejayaan tinggi

Berbanding dengan perdagangan terobosan secara rawak, titik masuk yang dipilih oleh strategi ini terletak di titik-titik penekanan Brin Belt dan Kalkin Channel, yang mempunyai kadar kejayaan dagangan yang tinggi berdasarkan integrasi indikator.

Risiko Strategik

  1. Pengaturan risiko untuk Brin Belt dan Kalkin Channel Parameter

Seting parameter tempoh dan parameter lebar jalur Brin dan Kalkin mempunyai kesan yang besar terhadap hasil perdagangan strategi. Jika parameter tidak ditetapkan dengan betul, ia boleh menyebabkan kesalahan penghakiman. Ini memerlukan banyak pengulangan untuk mencari parameter terbaik.

  1. Risiko untuk gagal

Mana-mana perdagangan pecah mempunyai risiko kegagalan, dan apabila harga menembusi titik pilihan strategi, kemungkinan untuk kembali semula, menyebabkan kerugian. Ini memerlukan kawalan hentian yang ketat.

  1. Risiko pembalikan arah aliran

Strategi ini akan meratakan semua kedudukan apabila keadaan tekanan berakhir. Tetapi kadang-kadang trend harga masih boleh berlanjutan, yang menimbulkan risiko strategi keluar lebih awal. Ini memerlukan pengoptimuman logik keputusan keluar.

Arah pengoptimuman strategi

  1. Tetapan parameter optimum

Dengan lebih banyak data pengembalian ujian kesalahan, anda boleh mencari parameter yang lebih baik dalam jangka masa dan bandwidth yang ditetapkan di jalur Bryn dan Kalkin untuk meningkatkan keberkesanan strategi.

  1. Meningkatkan strategi hentikan kerugian

Anda boleh menetapkan hentian bergerak atau hentian bergoyang, hentian cepat apabila harga berbalik, untuk mengawal strategi maksimum pulangan.

  1. Penambahan syarat kemasukan semula

Apabila strategi keluar dari kedudukan, anda boleh menetapkan syarat kemasukan semula, dan jika trend berterusan, anda boleh masuk semula.

  1. Gabungan dengan lebih banyak penunjuk

Anda boleh cuba menggabungkan lebih banyak jenis penunjuk, seperti penunjuk turun naik lain, penunjuk jumlah transaksi, dan lain-lain, untuk mewujudkan strategi gabungan penunjuk yang bersepadu untuk meningkatkan ketepatan keputusan.

ringkaskan

Strategi ini mengintegrasikan jalur Brin, saluran Kalkin dan indikator momentum, dengan menilai hubungan indikator ini, memilih titik masuk yang berjaya dengan kadar kejayaan yang tinggi. Terdapat ruang untuk pengoptimuman dalam pelbagai aspek seperti pengoptimuman parameter, strategi penangguhan kerugian, syarat kemasukan semula, dan integrasi indikator komposit.

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