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.
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
Untuk keluar, apabila warna penunjuk momentum berubah menjadi kelabu, ia mewakili bahawa keadaan memerah telah berakhir dan trend mungkin berbalik.
Dengan menilai hubungan keseluruhan antara penunjuk ini, ketepatan keputusan dagangan dapat ditingkatkan dan kebarangkalian perdagangan yang salah dikurangkan.
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.
Berbanding dengan perdagangan pecah rawak, titik masuk yang dipilih oleh strategi ini adalah pada titik memerah antara Bollinger Bands dan Saluran Keltner.
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.
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.
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.
Melalui percubaan data backtesting yang lebih banyak, tetapan parameter kitaran dan lebar jalur yang lebih baik boleh didapati untuk meningkatkan prestasi strategi.
Tetapkan henti bergerak atau berayun untuk mengurangkan kerugian dengan cepat apabila harga berbalik.
Apabila strategi keluar dari kedudukan, syarat-syarat kemasukan semula tertentu boleh ditetapkan untuk memasuki semula pasaran jika trend berterusan.
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.
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")