Ý tưởng cốt lõi của chiến lược này là thiết kế một hệ thống giao dịch tự động có thể kiếm lợi nhuận trong các thị trường xu hướng trong khi kiểm soát rút tiền bằng cách sử dụng đường trung bình động và cơ chế dừng lỗ.
Chiến lược cho phép người dùng lựa chọn từ nhiều loại trung bình động khác nhau, bao gồm trung bình động đơn giản, trung bình động theo cấp số nhân, trung bình động trọng số, v.v. Người dùng có thể chọn loại trung bình động dựa trên sở thích của họ.
Người dùng cần thiết lập khoảng thời gian của đường trung bình động.
Một khi trung bình động được chọn, chiến lược sẽ tính toán nó trong thời gian thực. Nó sẽ đi dài khi giá phá vỡ trên trung bình động và đi ngắn khi giá phá vỡ dưới trung bình động.
Chiến lược này sử dụng một cơ chế dừng lỗ. Sau khi mở một vị trí, nó sẽ liên tục theo dõi mối quan hệ giữa đường trung bình động và giá, và điều chỉnh động mức dừng lỗ. Cụ thể, mức dừng lỗ được đặt ở đường trung bình động cộng với/từ tỷ lệ giảm lỗ dừng được thiết lập bởi người dùng.
Người dùng có thể thiết lập tỷ lệ stoploss. tỷ lệ stoploss lớn hơn có nghĩa là phạm vi stop loss rộng hơn và nhạy cảm ít hơn. tỷ lệ stoploss nhỏ hơn có nghĩa là stop loss chặt chẽ hơn và rủi ro thấp hơn. tỷ lệ stoploss thường được thiết lập trong khoảng 2% -5%.
Sau khi mở một vị trí, nếu giá vượt qua đường trung bình động, vị trí sẽ được đóng.
Các rủi ro có thể được tối ưu hóa và kiểm soát bằng cách:
Chiến lược có thể được tối ưu hóa thêm trong các khía cạnh sau:
Thêm các chỉ số khác để xác nhận, tránh giao dịch quá mức trong các thị trường giới hạn phạm vi.
Sử dụng sự kết hợp của các đường trung bình động. ví dụ, MA 5 ngày và MA 20 ngày có thể được sử dụng cùng nhau, để giao dịch chỉ được thực hiện khi cả hai đều liên kết theo cùng một hướng.
Kiểm tra các thông số riêng biệt trên mỗi sản phẩm và thiết lập các thông số tối ưu.
Thêm quy tắc định kích thước vị trí. ví dụ, số lượng cố định cho vị trí ban đầu, sau đó thêm vào vị trí dựa trên khoảng cách dừng lỗ.
Đặt số lượng giao dịch tối đa mỗi ngày hoặc thời gian tối thiểu giữa các giao dịch.
Thêm các thuật toán học máy để tối ưu hóa các tham số một cách năng động dựa trên dữ liệu lịch sử, tránh cài đặt tham số tĩnh.
Kết hợp các mô hình học sâu để dự đoán xu hướng giá, hỗ trợ đánh giá hướng xu hướng.
Nhìn chung, đây là một chiến lược theo xu hướng rất thực tế. Nó sử dụng trung bình động để xác định hướng xu hướng và dừng lại để kiểm soát rủi ro. Nó có thể tạo ra lợi nhuận tốt trong các thị trường xu hướng. Kết hợp tối ưu hóa tham số và tích hợp với các chỉ số hoặc mô hình khác có thể tăng thêm sự ổn định và lợi nhuận. Người dùng cần lưu ý sự khác biệt trong cài đặt tham số giữa các sản phẩm và khung thời gian, cũng như tác động của các sự kiện lớn. Nhìn chung chiến lược này phù hợp với các quỹ phòng hộ cấp trung bình và các nhà đầu tư bán lẻ có một số kinh nghiệm.
/*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())