Strategi perdagangan sistem rata-rata bergerak multi-frame

Penulis:ChaoZhang, Tanggal: 2023-12-12 16:07:18
Tag:

img

Gambaran umum

Strategi ini mengadopsi sistem rata-rata bergerak multi-frame, dikombinasikan dengan RSI dan indikator teknis lainnya, untuk mencapai beralih otomatis antara posisi panjang dan pendek.

Prinsip-prinsip

Indikator inti dari strategi ini adalah sistem rata-rata bergerak. Strategi ini menggunakan beberapa indikator rata-rata bergerak seperti JMA, TEMA, DEMA untuk menghitung tren harga selama periode yang berbeda seperti 15 menit, 30 menit, 60 menit. Misalnya, tren MA yang dihitung oleh JMA dalam kerangka waktu 15 menit mewakili penilaian tren harga dalam kerangka waktu itu. Kemudian strategi membandingkan tren harga antara kerangka waktu yang berbeda untuk mengidentifikasi perbedaan antara tren yang lebih panjang dan lebih pendek. Jika divergensi yang signifikan terdeteksi, sinyal perdagangan akan dihasilkan. Selain itu, strategi ini juga menggabungkan indikator lain seperti RSI dan Trend Gelombang untuk memastikan keandalan sinyal perdagangan.

Secara khusus, variabel trend, trend2 dan trend3 dalam strategi mewakili tren harga dari kerangka waktu 15 menit, 30 menit dan 60 menit masing-masing. Jika ada pembalikan harga 15 menit, sementara 30 menit dan 60 menit belum berbalik, itu dinilai sebagai divergensi antara tren yang lebih pendek dan lebih lama, sehingga menghasilkan sinyal perdagangan. Tidak ada sinyal yang akan dihasilkan jika tren dari semua kerangka waktu konsisten.

Dengan membandingkan hubungan antara beberapa kerangka waktu dan menyaring beberapa sinyal palsu, sinyal perdagangan yang lebih dapat diandalkan dapat dihasilkan ini adalah gagasan inti dari strategi.

Analisis Keuntungan

Keuntungan utama dari strategi ini adalah:

  1. Peningkatan keandalan sinyal melalui analisis multi-frame waktu dan penyaringan sinyal palsu;
  2. Menghindari masalah dengan indikator tunggal dengan menggabungkan beberapa indikator untuk penilaian komprehensif;
  3. Otomatis beralih antara posisi panjang dan pendek tanpa intervensi manual, mengurangi kesulitan operasi.

Analisis Risiko

Beberapa risiko juga ada dengan strategi ini:

  1. Analisis multi-frame waktu memperkenalkan ketidakpastian seputar waktu masuk perdagangan yang dapat menyebabkan hilangnya harga masuk terbaik;
  2. Pengaturan parameter yang tidak tepat ketika menggabungkan beberapa indikator dapat menyebabkan kualitas sinyal perdagangan memburuk;
  3. Otomatis posisi beralih risiko over-optimasi dan kinerja perdagangan yang lebih lemah real versus backtests.

Kami dapat mengambil langkah-langkah berikut untuk mengurangi risiko di atas:

  1. Parameter kerangka waktu yang disesuaikan dengan baik untuk memastikan menangkap sinyal jangka pendek untuk masuk tepat waktu;
  2. pengujian backtesting yang luas untuk terus mengoptimalkan parameter indikator;
  3. Intervensi yang wajar dalam perdagangan nyata untuk mencegah perdagangan buta oleh sistem otomatis.

Arahan Optimasi

Ada ruang untuk optimalisasi lebih lanjut dari strategi ini:

  1. Memperkenalkan algoritma pembelajaran mesin untuk mengoptimalkan parameter secara otomatis di berbagai indikator melalui pelatihan model;
  2. Menambahkan pengaturan slippage adaptif berdasarkan tingkat volatilitas pasar untuk meningkatkan kinerja perdagangan riil;
  3. Menggabungkan mekanisme konfirmasi harga-volume untuk menghindari kerugian dari pembalikan tren yang cepat.

