
Strategi ini menggabungkan tiga indikator teknis yang berbeda, menghasilkan sinyal perdagangan dengan sistem garis ganda, dan menggunakan warna dan entitas garis K sebagai syarat penyaringan tambahan, sehingga membangun strategi perdagangan garis pendek yang lebih stabil dan efektif.
Seluruh strategi menggunakan kombinasi Brin Belt dan KC Channel untuk mengidentifikasi fase kompresi dan ekspansi pasar. Secara khusus, Brin Belt dianggap sebagai kompresi ketika berada di dalam KC Channel dan ekspansi ketika Brin Belt menembus KC Channel. Kompresi mewakili kemungkinan peningkatan fluktuasi dan pembalikan tren, yang menggunakan regresi linier sebagai indikator sinyal perdagangan utama.
Jika histogram regresi linier adalah positif (indicating uptrend), dan bar adalah garis K merah (indicating negative), dan entitas garis K lebih besar dari entitas rata-rata dari 30 garis K terakhir, sinyal kombinasi seperti itu lebih banyak; sebaliknya jika histogram regresi linier adalah negatif, bar adalah garis K hijau, dan entitas juga lebih besar, maka kosong.
Strategi ini juga memberikan latar belakang kompresi dan ekspansi yang dapat dilihat untuk membantu menilai tahap pasar.
Risiko dapat dikurangi dengan menyesuaikan parameter indikator, mengoptimalkan kondisi penyaringan, dan sebagainya.
Strategi ini dapat dioptimalkan dalam beberapa hal:
Strategi ini mengintegrasikan beberapa indikator, meningkatkan kondisi filter sambil mengidentifikasi peluang kompresi, untuk membentuk strategi garis pendek yang lebih kuat dan efisien. Efek yang lebih baik dapat diperoleh dengan mengoptimalkan parameter dan kondisi filter. Dan kerangka strategi ini fleksibel dan mudah disesuaikan untuk digunakan di berbagai varietas, layak untuk diuji dan dioptimalkan lebih 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)