Strategi Stop Loss Pengesanan Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2023-10-24 11:21:57
Tag:

img

Ringkasan

Idea teras strategi ini adalah untuk mereka bentuk sistem perdagangan automatik yang boleh mendapat keuntungan dalam pasaran trend sambil mengawal penarikan dengan menggunakan purata bergerak dan mekanisme stop loss.

Logika Strategi

  1. Strategi ini membolehkan pengguna memilih dari pelbagai jenis purata bergerak, termasuk purata bergerak mudah, purata bergerak eksponensial, purata bergerak bertimbang, dll. Pengguna boleh memilih jenis purata bergerak berdasarkan pilihan mereka.

  2. Pengguna perlu menetapkan tempoh purata bergerak. Biasanya tempoh adalah antara 20-60 untuk perdagangan jangka sederhana.

  3. Setelah purata bergerak dipilih, strategi akan mengira secara real-time. Ia akan pergi lama apabila harga pecah di atas purata bergerak dan pergi pendek apabila harga pecah di bawah purata bergerak.

  4. Strategi ini menggunakan mekanisme hentian kerugian. Selepas membuka kedudukan, ia akan terus memantau hubungan antara purata bergerak dan harga, dan secara dinamik menyesuaikan tahap hentian kerugian. Khususnya, hentian kerugian ditetapkan pada purata bergerak ditambah / tolak peratusan hentian kerugian yang ditetapkan oleh pengguna.

  5. Pengguna boleh menetapkan peratusan stop loss. Peratusan yang lebih besar bermakna julat stop loss yang lebih luas dan kurang sensitiviti. Peratusan yang lebih kecil bermaksud stop loss yang lebih ketat dan risiko yang lebih rendah. Peratusan stop loss biasanya ditetapkan antara 2%-5%.

  6. Selepas membuka kedudukan, jika harga kembali melalui purata bergerak, kedudukan akan ditutup.

Kelebihan

  • Boleh membuka kedudukan di sepanjang trend dan memperoleh keuntungan yang lebih besar di pasaran trend
  • Menggunakan stop loss untuk menyesuaikan tahap berhenti berdasarkan tindakan harga, mengelakkan berhenti terlalu ketat
  • Membolehkan penyesuaian purata bergerak dan peratusan stop loss mengikut selera risiko
  • Menyokong pelbagai jenis purata bergerak, membolehkan pengoptimuman melalui ujian
  • Logik yang mudah dan jelas, mudah difahami dan diubahsuai

Risiko

  • Harga boleh turun naik di sekitar purata bergerak di pasaran yang terikat julat, menyebabkan perdagangan berlebihan
  • Peratusan stop loss yang terlalu luas boleh membawa kepada kerugian yang lebih besar
  • Parameter optimum untuk purata bergerak dan stop loss mungkin berbeza di antara produk dan jangka masa
  • Elakkan menggunakan strategi ini berhampiran berita utama

Risiko boleh dioptimumkan dan dikawal dengan:

  • Menggunakan strategi dalam produk dan jangka masa dengan trend yang jelas
  • Penyesuaian purata bergerak tempoh, menggunakan purata bergerak jangka panjang
  • Pengurangan peratusan stop loss yang sesuai untuk kawalan risiko yang lebih ketat
  • Ujian secara berasingan pada setiap produk untuk mencari parameter optimum
  • Berhenti berdagang sebelum berita utama berlaku

Peluang Peningkatan

Strategi ini boleh dioptimumkan lagi dalam aspek berikut:

  1. Tambah penunjuk lain untuk pengesahan, mengelakkan perdagangan berlebihan semasa pasaran terikat julat. MACD, KD boleh ditambah, supaya isyarat hanya diambil apabila mereka sejajar.

  2. Gunakan gabungan purata bergerak. Sebagai contoh, MA 5 hari dan MA 20 hari boleh digunakan bersama-sama, supaya dagangan diambil hanya apabila kedua-duanya sejajar ke arah yang sama.

  3. Uji parameter secara berasingan pada setiap produk dan tetapkan parameter optimum.

  4. Tambah peraturan saiz kedudukan. contohnya, kuantiti tetap untuk kedudukan awal, kemudian tambah kepada kedudukan berdasarkan jarak stop loss.

  5. Tetapkan jumlah maksimum dagangan setiap hari atau masa minimum antara dagangan.

  6. Tambah algoritma pembelajaran mesin untuk mengoptimumkan parameter secara dinamik berdasarkan data sejarah, mengelakkan tetapan parameter statik.

  7. Menggabungkan model pembelajaran mendalam untuk meramalkan trend harga, membantu penilaian arah trend.

Kesimpulan

Secara keseluruhan, ini adalah strategi trend yang sangat praktikal. Ia menggunakan purata bergerak untuk menentukan arah trend dan berhenti untuk mengawal risiko. Ia boleh menghasilkan pulangan yang baik di pasaran trend. Menggabungkan pengoptimuman parameter dan integrasi dengan penunjuk atau model lain dapat meningkatkan kestabilan dan keuntungan. Pengguna perlu melihat perbezaan dalam tetapan parameter di seluruh produk dan jangka masa, serta kesan peristiwa utama. Secara keseluruhan strategi ini sesuai untuk dana lindung nilai peringkat pertengahan dan pelabur runcit dengan beberapa pengalaman.


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

