Strategi Purata Pergerakan Trailing Stop


Tarikh penciptaan: 2023-10-24 11:21:57 Akhirnya diubah suai: 2023-10-24 11:21:57
Salin: 0 Bilangan klik: 439
1
fokus pada
1217
Pengikut

Strategi Purata Pergerakan Trailing Stop

Gambaran keseluruhan

Idea utama strategi ini adalah untuk merancang sistem perdagangan automatik yang menggunakan purata bergerak dan mekanisme berhenti untuk menjejaki kerugian yang boleh menghasilkan keuntungan dalam keadaan trend, sambil mengawal penarikan balik.

Prinsip Strategi

  1. Strategi ini membolehkan pengguna memilih pelbagai jenis purata bergerak, termasuk purata bergerak sederhana, purata bergerak indeks, purata bergerak kos, dan lain-lain. Pengguna boleh memilih jenis purata bergerak mengikut keutamaan mereka sendiri.

  2. Pengguna perlu menetapkan tempoh purata bergerak. Biasanya dalam perdagangan garis pendek, purata bergerak berkisar antara 20-60

  3. Selepas memilih purata bergerak, strategi akan mengira purata bergerak dalam masa nyata. Apabila harga naik melanggar purata bergerak, lakukan lebih banyak; Apabila harga turun melanggar purata bergerak, lakukan kosong.

  4. Strategi menggunakan mekanisme pengesanan hentian. Apabila anda membuka kedudukan, strategi akan terus memantau hubungan antara purata bergerak dan harga, secara dinamik menyesuaikan kedudukan garisan hentian. Secara khusus, kedudukan garisan hentian sama dengan purata bergerak ditambah / tolak peratusan hentian yang ditetapkan oleh pengguna.

  5. Pengguna boleh menetapkan peratusan hentian kerugian. Nilai yang lebih besar, lebih luas jangkauan hentian kerugian, untuk mengelakkan hentian kerugian terlalu sensitif; nilai yang lebih kecil, hentian kerugian lebih ketat, untuk mengurangkan risiko. Peratusan hentian kerugian biasanya ditetapkan antara 2% -5%.

  6. Selepas membuka kedudukan, jika harga kembali menembusi purata bergerak, kedudukan kosong akan terhenti.

Kelebihan Strategik

  • Anda boleh membuka kedudukan dalam keadaan trend dan mendapat lebih banyak wang.
  • Menggunakan mekanisme pengesanan yang boleh disesuaikan mengikut keadaan, untuk mengelakkan penghentian yang terlalu kecil
  • Anda boleh memilih purata bergerak dan peratusan hentian yang berbeza mengikut pilihan risiko anda
  • Menyokong pelbagai jenis purata bergerak untuk mencari parameter terbaik melalui ujian
  • Logik strategi ringkas dan jelas, mudah difahami dan diubah suai

Analisis risiko

  • Dalam keadaan pemulihan, harga mungkin berulang di sekitar purata bergerak, yang menyebabkan sering membuka kedudukan kosong
  • Jika anda menetapkan margin stop loss yang terlalu besar, ia boleh menyebabkan kerugian yang lebih besar.
  • Parameter terbaik untuk purata bergerak dan peratusan henti mungkin berbeza untuk pelbagai jenis dan tempoh masa yang berbeza
  • Elakkan menggunakan taktik ini sebelum peristiwa berita penting

Risiko boleh dioptimumkan dan dikawal dengan:

  • Menggunakan strategi ini pada varieti dan tempoh masa yang jelas trend
  • Sesuaikan purata bergerak berkala dengan purata bergerak berkala yang panjang dan sederhana
  • Menurunkan peratus kerugian yang sesuai, mengawal risiko dengan ketat
  • Ujian berasingan untuk varieti yang berbeza untuk mencari parameter terbaik
  • Berhenti berdagang sebelum berita besar

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Tambah pengesahan petunjuk lain, mengelakkan perdagangan yang kerap semasa penyusunan. Anda boleh menyertai petunjuk seperti MACD, KD, dan lain-lain, dan hanya membuka kedudukan apabila mereka memberi isyarat pada masa yang sama.

  2. Menggunakan pelbagai purata bergerak untuk kombinasi. Sebagai contoh, menggunakan garis 5 hari dan garis 20 hari pada masa yang sama, hanya dua purata bergerak yang akan membuka kedudukan apabila isyarat dikeluarkan.

  3. Parameter ujian berasingan untuk pelbagai jenis, menetapkan parameter optimum. Parameter untuk setiap jenis dan kitaran berbeza, perlu diuji secara berasingan.

  4. Menambah strategi pengurusan jumlah kedudukan. Contohnya, menetapkan jumlah tetap untuk membuka kedudukan, dan kemudian menambah kedudukan dengan hentikan kerugian.

  5. Tetapkan jumlah maksimum bukaan dalam sehari atau tetapkan selang waktu bukaan.

  6. Menambah algoritma pembelajaran mesin untuk mengoptimumkan parameter secara dinamik berdasarkan data sejarah.

  7. Menggunakan model pembelajaran mendalam untuk meramalkan trend harga. Ia boleh membantu menentukan arah trend pasaran.

ringkaskan

Strategi ini secara keseluruhannya adalah strategi trend-following yang sangat praktikal. Ia menggunakan arah trend untuk menentukan arah trend, dan mengesan stop-loss untuk mengawal risiko, dan dapat memperoleh keuntungan yang lebih baik dalam keadaan trend. Dengan pengoptimuman parameter dan kombinasi dengan indikator atau model lain, anda dapat meningkatkan lagi kestabilan dan kadar keuntungan strategi.

Kod 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())