Dual Moving Average Momentum Squeeze Strategi

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

img

Gambaran umum

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.

Logika Strategi

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.

Analisis Keuntungan

  • Menggunakan beberapa indikator untuk kombinasi dapat secara efektif menyaring sinyal palsu
  • Kompresi mewakili titik pembalikan potensial dan meningkatkan kinerja strategi
  • Filter tubuh menghindari tertipu oleh gelombang kecil dari pecah palsu
  • Mudah untuk mendapatkan hasil yang lebih baik melalui optimasi parameter

Analisis Risiko

  • Regresi linier dapat dengan mudah mengeluarkan sinyal yang salah, yang dapat menyebabkan kerugian
  • Efek Bollinger Bands dan saluran KC untuk menilai kompresi tidak ideal
  • Kriteria penyaringan terlalu ketat, mungkin tidak memiliki titik masuk yang lebih baik
  • Penarikan mungkin lebih besar, perlu menahan tingkat toleransi tertentu

Risiko dapat dikurangi dengan menyesuaikan parameter indikator, mengoptimalkan kriteria penyaringan, dll.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Coba kombinasi parameter yang berbeda dan panjang untuk menemukan parameter optimal
  2. Meningkatkan atau mengurangi kondisi penyaringan untuk menemukan tingkat penyaringan yang optimal
  3. Menggunakan metode pembelajaran mesin untuk secara otomatis menemukan parameter optimal
  4. Efek tes pada varietas tertentu dan menyesuaikan parameter sesuai dengan varietas yang berbeda
  5. Tambahkan strategi stop loss untuk mengendalikan kerugian tunggal

Kesimpulan

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)

Lebih banyak