Strategi Perdagangan Sistem Purata Bergerak Berbilang Jangka Masa

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

img

Ringkasan

Strategi ini menggunakan sistem purata bergerak pelbagai jangka masa, digabungkan dengan RSI dan penunjuk teknikal lain, untuk mencapai suis automatik antara kedudukan panjang dan pendek.

Prinsip-prinsip

Indikator teras strategi ini adalah sistem purata bergerak. Strategi ini menggunakan beberapa indikator purata bergerak seperti JMA, TEMA, DEMA untuk mengira trend harga dalam tempoh yang berbeza seperti 15min, 30min, 60min. Sebagai contoh, trend MA yang dikira oleh JMA dalam jangka masa 15min mewakili penilaian trend harga dalam jangka masa itu. Kemudian strategi membandingkan trend harga antara jangka masa yang berbeza untuk mengenal pasti perbezaan antara trend yang lebih lama dan lebih pendek. Jika perbezaan yang ketara dikesan, isyarat perdagangan akan dihasilkan. Di samping itu, strategi ini juga menggabungkan penunjuk lain seperti RSI dan Trend Gelombang untuk memastikan kebolehpercayaan isyarat perdagangan.

Secara khusus, trend, trend2 dan trend3 pembolehubah dalam strategi mewakili trend harga jangka masa 15 minit, 30 minit dan 60 minit masing-masing. Jika terdapat pembalikan harga 15 minit, sementara 30 minit dan 60 minit belum berbalik, ia dinilai sebagai perbezaan antara trend yang lebih pendek dan lebih lama, dengan itu menghasilkan isyarat perdagangan. Tiada isyarat akan dihasilkan jika trend semua jangka masa konsisten.

Dengan membandingkan hubungan antara pelbagai jangka masa dan menapis beberapa isyarat palsu, isyarat perdagangan yang lebih boleh dipercayai boleh dihasilkan ini adalah idea teras strategi.

Analisis Kelebihan

Kelebihan utama strategi ini ialah:

  1. Peningkatan kebolehpercayaan isyarat melalui analisis pelbagai jangka masa dan penapisan isyarat palsu;
  2. Mengelakkan masalah dengan satu penunjuk dengan menggabungkan beberapa penunjuk untuk penilaian komprehensif;
  3. Pertukaran automatik antara kedudukan panjang dan pendek tanpa campur tangan manual, mengurangkan kesukaran operasi.

Analisis Risiko

Beberapa risiko juga wujud dengan strategi ini:

  1. Analisis pelbagai jangka masa membawa ketidakpastian mengenai masa kemasukan perdagangan yang boleh menyebabkan harga kemasukan terbaik hilang;
  2. Tetapan parameter yang tidak sesuai apabila menggabungkan beberapa penunjuk boleh menyebabkan penurunan kualiti isyarat dagangan;
  3. Pertukaran kedudukan automatik berisiko terlalu mengoptimumkan dan prestasi perdagangan sebenar yang lebih lemah berbanding dengan backtest.

Kami boleh mengambil langkah-langkah berikut untuk mengurangkan risiko di atas:

  1. Parameter jangka masa yang halus untuk memastikan pengambilalihan isyarat jangka pendek untuk kemasukan tepat pada masanya;
  2. Pengujian belakang yang meluas untuk terus mengoptimumkan parameter penunjuk;
  3. campur tangan yang munasabah dalam perdagangan sebenar untuk mengelakkan perdagangan buta oleh sistem automatik.

Arahan pengoptimuman

Terdapat ruang untuk mengoptimumkan lagi strategi ini:

  1. Memperkenalkan algoritma pembelajaran mesin untuk mengoptimumkan parameter secara automatik di pelbagai penunjuk melalui latihan model;
  2. Tambah tetapan slippage adaptif berdasarkan tahap turun naik pasaran untuk meningkatkan prestasi dagangan sebenar;
  3. Memasukkan mekanisme pengesahan harga-volume untuk mengelakkan kerugian daripada pembalikan trend yang cepat.

Kesimpulan

Strategi ini membandingkan trend harga pelbagai jangka masa untuk mengenal pasti hubungan jangka panjang berbanding jangka pendek, dan menjana isyarat perdagangan melalui analisis pelbagai penunjuk mencapai suis automatik antara panjang dan pendek dengan hasil backtest yang baik. Kami juga mengenal pasti beberapa bidang penambahbaikan melalui kaedah seperti pembelajaran mesin, slippage adaptif dan pengesahan jumlah untuk meningkatkan lagi prestasi perdagangan sebenar.


/*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 lanjut