Estrategia de negociación cruzada de la tendencia alcista/osera

El autor:¿ Qué pasa?, Fecha: 2023-10-07 09:56:30
Las etiquetas:

Resumen general

Esta estrategia utiliza el principio de cruce de la media móvil para determinar la dirección de la tendencia y generar señales de compra y venta.

Principio

La estrategia emplea dos promedios móviles, un MA de 7 días como la línea rápida y un MA de 5 meses como la línea lenta. La línea rápida captura los cambios de precio rápidamente mientras que la línea lenta filtra el ruido y determina la dirección de la tendencia. Cuando la línea rápida se rompe por encima de la línea lenta desde abajo, se considera una señal alcista para ir largo. Cuando la línea rápida rompe la línea lenta desde arriba, se considera una señal bajista para ir corto.

Específicamente, la estrategia calcula la media móvil simple de 7 días (SMA) y la SMA de 5 meses, trazandolas en el gráfico de precios. Cuando la línea de 7 días cruza por encima de la línea de 5 meses desde abajo, se genera una señal de compra. Cuando la línea de 7 días cruza por debajo de la línea de 5 meses desde arriba, se activa una señal de venta. La estrategia también visualiza los períodos de señal.

Ventajas

La estrategia tiene las siguientes ventajas:

  1. Una base teórica simple y fiable, basada en el conocido principio de cruce de la media móvil.

  2. Solo se utilizan dos medias móviles, con una selección de parámetros sencilla y una fácil aplicación.

  3. Las líneas rápidas y lentas trabajan juntas eficazmente para identificar tendencias y filtrar el ruido del mercado.

  4. Los diferentes marcos de tiempo se capturan a través de diferentes periodos de MAs, detectando cambios de tendencia en múltiples escalas.

  5. Implementación sencilla con lógica clara y fácil de entender.

  6. Las señales visualizadas son claras e intuitivas para decidir las operaciones.

Los riesgos

También hay algunos riesgos:

  1. Es propenso a señales falsas basándose únicamente en cruces MA.

  2. Incapacidad para juzgar la fuerza de la tendencia de manera efectiva, causando frecuentes pérdidas de parada en mercados variados.

  3. Los períodos de admisión fijos no pueden adaptarse a los cambios del mercado, lo que requiere una optimización de los parámetros.

  4. Los niveles de entrada y salida no están claros, con algunos riesgos.

  5. Una base teórica simplista puede comprometer el rendimiento y el potencial de ganancia.

Mejoramiento

La estrategia puede mejorarse en los siguientes aspectos:

  1. Añadir otros indicadores para determinar los niveles de entrada y salida, tales como KDJ para sobrecompra/sobreventa.

  2. Implementar mecanismos de detención de pérdidas como la detención posterior para limitar las pérdidas.

  3. Optimizar los períodos de autorización para adaptarse a los diferentes ciclos del mercado.

  4. Agregue el filtro de volumen para evitar falsos brotes.

  5. Evaluar la fuerza de la tendencia, por ejemplo, la pendiente MA, para escalar el tamaño de la posición.

  6. Incorporar múltiples marcos de tiempo para una mejor continuidad de tendencia.

Conclusión

La estrategia identifica tendencias alcista/osera de manera simple y confiable basada en la teoría del cruce MA. Los pros son la simplicidad y facilidad de uso, mientras que los contras son los riesgos inherentes a la tendencia.


/*backtest
start: 2022-09-30 00:00:00
end: 2023-10-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © dadashkadir

//@version=4
strategy("Mount MaV - Day MaV CrossOver Strgty", shorttitle="Yusram Str.", overlay=true)
src = input(title= "Kaynak", type=input.source, defval=close)
mav = input(title="Hareketli Ortlama Tipi", defval="SMA", options=["SMA", "EMA", "WMA"])
Gbar = input(title="Günlük Bar Sayısı", defval=7, minval=1, maxval=999)
Abar = input(title="Aylık Bar Sayısı", defval=5, minval=1, maxval=999)
//displacement = input(20, minval=1, title="Displacement")
getMA(src, length) =>
    ma = 0.0
    if mav == "SMA"
        ma := sma(src, length)
        ma

    if mav == "EMA"
        ma := ema(src, length)
        ma

    if mav == "WMA"
        ma := wma(src, length)
        ma
    ma
long = "M" //Aylık
ln = security(syminfo.ticker, long, src)
lnma = getMA(ln, Abar)
gnma = getMA(src, Gbar)
col1= gnma>gnma[1]
col3= gnma<gnma[1]
colorM = col1 ? color.green : col3 ? color.navy : color.yellow
l1 = plot(lnma, title="MhO", trackprice = true, style=plot.style_line, color=color.red, linewidth=3)
l2 = plot(gnma, title="DhO", trackprice = true, style=plot.style_line, color=colorM, linewidth=3)
fill(l1, l2, color = lnma < gnma ? color.green : color.red, title="Gölgelendirme", transp=90)
zamanaralik = input (2020, title="Backtest Başlangıç Tarihi")
al  = crossover (gnma, lnma) and zamanaralik <= year
sat = crossover (lnma, gnma) and zamanaralik <= year
plotshape(al,  title = "Giriş",  text = 'Al',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
plotshape(sat, title = "Çıkış", text = 'Sat', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)

FromDay    = input(defval = 1, title = "Str. Başlama Tarihi Gün", minval = 1, maxval = 31)
FromMonth  = input(defval = 1, title = "Str. Başlama Tarihi Ay", minval = 1, maxval = 12)
FromYear   = input(defval = 2015, title = "Str. Başlama Tarihi Yıl", minval = 2005)
ToDay      = input(defval = 1, title = "Str. Bitiş Tarihi Gün", minval = 1, maxval = 31)
ToMonth    = input(defval = 1, title = "Str. Bitiş Tarihi Ay", minval = 1, maxval = 12)
ToYear     = input(defval = 9999, title = "Str. Bitiş Tarihi Yıl", minval = 2006)
Start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)
Finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)
Timerange() =>
    time >= Start and time <= Finish ? true : false
if al
    strategy.entry("Al", strategy.long, when=Timerange())
if sat
    strategy.entry("Sat", strategy.short, when=Timerange())


Más.