
Die Kernidee der Strategie ist es, ein automatisches Handelssystem zu entwickeln, das mit Hilfe von Moving Averages und Stop-Loss-Mechanismen profitiert, während Trends stattfinden, und gleichzeitig die Rücktritte kontrolliert.
Die Strategie erlaubt dem Benutzer, verschiedene Arten von Moving Averages zu wählen, darunter einfache Moving Averages, Index Moving Averages, Cost Moving Averages usw. Der Benutzer kann die Arten von Moving Averages nach seinen eigenen Vorlieben wählen.
Der Benutzer muss die Periodengröße des Moving Averages festlegen. Im Allgemeinen liegt die Periodengröße des Moving Averages zwischen 20 und 60 bei mittleren und kurzen Handelsströmen.
Nachdem der Moving Average gewählt wurde, berechnet die Strategie diesen Moving Average in Echtzeit. Wenn der Preis steigt und den Moving Average durchbricht, macht man mehr; wenn der Preis fällt und den Moving Average durchbricht, macht man weniger.
Die Strategie verwendet einen Stop-Loss-Tracking-Mechanismus. Nachdem die Position eröffnet wurde, überwacht die Strategie kontinuierlich die Beziehung zwischen dem Moving Average und dem Preis und passt die Position der Stop-Line dynamisch an. Insbesondere entspricht die Position der Stop-Line dem Moving Average plus / minus der Stop-Prozentsatz, den der Benutzer eingestellt hat.
Der Benutzer kann den Stop-Loss-Prozentsatz festlegen. Je größer der Wert, desto breiter der Stop-Loss-Bereich, um zu vermeiden, dass der Stop-Loss zu empfindlich ist. Je kleiner der Wert, desto strenger der Stop-Loss, um das Risiko zu verringern. Der Stop-Loss-Prozentsatz wird in der Regel zwischen 2% -5% festgelegt.
Wenn der Preis nach dem Börsengang wieder den Moving Average überschreitet, wird der Verkauf gestoppt.
Die Risiken können durch folgende Maßnahmen optimiert und kontrolliert werden:
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
Hinzufügen von Bestätigungen für andere Indikatoren, um den häufigen Handel bei der Berechnung zu vermeiden. Indikatoren wie MACD, KD und andere können hinzugefügt werden und nur dann positioniert werden, wenn sie gleichzeitig signalisiert werden.
Die Kombination mit mehreren Moving Averages. Zum Beispiel, wenn Sie die 5-Tage- und 20-Tage-Linie gleichzeitig verwenden, werden nur zwei Moving Averages in die gleiche Richtung ausgegeben, um eine Position zu eröffnen.
Die Parameter für die verschiedenen Sorten werden separat getestet. Die Parameter für die verschiedenen Sorten und Perioden werden separat getestet.
Steigerung der Anzahl der Positionen durch Managementstrategien, z. B. die Einrichtung einer festen Anzahl von Positionen, die dann mit Stop-Loss-Anbindung aufgenommen werden.
Setzen Sie eine maximale Anzahl von Positionen pro Tag oder ein Intervall zwischen den Positionen.
Hinzufügen von Machine-Learning-Algorithmen, die die Parameter dynamisch anhand der historischen Daten optimieren. Vermeiden Sie die statische Einstellung der Parameter.
Die Verwendung von Deep-Learning-Modellen zur Vorhersage von Preistrends kann helfen, die Richtung der Markttrends zu bestimmen.
Die Strategie ist insgesamt eine sehr praktische Trend-Tracking-Strategie. Sie verwendet bewegliche Durchschnitte, um die Richtung des Trends zu bestimmen, und die Verfolgung von Stopps, um das Risiko zu kontrollieren, um bessere Erträge in trendigen Situationen zu erzielen. Durch die Optimierung der Parameter und die Kombination mit anderen Indikatoren oder Modellen kann die Stabilität und die Ertragsrate der Strategie weiter verbessert werden.
/*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())