Strategi ini menggabungkan tiga penunjuk teknikal yang berbeza dan menghasilkan isyarat perdagangan menggunakan sistem purata bergerak berganda, dengan penapis tambahan berdasarkan warna dan badan candela, untuk membina strategi perdagangan jangka pendek yang agak stabil dan berkesan.
Strategi ini menggunakan Bollinger Bands dan saluran KC dalam kombinasi untuk mengenal pasti fasa mampatan dan pengembangan di pasaran. Khususnya, apabila Bollinger Bands berada di dalam saluran KC, ia dianggap mampatan; apabila Bollinger Bands memecahkan saluran KC, ia dianggap perluasan. Memampatkan mewakili turun naik yang meningkat dan kemungkinan pembalikan trend, dan regresi linear digunakan sebagai penunjuk isyarat perdagangan utama pada masa ini.
Jika histogram regresi linear adalah positif (mewakili trend menaik) dan bar adalah lilin merah (mewakili penutupan lebih rendah), pada masa yang sama badan lilin lebih besar daripada 1/3 daripada badan purata 30 lilin yang lalu, isyarat gabungan sedemikian akan panjang. Sebaliknya, jika histogram regresi linear adalah negatif, bar adalah lilin hijau, dan badan juga besar, ia akan pendek.
Strategi ini juga menyediakan visualisasi latar belakang mampatan dan pengembangan untuk membantu menilai peringkat pasaran.
Risiko boleh dikurangkan dengan menyesuaikan parameter penunjuk, mengoptimumkan kriteria penapisan, dll.
Strategi ini boleh dioptimumkan dalam aspek berikut:
Strategi ini menggabungkan pelbagai penunjuk, sambil mengenal pasti peluang mampatan, ia meningkatkan keadaan penapisan untuk membentuk strategi jangka pendek yang agak kukuh dan cekap. Melalui parameter dan pengoptimuman keadaan penapisan, hasil yang lebih baik dapat diperoleh. Di samping itu, kerangka strategi fleksibel dan mudah disesuaikan untuk digunakan dalam pelbagai jenis, bernilai pengujian dan pengoptimuman lanjut.
/*backtest start: 2023-11-24 00:00:00 end: 2023-12-24 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2017 //@version=2 strategy(shorttitle = "Squeeze str 1.0", title="Noro's Squeeze Momentum Strategy v1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") length = input(20, title="BB Length") mult = input(2.0,title="BB MultFactor") lengthKC=input(20, title="KC Length") multKC = input(1.5, title="KC MultFactor") useTrueRange = true usecolor = input(true, defval = true, title = "Use color of candle") usebody = input(true, defval = true, title = "Use EMA Body") needbg = input(false, defval = false, title = "Show trend background") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") // 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 = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon)) scolor = noSqz ? blue : sqzOn ? black : gray trend = val > 0 ? 1 : val < 0 ? -1 : 0 //Background col = needbg == false ? na : trend == 1 ? lime : red bgcolor(col, transp = 80) //EMA Body body = abs(close - open) emabody = ema(body, 30) / 3 //Signals bar = close > open ? 1 : close < open ? -1 : 0 up = trend == 1 and (bar == -1 or usecolor == false) and (body > emabody or usebody == false) dn = trend == -1 and (bar == 1 or usecolor == false) and (body > emabody or usebody == false) if up strategy.entry("Long", strategy.long) if dn strategy.entry("Short", strategy.short)