
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.
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.
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.
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.
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.
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.
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.
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.
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.
Anda boleh menetapkan hentian bergerak atau hentian bergoyang, hentian cepat apabila harga berbalik, untuk mengawal strategi maksimum pulangan.
Apabila strategi keluar dari kedudukan, anda boleh menetapkan syarat kemasukan semula, dan jika trend berterusan, anda boleh masuk semula.
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.
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.
/*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")