Estrategia de seguimiento de la media móvil para detener pérdidas

El autor:¿ Qué pasa?, Fecha: 2023-10-24 11:21:57
Las etiquetas:

img

Resumen general

La idea central de esta estrategia es diseñar un sistema de negociación automatizado que pueda obtener ganancias en los mercados de tendencia mientras controla las reducciones mediante el uso de promedios móviles y un mecanismo de stop loss.

Estrategia lógica

  1. La estrategia permite a los usuarios elegir entre varios tipos de promedios móviles, incluyendo promedio móvil simple, promedio móvil exponencial, promedio móvil ponderado, etc. Los usuarios pueden seleccionar el tipo de promedio móvil basado en sus preferencias.

  2. Los usuarios deben establecer el período de la media móvil.

  3. Una vez que se elige la media móvil, la estrategia la calculará en tiempo real.

  4. La estrategia utiliza un mecanismo de stop loss trasero. Después de abrir una posición, monitoreará continuamente la relación entre el promedio móvil y el precio, y ajustará dinámicamente el nivel de stop loss.

  5. Los usuarios pueden establecer el porcentaje de stop loss. Un porcentaje mayor significa un rango de stop loss más amplio y menos sensibilidad. Un porcentaje más pequeño significa un stop loss más ajustado y un menor riesgo. El porcentaje de stop loss generalmente se establece entre el 2% y el 5%.

  6. Después de abrir una posición, si el precio rompe la media móvil, la posición se cerrará.

Ventajas

  • Puede abrir posiciones a lo largo de la tendencia y obtener mayores ganancias en los mercados de tendencia
  • Utiliza el stop loss para ajustar el nivel de stop basado en la acción del precio, evitando que los stops sean demasiado ajustados
  • Permite personalizar las medias móviles y el porcentaje de stop loss de acuerdo con el apetito por el riesgo
  • Soporta varios tipos de promedios móviles, lo que permite la optimización a través de pruebas
  • Lógica sencilla y clara, fácil de entender y modificar

Los riesgos

  • El precio puede fluctuar en torno a la media móvil en los mercados de rango, lo que provoca una negociación excesiva
  • Un porcentaje de stop loss demasiado amplio puede llevar a pérdidas ampliadas
  • Los parámetros óptimos para la media móvil y el stop loss pueden diferir entre productos y plazos.
  • Evite usar esta estrategia cerca de eventos importantes de noticias

Los riesgos se pueden optimizar y controlar mediante:

  • Utilización de la estrategia en productos y plazos con tendencias obvias
  • Ajuste de la media móvil del período, utilizando medias móviles a más largo plazo
  • Reducción adecuada del porcentaje de pérdidas de parada para un control de riesgos más estricto
  • Pruebas por separado en cada producto para encontrar los parámetros óptimos
  • Deje de operar antes de los acontecimientos de noticias importantes

Oportunidades de mejora

La estrategia se puede optimizar aún más en los siguientes aspectos:

  1. Añadir otros indicadores para la confirmación, evitando operaciones excesivas durante los mercados de rango.

  2. Por ejemplo, un MA de 5 días y un MA de 20 días se pueden utilizar juntos, de modo que las operaciones se realizan solo cuando ambos se alinean en la misma dirección.

  3. Los parámetros difieren entre los productos y los plazos, por lo que se necesitan ensayos separados.

  4. Añadir las reglas de dimensionamiento de la posición, por ejemplo, cantidad fija para la posición inicial, luego añadir a la posición basada en la distancia de stop loss.

  5. Establecer el número máximo de operaciones por día o el tiempo mínimo entre las operaciones.

  6. Añadir algoritmos de aprendizaje automático para optimizar dinámicamente los parámetros basados en datos históricos, evitando la configuración de parámetros estáticos.

  7. Incorporar modelos de aprendizaje profundo para pronosticar la tendencia de los precios, ayudando con el juicio de la dirección de la tendencia.

Conclusión

En general, esta es una estrategia muy práctica de seguimiento de tendencias. Utiliza promedios móviles para determinar la dirección de la tendencia y paradas de seguimiento para controlar el riesgo. Puede producir buenos rendimientos en los mercados de tendencia. Combinar la optimización de parámetros e integración con otros indicadores o modelos puede mejorar aún más la estabilidad y la rentabilidad. Los usuarios deben tener en cuenta las diferencias en la configuración de parámetros entre productos y marcos de tiempo, así como el impacto de eventos importantes. En general, esta estrategia es adecuada para fondos de cobertura de nivel medio e inversores minoristas con cierta experiencia.


/*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())

Más.