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.
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.
Pengguna perlu menetapkan tempoh purata bergerak. Biasanya tempoh adalah antara 20-60 untuk perdagangan jangka sederhana.
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.
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.
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%.
Selepas membuka kedudukan, jika harga kembali melalui purata bergerak, kedudukan akan ditutup.
Risiko boleh dioptimumkan dan dikawal dengan:
Strategi ini boleh dioptimumkan lagi dalam aspek berikut:
Tambah penunjuk lain untuk pengesahan, mengelakkan perdagangan berlebihan semasa pasaran terikat julat. MACD, KD boleh ditambah, supaya isyarat hanya diambil apabila mereka sejajar.
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.
Uji parameter secara berasingan pada setiap produk dan tetapkan parameter optimum.
Tambah peraturan saiz kedudukan. contohnya, kuantiti tetap untuk kedudukan awal, kemudian tambah kepada kedudukan berdasarkan jarak stop loss.
Tetapkan jumlah maksimum dagangan setiap hari atau masa minimum antara dagangan.
Tambah algoritma pembelajaran mesin untuk mengoptimumkan parameter secara dinamik berdasarkan data sejarah, mengelakkan tetapan parameter statik.
Menggabungkan model pembelajaran mendalam untuk meramalkan trend harga, membantu penilaian arah trend.
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())