Strategi Stop Loss Tracking Moving Average

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

img

Gambaran umum

Ide inti dari strategi ini adalah untuk merancang sistem perdagangan otomatis yang dapat menghasilkan keuntungan di pasar tren sambil mengendalikan penarikan dengan menggunakan rata-rata bergerak dan mekanisme stop loss.

Logika Strategi

  1. Strategi ini memungkinkan pengguna untuk memilih dari berbagai jenis rata-rata bergerak, termasuk rata-rata bergerak sederhana, rata-rata bergerak eksponensial, rata-rata bergerak tertimbang, dll. Pengguna dapat memilih jenis rata-rata bergerak berdasarkan preferensi mereka.

  2. Pengguna perlu mengatur periode rata-rata bergerak. umumnya periode adalah antara 20-60 untuk perdagangan jangka menengah.

  3. Setelah rata-rata bergerak dipilih, strategi akan menghitungnya secara real-time.

  4. Strategi ini menggunakan mekanisme stop loss trailing. Setelah membuka posisi, ia akan terus memantau hubungan antara moving average dan harga, dan secara dinamis menyesuaikan tingkat stop loss. Secara khusus, stop loss ditetapkan pada moving average ditambah/dikurangi persentase stop loss yang ditetapkan oleh pengguna.

  5. Pengguna dapat mengatur persentase stop loss. Persentase yang lebih besar berarti rentang stop loss yang lebih luas dan sensitivitas yang lebih rendah. Persentase yang lebih kecil berarti stop loss yang lebih ketat dan risiko yang lebih rendah. Persentase stop loss umumnya ditetapkan antara 2%-5%.

  6. Setelah membuka posisi, jika harga kembali melewati moving average, posisi akan ditutup.

Keuntungan

  • Dapat membuka posisi di sepanjang tren dan mendapatkan keuntungan yang lebih besar di pasar tren
  • Menggunakan stop loss trailing untuk menyesuaikan level stop berdasarkan aksi harga, menghindari stop terlalu ketat
  • Memungkinkan penyesuaian rata-rata bergerak dan persentase stop loss sesuai dengan selera risiko
  • Mendukung berbagai jenis rata-rata bergerak, memungkinkan optimasi melalui pengujian
  • Logika sederhana dan jelas, mudah dipahami dan dimodifikasi

Risiko

  • Harga dapat berfluktuasi di sekitar rata-rata bergerak di pasar yang terikat rentang, menyebabkan perdagangan yang berlebihan
  • Persentase stop loss yang terlalu luas dapat menyebabkan kerugian yang lebih besar
  • Parameter optimal untuk rata-rata bergerak dan stop loss dapat berbeda di berbagai produk dan kerangka waktu
  • Hindari menggunakan strategi ini di dekat acara berita besar

Risiko dapat dioptimalkan dan dikendalikan dengan:

  • Menggunakan strategi dalam produk dan kerangka waktu dengan tren yang jelas
  • Penyesuaian periode rata-rata bergerak, menggunakan rata-rata bergerak jangka panjang
  • Mengurangi persentase stop loss yang tepat untuk pengendalian risiko yang lebih ketat
  • Pengujian secara terpisah pada setiap produk untuk menemukan parameter optimal
  • Berhenti berdagang sebelum berita besar terjadi

Peluang Peningkatan

Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:

  1. Tambahkan indikator lain untuk konfirmasi, menghindari perdagangan yang berlebihan selama pasar yang terikat kisaran. MACD, KD dapat ditambahkan, sehingga sinyal hanya diambil ketika mereka sejajar.

  2. Misalnya, MA 5 hari dan MA 20 hari dapat digunakan bersama-sama, sehingga perdagangan hanya diambil ketika keduanya sejajar ke arah yang sama.

  3. Uji parameter secara terpisah pada setiap produk dan tetapkan parameter optimal.

  4. Tambahkan aturan ukuran posisi. misalnya, kuantitas tetap untuk posisi awal, kemudian tambahkan ke posisi berdasarkan jarak stop loss.

  5. Tetapkan jumlah maksimum perdagangan per hari atau waktu minimum antara perdagangan.

  6. Tambahkan algoritma pembelajaran mesin untuk mengoptimalkan parameter secara dinamis berdasarkan data historis, menghindari pengaturan parameter statis.

  7. Menggabungkan model pembelajaran mendalam untuk memprediksi tren harga, membantu penilaian arah tren.

Kesimpulan

Secara keseluruhan, ini adalah strategi tren yang sangat praktis. Ini menggunakan moving average untuk menentukan arah tren dan trailing stops untuk mengendalikan risiko. Ini dapat menghasilkan pengembalian yang baik di pasar tren. Menggabungkan optimasi parameter dan integrasi dengan indikator atau model lain dapat lebih meningkatkan stabilitas dan profitabilitas. Pengguna perlu memperhatikan perbedaan pengaturan parameter di berbagai produk dan kerangka waktu, serta dampak dari peristiwa besar. Secara keseluruhan strategi ini cocok untuk dana lindung nilai tingkat menengah dan investor ritel 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 banyak