Kesimpulan

Strategi ini membandingkan tren harga multi-timeframe untuk mengidentifikasi hubungan jangka panjang versus jangka pendek, dan menghasilkan sinyal perdagangan melalui analisis beberapa indikator mencapai switching otomatis antara panjang dan pendek dengan hasil backtest yang baik.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Drexel Strategy", overlay=true )
Length1=7
Length2=9
Multiplier=input(1.5,"Multiplier")
jma(src,length) =>
    beta = 0.45*(length-1)/(0.45*(length-1)+2)
    alpha = beta
    tmp0 = (1-alpha)*src + alpha*nz(tmp0[1])
    tmp1 = (src - tmp0[0])*(1-beta) + beta*nz(tmp1[1])
    tmp2 = tmp0[0] + tmp1[0]
    tmp3 = (tmp2[0] - nz(tmp4[1]))*((1-alpha)*(1-alpha)) + (alpha*alpha)*nz(tmp3[1])
    tmp4 = nz(tmp4[1]) + tmp3[0]
    JMA = tmp4
    JMA
rsx(src,length) =>
    f90_ = (nz(f90_[1]) == 0.0) ? 1.0 : (nz(f88[1]) <= nz(f90_[1])) ? nz(f88[1])+1 : nz(f90_[1])+1
    f88 = (nz(f90_[1]) == 0.0) and (length-1 >= 5) ? length-1.0 : 5.0 
    f8 =  100.0*(src) 
    f18 = 3.0 / (length + 2.0) 
    f20 = 1.0 - f18 
    f10 = nz(f8[1])
    v8 = f8 - f10 
    f28 = f20 * nz(f28[1]) + f18 * v8 
    f30 = f18 * f28 + f20 * nz(f30[1])
    vC = f28 * 1.5 - f30 * 0.5 
    f38 = f20 * nz(f38[1]) + f18 * vC 
    f40 = f18 * f38 + f20 * nz(f40[1])
    v10 = f38 * 1.5 - f40 * 0.5 
    f48 = f20 * nz(f48[1]) + f18 * v10 
    f50 = f18 * f48 + f20 * nz(f50[1])
    v14 = f48 * 1.5 - f50 * 0.5 
    f58 = f20 * nz(f58[1]) + f18 * abs(v8) 
    f60 = f18 * f58 + f20 * nz(f60[1])
    v18 = f58 * 1.5 - f60 * 0.5
    f68 = f20 * nz(f68[1]) + f18 * v18 
    f70 = f18 * f68 + f20 * nz(f70[1])
    v1C = f68 * 1.5 - f70 * 0.5 
    f78 = f20 * nz(f78[1]) + f18 * v1C 
    f80 = f18 * f78 + f20 * nz(f80[1])
    v20 = f78 * 1.5 - f80 * 0.5
    f0 = ((f88 >= f90_) and (f8 != f10)) ? 1.0  : 0.0
    f90 = ((f88 == f90_) and (f0 == 0.0))  ? 0.0  : f90_
    v4_ = ((f88 < f90) and (v20 > 0.0000000001)) ? (v14 / v20 + 1.0) * 50.0 : 50.0
    rsx = ((v4_ > 100.0) ? 100.0 : (v4_ < 0.0) ? 0.0 : v4_)-50
    rsx