//@version=3
//attoCryp, @HikmetSezen58
strategy("MOST Multi MAs", overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
sx=input(defval = "close" ,title="Fiyat sec", options=[ "close", "high", "low", "open", "hl2", "hlc3", "hlco4", "hlcc4", "hlccc5"])
smox=input(defval = "HulleMA", title = "Hareketli Ortalama: ", options=["T3", "SMA", "EMA", "DEMA", "TEMA", "WMA", "VWMA", "SMMA", "EVWMA", "HullMA", "HulleMA", "LSMA", "ALMA", "TMA", "SSMA"])
timeFramemost = input(title="++++++++++++++++++++++++++++++++++++", defval="MOST Ayarlari:")
yuzde=input(defval=3.8, minval=0, step=0.1, title="Yuzde Oran")/100
ortalamauzunluk=input(defval=28, title="Periyot Uzunlugu", minval=1)
f=input(defval=0.4, step=0.1, title="T3 icin Factor", minval=0.01)
timeFrameadd=input(title="++++++++++++++++++++++++++++++++++++", defval="Diger Orta.Ayar:")
offsig=input(defval=4, title="LSMA icin Offset veya ALMA icin Sigma", minval=0)
offalma=input(defval=0.6, title="ALMA icin Offset", minval=0, step=0.01)
timeFramess=input(title="++++++++++++++++++++++++++++++++++++", defval="Baslangic-Bitis:")
gun_baslangic=input(defval=1, title="Baslangic Gunu", minval=1, maxval=31)
ay_baslangic=input(defval=1, title="Baslangic Ayi", minval=1, maxval=12)
yil_baslangic=input(defval=2017, title="Baslangic Yili", minval=2010)
gun_bitis=input(defval=1, title="Bitis Gunu", minval=1, maxval=31)
ay_bitis=input(defval=1, title="Bitis Ayi", minval=1, maxval=12)
yil_bitis = input(defval=2019, title="Bitis Yili", minval=2010)

// backtest icin baslangic ve bitis zamanlarini belirleme
baslangic=timestamp(yil_baslangic, ay_baslangic, gun_baslangic, 00, 00)
bitis=timestamp(yil_bitis, ay_bitis, gun_bitis, 23, 59) 
zamanaraligi() => true

//guncel fiyatti belirleme
guncelfiyat=sx=="high"?high : sx=="close"?close : sx=="low"?low : sx=="open"?open : sx=="hl2"?(high+low)/2 : sx=="hlc3"?(high+low+close)/3 : sx=="hlco4"?(high+low+close+open)/4 : sx=="hlcc4"?(high+low+close+close)/4 : sx=="hlccc5"?(high+low+close+close+close)/5 : close 

/////Ortalama Hesaplamalari/////
// Tillson T3
sm0(guncelfiyat,ortalamauzunluk,f) =>
    t3e1=ema(guncelfiyat, ortalamauzunluk)
    t3e2=ema(t3e1, ortalamauzunluk)
    t3e3=ema(t3e2, ortalamauzunluk)
    t3e4=ema(t3e3, ortalamauzunluk)
    t3e5=ema(t3e4, ortalamauzunluk)
    t3e6=ema(t3e5, ortalamauzunluk)
    c1=-f*f*f
    c2=3*f*f+3*f*f*f
    c3=-6*f*f-3*f-3*f*f*f
    c4=1+3*f+f*f*f+3*f*f
    s0=c1 * t3e6 + c2 * t3e5 + c3 * t3e4 + c4 * t3e3

// Basit ortalama
sm1(guncelfiyat,ortalamauzunluk) =>
    s1=sma(guncelfiyat, ortalamauzunluk)

// Ustel ortalama
sm2(guncelfiyat,ortalamauzunluk) =>
    s2=ema(guncelfiyat, ortalamauzunluk)

// Cift Ustel ortalama
sm3(guncelfiyat,ortalamauzunluk) =>
    s3=2*ema(guncelfiyat, ortalamauzunluk) - ema(ema(guncelfiyat, ortalamauzunluk), ortalamauzunluk)

// Uclu Ustel ortalama
sm4(guncelfiyat,ortalamauzunluk) =>
    s4=3*(ema(guncelfiyat, ortalamauzunluk) - ema(ema(guncelfiyat, ortalamauzunluk), ortalamauzunluk)) + ema(ema(ema(guncelfiyat, ortalamauzunluk), ortalamauzunluk), ortalamauzunluk)

// Agirlikli Ortalama  
sm5(guncelfiyat,ortalamauzunluk) =>
    s5=wma(guncelfiyat, ortalamauzunluk)

// Hacim Agirlikli Ortalama
sm6(guncelfiyat,ortalamauzunluk) =>
    s6=vwma(guncelfiyat, ortalamauzunluk)

// Smoothed
sm7(guncelfiyat,ortalamauzunluk) =>
    s7=0.0
    s7:=na(s7[1]) ? sma(guncelfiyat, ortalamauzunluk) : (s7[1] * (ortalamauzunluk - 1) + guncelfiyat) / ortalamauzunluk

// Hull Ortalama
sm8(guncelfiyat,ortalamauzunluk) =>
    s8=wma(2 * wma(guncelfiyat, ortalamauzunluk / 2) - wma(guncelfiyat, ortalamauzunluk), round(sqrt(ortalamauzunluk)))
    
// Hull Ustel Ortalama
sm81(guncelfiyat,ortalamauzunluk) =>
    s8=ema(2 * ema(guncelfiyat, ortalamauzunluk / 2) - ema(guncelfiyat, ortalamauzunluk), round(sqrt(ortalamauzunluk)))

// Least Square
sm9(guncelfiyat,ortalamauzunluk,offsig) =>
    s9=linreg(guncelfiyat, ortalamauzunluk, offsig)

// Arnaud Legoux
sm10(guncelfiyat, ortalamauzunluk, offalma, offsig) =>
    s10=alma(guncelfiyat, ortalamauzunluk, offalma, offsig)

// Triangular
sm11(guncelfiyat, ortalamauzunluk) =>
    s11=sma(sma(guncelfiyat, ortalamauzunluk),ortalamauzunluk)

// SuperSmoother filter
sm12(guncelfiyat,ortalamauzunluk) =>
    a1=exp(-1.414*3.14159 / ortalamauzunluk)
    b1=2*a1*cos(1.414*3.14159 / ortalamauzunluk)
    c2=b1
    c3=(-a1)*a1
    c1=1 - c2 - c3
    s12=0.0
    s12:=c1*(guncelfiyat + nz(guncelfiyat[1])) / 2 + c2*nz(s12[1]) + c3*nz(s12[2])
    
//Elastic Volume Weighted Moving Average
sm13(guncelfiyat,ortalamauzunluk) =>
    hacimtoplam=sum(volume, ortalamauzunluk)
    s13=0.0
    s13:=(nz(s13[1]) * (hacimtoplam - volume)/hacimtoplam) + (volume*guncelfiyat/hacimtoplam)

ortalamafiyat=smox=="T3"?sm0(guncelfiyat,ortalamauzunluk,f) : smox=="SMA"?sm2(guncelfiyat,ortalamauzunluk) : smox=="EMA"?sm2(guncelfiyat,ortalamauzunluk) : smox=="DEMA"?sm3(guncelfiyat,ortalamauzunluk) : smox=="TEMA"?sm4(guncelfiyat,ortalamauzunluk) : smox=="WMA"?sm5(guncelfiyat,ortalamauzunluk) : smox=="VWMA"?sm6(guncelfiyat,ortalamauzunluk) : smox=="SMMA"?sm7(guncelfiyat,ortalamauzunluk) : smox=="HullMA"?sm8(guncelfiyat,ortalamauzunluk) : smox=="HulleMA"?sm81(guncelfiyat,ortalamauzunluk) : smox=="LSMA"?sm9(guncelfiyat,ortalamauzunluk,offsig) : smox=="ALMA"?sm10(guncelfiyat, ortalamauzunluk, offalma, offsig) : smox=="TMA"?sm11(guncelfiyat,ortalamauzunluk) : smox=="SSMA"?sm12(guncelfiyat,ortalamauzunluk) : smox=="EVWMA"?sm13(guncelfiyat,ortalamauzunluk) : guncelfiyat

/////MOST'u hesaplama/////
stopfiyat=ortalamafiyat*yuzde
mostfiyat=0.0
mostfiyat:=iff(ortalamafiyat>nz(mostfiyat[1],0) and ortalamafiyat[1]>nz(mostfiyat[1],0),max(nz(mostfiyat[1],0),ortalamafiyat-stopfiyat),iff(ortalamafiyat<nz(mostfiyat[1],0) and ortalamafiyat[1]<nz(mostfiyat[1],0),min(nz(mostfiyat[1],0),ortalamafiyat+stopfiyat),iff(ortalamafiyat>nz(mostfiyat[1],0),ortalamafiyat-stopfiyat,ortalamafiyat+stopfiyat)))

mostcolor=ortalamafiyat>mostfiyat?lime:fuchsia
plot(mostfiyat, color=mostcolor, linewidth=4, title="Most-fiyat")

/////AL-SAT LONG-SHORT girislerini belirleme/////
long=ortalamafiyat>mostfiyat and ortalamafiyat[1]<mostfiyat[1]
short=ortalamafiyat<mostfiyat and ortalamafiyat[1]>mostfiyat[1]
if (long) 
    strategy.entry("AL-Long", strategy.long, when = zamanaraligi())
if (short) 
    strategy.entry("SAT-Short", strategy.short, when = zamanaraligi())

Lebih lanjut