Estrategia de media móvil dual


Fecha de creación: 2023-10-07 15:18:44 Última modificación: 2023-10-07 15:18:44
Copiar: 0 Número de Visitas: 395
1
Seguir
1166
Seguidores

Descripción general

Esta es una estrategia de negociación basada en dos medias móviles. Se trata de una estrategia de negociación basada en una relación cruzada de medias móviles rápidas y medias móviles lentas para determinar la tendencia del mercado y generar señales de negociación. Cuando se cruza la mediana lenta sobre la mediana rápida, se genera una señal de compra; cuando se cruza la mediana rápida por debajo de la mediana rápida, se genera una señal de venta.

El principio

La estrategia utiliza principalmente la función de seguimiento de tendencias de la media móvil. La media móvil es un precio promedio calculado en función de los precios de cierre históricos en un período determinado, que puede fluctuar con pequeñas fluctuaciones en el día y refleja la tendencia de los precios en un período de tiempo más largo. La media rápida utiliza períodos más cortos y responde más rápidamente a los cambios de precios. La media lenta utiliza períodos más largos y representa tendencias a largo plazo.

La estrategia utiliza una línea de medias móviles de diferentes longitudes de período para crear señales de negociación. Cuando la línea de medias de corto período atraviesa la línea de medias de largo período, indica que el movimiento a corto plazo es positivo y produce una señal de compra. Cuando la línea de medias de corto período atraviesa la línea de medias de largo período, indica que el movimiento a corto plazo es débil y produce una señal de venta.

Las ventajas

  • El uso de un cruce bidireccional es un indicador técnico simple y eficaz para determinar cambios en las tendencias de mercado.
  • La línea uniforme puede filtrar el ruido del mercado y evitar ser bloqueado
  • Ajuste de los parámetros de ciclo de la línea media rápida y lenta para adaptarse a diferentes situaciones
  • Indica las señales de tendencia y los puntos de cambio visualmente
  • Es fácil de entender, los parámetros se ajustan con flexibilidad

El riesgo

  • La estrategia de cruce de dos líneas equiláteras está retrasada y puede perder el punto de inflexión de los precios
  • No se aplica en situaciones de temblores, generando más señales erróneas
  • Los parámetros incorrectos de ciclo de la media pueden causar una sensibilidad excesiva o lentitud
  • Necesidad de colaborar con otros indicadores para determinar tendencias de fondo y el momento de actuar

Dirección de optimización

  • Evaluación de los beneficios de los diferentes parámetros de ciclo medio y selección de los mejores parámetros
  • Añadir otros indicadores para filtrar señales, como indicadores de canal, formas de línea K, etc.
  • Optimización de las estrategias de stop loss en combinación con los indicadores de volatilidad
  • Optimización automática de parámetros y reglas de transacción basadas en algoritmos de aprendizaje automático
  • Agregado módulo de negociación algorítmica para realizar pedidos automáticos

Resumir

La estrategia de cruce de doble línea utiliza la función de seguimiento de tendencias de la línea de promedio móvil para determinar la dirección del mercado y generar señales de comercio a través de cruces rápidos y lentos de la línea de promedio. La estrategia es sencilla y fácil de manejar, pero también tiene algunos problemas.

Código Fuente de la Estrategia
/*backtest
start: 2023-01-01 00:00:00
end: 2023-04-14 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/
// © KivancOzbilgic


//@version=4
strategy("pomila", overlay=true)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => time >= start and time <= finish ? true : false
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
    strategy.entry("SELL", strategy.short, when = window())
buy1= barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)