Estrategia de trading de cruce de tendencias


Fecha de creación: 2023-10-07 09:56:30 Última modificación: 2023-10-07 09:56:30
Copiar: 0 Número de Visitas: 637
1
Seguir
1617
Seguidores

Descripción general

La estrategia utiliza el principio de la intersección de las medias móviles para determinar la dirección de la tendencia a través de la intersección de líneas rápidas y lentas para emitir señales de compra y venta. La estrategia es simple y confiable y es adecuada para inversores que buscan ganancias estables.

El principio

La estrategia utiliza dos promedios móviles, el promedio de 7 días como línea rápida y el promedio de 5 meses como línea lenta. La línea rápida puede capturar más rápidamente los cambios en los precios, la línea lenta elimina el ruido y determina la dirección de la tendencia.

Concretamente, la estrategia genera una señal de compra cuando la línea del 7o día intersecta la línea del 5o día desde abajo y genera una señal de venta cuando la línea del 7o día cae desde arriba y rompe la línea del 5o día. La estrategia también marca visualmente el momento en que se produce la señal.

Las ventajas

La estrategia tiene las siguientes ventajas:

  1. La teoría se basa en un principio simple y fiable, basado en el conocido principio de la media móvil cruzada.

  2. Con solo dos promedios móviles, la selección de parámetros es simple y fácil de implementar.

  3. La combinación de líneas rápidas y lentas permite identificar tendencias y filtrar el ruido del mercado.

  4. Utiliza diferentes medias periódicas para capturar los cambios de tendencia en diferentes escalas de tiempo.

  5. La implementación es simple, el código es fácil de entender y la lógica es clara.

  6. Las señales visuales son más claras e intuitivas, y las decisiones operativas más claras.

El riesgo

La estrategia también tiene sus riesgos:

  1. La operación de cruce de línea uniforme puede generar señales de disparo erróneas.

  2. No se puede determinar con precisión si la tendencia es fuerte o débil, y es posible que se interrumpa con frecuencia en caso de movimiento de la oscilación.

  3. El ciclo de la línea media fija no puede adaptarse a los cambios del mercado y necesita parámetros de optimización.

  4. No se puede determinar el punto de compra y venta, existe un cierto riesgo de operación en el mercado.

  5. En base a una teoría más simple, el efecto puede ser reducido y el margen de ganancia limitado.

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Añadir otros indicadores para determinar el punto de compra y venta, como el indicador KDJ para determinar el exceso de compra y venta.

  2. Añadir mecanismos de detención de pérdidas, como el seguimiento de las detenciones, para evitar la expansión de las pérdidas.

  3. Optimización de los parámetros del ciclo de la línea media para que se adapten a diferentes ciclos de la práctica.

  4. Se ha incrementado la filtración de tráfico para evitar falsas brechas.

  5. Evaluación de tendencias fuertes y débiles, como el cálculo de la inclinación de la línea media, operación de diferentes intensidades.

  6. El análisis de la continuidad de la tendencia, combinado con un análisis más periódico, es el siguiente:

Resumir

La estrategia se basa en el principio de cruce de medias móviles, para identificar de manera simple y confiable las tendencias alcistas y bajistas. La ventaja es que es fácil de operar, la desventaja es que existe un cierto riesgo de seguir la tendencia a ciegas.

Código Fuente de la Estrategia
/*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())