Dual Moving Average Momentum Squeeze Strategi

Penulis:ChaoZhang, Tarikh: 2023-12-25 17:01:28
Tag:

img

Ringkasan

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.

Logika Strategi

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.

Analisis Kelebihan

  • Menggunakan pelbagai penunjuk untuk gabungan dapat menapis isyarat palsu dengan berkesan
  • Pemampatan mewakili titik pembalikan yang berpotensi dan meningkatkan prestasi strategi
  • Penapis badan mengelakkan tertipu oleh gelombang kecil pecah palsu
  • Mudah untuk mendapatkan hasil yang lebih baik melalui pengoptimuman parameter

Analisis Risiko

  • Regresi linear boleh dengan mudah mengeluarkan isyarat yang salah, yang boleh membawa kepada kerugian
  • Kesan Bollinger Bands dan saluran KC untuk menilai mampatan tidak ideal
  • Kriteria penapisan terlalu keras, mungkin hilang titik masuk yang lebih baik
  • Pengeluaran mungkin lebih besar, perlu menahan tahap toleransi tertentu

Risiko boleh dikurangkan dengan menyesuaikan parameter penunjuk, mengoptimumkan kriteria penapisan, dll.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Cuba kombinasi parameter yang berbeza dan panjang untuk mencari parameter optimum
  2. Meningkatkan atau mengurangkan keadaan penapisan untuk mencari tahap penapisan yang optimum
  3. Gunakan kaedah pembelajaran mesin untuk mencari parameter optimum secara automatik
  4. Kesan ujian dalam varieti tertentu dan menyesuaikan parameter mengikut varieti yang berbeza
  5. Tambah strategi stop loss untuk mengawal kerugian tunggal

Kesimpulan

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)

Lebih lanjut