
Strategi ini menggabungkan tiga petunjuk teknikal yang berbeza, menghasilkan isyarat perdagangan dengan sistem dua baris, dan menggunakan warna dan entiti garis K sebagai syarat penapisan tambahan, untuk membina strategi perdagangan garis pendek yang lebih stabil dan berkesan.
Strategi ini menggunakan kombinasi Brin Belt dan KC Channel untuk mengenal pasti tahap pengurangan dan pengembangan pasaran. Khususnya, apabila Brin Belt berada di dalam KC Channel dianggap sebagai pengurangan, dan apabila Brin Belt melintasi KC Channel dianggap sebagai pengembangan.
Jika histogram regresi linear adalah positif ((mewakili trend naik), dan bar adalah K merah ((mewakili bar berkurangan), dan entiti K lebih besar daripada 1⁄3 entiti purata 30 garis K terakhir, isyarat gabungan seperti itu dilakukan; sebaliknya jika histogram regresi linear adalah negatif, bar adalah K hijau, entiti juga lebih besar, maka kosong.
Strategi ini juga memberikan latar belakang untuk meringkaskan dan meluaskan visual, membantu menilai peringkat pasaran.
Risiko boleh dikurangkan dengan menyesuaikan parameter penunjuk, mengoptimumkan keadaan penapisan dan sebagainya.
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Strategi ini mengintegrasikan beberapa indikator, menambah syarat penapisan sambil mengenal pasti peluang pemampatan, membentuk strategi garis pendek yang lebih mantap dan cekap. Hasil yang lebih baik boleh diperoleh dengan mengoptimumkan parameter dan syarat penapisan. Dan kerangka strategi ini fleksibel, mudah disesuaikan untuk digunakan dalam pelbagai jenis, dan layak untuk diuji dan dioptimumkan 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)