Strategi Trailing Stop Moving Average


Tanggal Pembuatan: 2023-10-24 11:21:57 Akhirnya memodifikasi: 2023-10-24 11:21:57
menyalin: 0 Jumlah klik: 438
1
fokus pada
1217
Pengikut

Strategi Trailing Stop Moving Average

Ringkasan

Gagasan inti dari strategi ini adalah untuk merancang sistem perdagangan otomatis yang dapat menghasilkan keuntungan dalam situasi yang sedang tren, dengan menggunakan moving averages dan mekanisme stop loss tracking.

Prinsip Strategi

  1. Strategi ini memungkinkan pengguna untuk memilih berbagai jenis moving average, termasuk moving average sederhana, moving average indeks, moving average biaya, dan lain-lain. Pengguna dapat memilih jenis moving average sesuai dengan preferensi mereka sendiri.

  2. Pengguna perlu mengatur panjang siklus rata-rata bergerak. Biasanya dalam perdagangan garis pendek dan menengah, rata-rata bergerak berkisar antara 20-60

  3. Setelah memilih rata-rata bergerak, strategi akan menghitung rata-rata bergerak itu secara real-time. Jika harga naik melewati rata-rata bergerak, lakukan over; Jika harga turun melewati rata-rata bergerak, lakukan over.

  4. Strategi menggunakan mekanisme pelacakan stop loss. Setelah membuka posisi, strategi akan terus memantau hubungan antara rata-rata bergerak dan harga, secara dinamis menyesuaikan posisi garis stop loss. Secara khusus, posisi garis stop loss sama dengan rata-rata bergerak ditambah / dikurangi persentase stop loss yang ditetapkan pengguna.

  5. Pengguna dapat mengatur persentase stop loss. Nilai yang lebih besar, lebih luas jangkauan stop loss, menghindari stop loss terlalu sensitif; nilai yang lebih kecil, stop loss lebih ketat, mengurangi risiko. persentase stop loss biasanya diatur antara 2% -5%.

  6. Setelah membuka posisi, jika harga kembali menembus rata-rata bergerak, maka posisi ditutup.

Keunggulan Strategis

  • Anda dapat membuka posisi di pasar yang sedang tren dan mendapatkan keuntungan besar.
  • Menggunakan mekanisme tracking stop loss, dapat menyesuaikan posisi stop loss sesuai dengan situasi, mencegah stop loss terlalu kecil dan dikurung
  • Anda dapat memilih moving average dan stop loss yang berbeda sesuai dengan preferensi risiko Anda.
  • Mendukung berbagai jenis moving average untuk menemukan parameter terbaik melalui pengujian
  • Strategi logis sederhana dan jelas, mudah dipahami dan dimodifikasi

Analisis risiko

  • Pada saat beristirahat, harga mungkin berulang di sekitar rata-rata bergerak, yang menyebabkan sering melakukan posisi terendah
  • Jika stop loss terlalu besar, maka kerugian bisa bertambah besar.
  • Parameter optimal untuk rata-rata bergerak dan persentase stop loss mungkin berbeda untuk berbagai varietas dan periode waktu yang berbeda
  • Strategi ini harus dihindari sebelum berita penting.

Risiko dapat dioptimalkan dan dikendalikan dengan cara berikut:

  • Gunakan strategi ini pada varietas dan periode waktu dengan tren yang jelas
  • Penyesuaian Periode Moving Average, menggunakan Periode Moving Average
  • Menurunkan persentase stop loss yang tepat dan mengendalikan risiko secara ketat
  • Uji coba pada varietas yang berbeda untuk mencari parameter optimal
  • Hentikan perdagangan sebelum berita besar

Arah optimasi

Strategi ini dapat dioptimalkan lebih lanjut dalam beberapa hal:

  1. Menambahkan konfirmasi indikator lain, menghindari perdagangan yang sering terjadi pada saat konsolidasi. Anda dapat menambahkan indikator seperti MACD, KD, dan lain-lain, dan hanya membuka posisi jika mereka memberi sinyal pada saat yang sama.

  2. Menggunakan berbagai jenis moving average untuk melakukan kombinasi. Misalnya, menggunakan garis 5 hari dan garis 20 hari secara bersamaan, hanya dua moving average yang berposisi ketika sinyalnya berarah ke arah yang sama.

  3. Parameter pengujian untuk varietas yang berbeda, pengaturan parameter optimal. Parameter untuk setiap varietas dan siklus berbeda, perlu diuji secara terpisah.

  4. Meningkatkan strategi manajemen posisi. Misalnya, mengatur jumlah tetap untuk membuka posisi, kemudian menambah posisi dengan stop loss.

  5. Tetapkan jumlah maksimum bukaan posisi dalam sehari atau interval bukaan posisi. Batasi terlalu seringnya transaksi.

  6. Menambahkan algoritma pembelajaran mesin untuk mengoptimalkan parameter secara dinamis berdasarkan data historis. Menghindari pengaturan parameter statis.

  7. Menggunakan model pembelajaran mendalam untuk memprediksi tren harga. Dapat membantu menentukan arah tren pasar.

Meringkaskan

Strategi ini secara keseluruhan merupakan strategi pelacakan tren yang sangat praktis. Strategi ini menggunakan moving average untuk menentukan arah tren, serta melacak stop loss untuk mengendalikan risiko, yang dapat menghasilkan keuntungan yang lebih baik dalam situasi tren. Dengan pengoptimalan parameter dan kombinasi dengan indikator atau model lainnya, dapat lebih meningkatkan stabilitas dan tingkat keuntungan dari strategi ini.

Kode Sumber Strategi
/*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())