Strategi ini menggabungkan tiga indikator teknis yang berbeda dan menghasilkan sinyal perdagangan menggunakan sistem rata-rata bergerak ganda, dengan filter tambahan berdasarkan warna dan tubuh lilin, untuk membangun strategi perdagangan jangka pendek yang relatif stabil dan efektif.
Strategi ini menggunakan Bollinger Bands dan saluran KC dalam kombinasi untuk mengidentifikasi fase kompresi dan ekspansi di pasar. Secara khusus, ketika Bollinger Bands berada dalam saluran KC, itu dianggap kompresi; ketika Bollinger Bands menembus saluran KC, itu dianggap ekspansi. Kompresi mewakili volatilitas yang meningkat dan kemungkinan pembalikan tren, dan regresi linier digunakan sebagai indikator sinyal perdagangan utama pada saat ini.
Jika histogram regresi linier positif (mewakili tren naik) dan bilah adalah lilin merah (mewakili dekat lebih rendah), pada saat yang sama tubuh lilin lebih besar dari 1/3 dari tubuh rata-rata dari 30 lilin terakhir, sinyal kombinasi seperti itu akan panjang. Sebaliknya, jika histogram regresi linier negatif, bilah adalah lilin hijau, dan tubuhnya juga besar, itu akan pendek.
Strategi ini juga menyediakan visualisasi latar belakang kompresi dan ekspansi untuk membantu menilai tahap pasar.
Risiko dapat dikurangi dengan menyesuaikan parameter indikator, mengoptimalkan kriteria penyaringan, dll.
Strategi dapat dioptimalkan dalam aspek berikut:
Strategi ini menggabungkan beberapa indikator, sementara mengidentifikasi peluang kompresi, meningkatkan kondisi penyaringan untuk membentuk strategi jangka pendek yang relatif kuat dan efisien. Melalui parameter dan pengoptimalan kondisi penyaringan, hasil yang lebih baik dapat diperoleh. Selain itu, kerangka strategi fleksibel dan mudah disesuaikan untuk digunakan dalam berbagai varietas, layak pengujian lebih lanjut dan pengoptimalan.
/*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)