La idea central de la estrategia es diseñar un sistema de trading automático que utilice las medias móviles y los mecanismos de stop loss de seguimiento para obtener ganancias en mercados tendentes y controlar los retrocesos.
Esta política permite a los usuarios elegir entre varios tipos diferentes de medias móviles, incluyendo medias móviles simples, medias móviles índices, medias móviles de costos, etc. Los usuarios pueden elegir el tipo de medias móviles según sus preferencias.
El usuario debe establecer la duración del ciclo de la media móvil. Generalmente, en el comercio de la línea media corta, el ciclo de la media móvil está entre 20 y 60.
Después de seleccionar la media móvil, la estrategia calcula la media móvil en tiempo real. Cuando el precio sube, haga más cuando rompe la media móvil; cuando el precio cae, haga nada.
La estrategia utiliza un mecanismo de seguimiento de stop-loss. Después de la apertura de la posición, la estrategia sigue monitoreando la relación entre la media móvil y el precio, ajustando dinámicamente la posición de la línea de stop-loss. En concreto, la posición de la línea de stop-loss es igual al porcentaje de stop-loss de la media móvil más/menos el que establece el usuario.
El usuario puede configurar el porcentaje de stop loss. Cuanto mayor sea el valor, más amplio será el rango de stop loss, evitando que el stop loss sea demasiado sensible. Cuanto menor sea el valor, más estricto será el stop loss, reduciendo el riesgo.
Después de la apertura, el equilibrio se detiene si el precio vuelve a romper la media móvil.
Los riesgos pueden ser optimizados y controlados mediante los siguientes métodos:
La estrategia puede ser optimizada aún más en los siguientes aspectos:
Añadir confirmación de otros indicadores, evitar el comercio frecuente en el momento de la puesta a punto. Se pueden agregar indicadores como MACD, KD, etc., y sólo se pueden abrir operaciones cuando emiten señales al mismo tiempo.
La combinación de varias medias móviles. Por ejemplo, con una línea de 5 días y una línea de 20 días al mismo tiempo, solo dos medias móviles se abren cuando se emite una señal en la misma dirección.
Los parámetros de prueba para cada variedad son diferentes y se establecen los parámetros óptimos. Los parámetros de cada variedad y ciclo son diferentes y deben probarse por separado.
Política de gestión de aumento de posiciones. Por ejemplo, establecer un número fijo de posiciones abiertas, y luego aumentar las posiciones con el stop loss.
Establecer un número máximo de operaciones al día o establecer un intervalo de operaciones; limitar las operaciones demasiado frecuentes.
Se agregaron algoritmos de aprendizaje automático para optimizar los parámetros dinámicamente según los datos históricos.
El uso de modelos de aprendizaje profundo para predecir la tendencia de los precios puede ayudar a determinar la dirección de la tendencia del mercado.
La estrategia en su conjunto es una estrategia de seguimiento de tendencias muy práctica. Utilizando una media móvil para determinar la dirección de la tendencia, y el seguimiento de las pérdidas para controlar el riesgo, se puede obtener un mejor rendimiento en los mercados tendenciales. La estabilidad y la rentabilidad de la estrategia se pueden mejorar aún más mediante la optimización de parámetros y la combinación con otros indicadores o modelos.
/*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())