xPrice=open
emaA = ema(xPrice, Length2)  
Xprice = rsx(open,14)
XPrice = high, xprice = low
xe1 = jma(xPrice, Length1)
xe11 = jma(Xprice[1],Length1)
xe111 = jma(XPrice[1],Length1)
xe1111=jma(xprice[1],Length1)
xe2 = jma(xe1, Length1)
xe21 = jma(xe111, Length1)
xe3 = jma(xe2, Length1)
xe31 = jma(xe1111,Length2)
xe3a = jma(xe2,Length1)
xe4 = jma(xe3, Length1)
xe5 = jma(xe4, Length1)
xe6 = jma(xe5, Length1)
b = 0.7
c1 = -b*b*b
c2 = 3*b*b+3*b*b*b
c3 = -6*b*b-3*b-3*b*b*b
c3a = nz(c3a[1])
c4 = 1+3*b+b*b*b+3*b*b
TEMA = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3
DEMA = 2 * emaA - ema(emaA, Length2)
Length(mod)=>(mod*c3a)+Length2
Trend1=TEMA/DEMA
a=rsx(open,Length(2))
b1=rsx(open,Length(3))
c=rsx(open,Length(5))
d=rsx(open,Length(8))
e=rsx(open,Length(13))
f=rsx(open,Length(21))
g=rsx(open,Length(34))
h=rsx(open,Length(55))
i=rsx(open,Length(89))
j=rsx(open,Length(144))
trend1 = (((a-b1)+(c-d)+(e-f)+(g-h)+(i-j))/10)
trend = trend1>0?avg(a,b,c4,c2):trend1==0?XPrice:avg(rsx(open,24),jma(open,24),rsx(jma(open,24),24))
trend2 = trend1>0?avg(d,e,c2,c1):trend1==0?XPrice:avg(rsx(open,48),jma(open,48),rsx(jma(open,48),48))
trend3 = trend1>0?avg(d,e,c2,c1):trend1==0?xprice:avg(rsx(open,96),jma(open,96),rsx(jma(open,96),96))
bc=request.security(syminfo.tickerid,'15',trend)
bc1=request.security(syminfo.tickerid,'15',trend2)
bc2=request.security(syminfo.tickerid,'15',trend3)
bd=request.security(syminfo.tickerid,'30',trend)
bd1=request.security(syminfo.tickerid,'30',trend2)
bd2=request.security(syminfo.tickerid,'30',trend3)
be=request.security(syminfo.tickerid,'60',trend)
be1=request.security(syminfo.tickerid,'60',trend2)
be2=request.security(syminfo.tickerid,'60',trend3)
bf=request.security(syminfo.tickerid,'120',trend)
bf1=request.security(syminfo.tickerid,'120',trend2)
bf2=request.security(syminfo.tickerid,'120',trend3)
bg=request.security(syminfo.tickerid,'240',trend)
bg1=request.security(syminfo.tickerid,'240',trend2)
bg2=request.security(syminfo.tickerid,'240',trend3)
bh=request.security(syminfo.tickerid,'D',trend)
bh1=request.security(syminfo.tickerid,'D',trend2)
bh2=request.security(syminfo.tickerid,'D',trend3)
Trend=((bc-bc1)+(bd-bd1)+(be-be1)+(bf-bf1)+(bg-bg1)+(bh))
Trend11=((bc-bc1)+(bd-bd1)+(be-be1)+(bf-bf1)+(bg-bg1)+(bh1))
Trend33 = max(min(min(min(bc2,bd2),min(be2,bf2)),bg2),bh2)
AverageTrend=sma(Trend1,1000)
StdDev=Multiplier*stdev(Trend1,1000)
TopBand=AverageTrend+StdDev
BotBand=AverageTrend-StdDev
ap=open
n1=10
n2=21
esa1 = jma(ap, n1)
d1 = jma(abs(ap - esa1), n1)
x1 = trend3==Trend33
y1 = trend2==Trend11 
ci = (ap - esa1) / (0.015 * d1)
tci = jma(ci, n2)
wt1=tci
wt2=sma(wt1,4)
fast=jma(open,5)
slow=jma(open,13)
macd=fast-slow
signal=sma(macd,4)
WaveTrend1=wt1-wt2
JMACD1=macd-signal
rsi = (((rsi(open,6))-50)*3)
g1=rsi>Trend1 and WaveTrend1>Trend1 and JMACD1>Trend1
h1=g1?tci*c3a:nz(h[1])
strategy.entry("Long",true,when=x1)
strategy.close("Long",y1)
strategy.entry("Short",false,when=y1)
strategy.close("Short",x1)

Lebih banyak