Estrategia de cruce de dos medias móviles

El autor:¿ Qué pasa?, Fecha: 2023-10-07 15:18:44
Las etiquetas:

Resumen general

Esta es una estrategia de negociación basada en el cruce de dos promedios móviles. Utiliza las interacciones entre los promedios móviles rápidos y lentos para determinar las tendencias del mercado y generar señales de negociación. Cuando el MA rápido cruza por encima del MA lento, se genera una señal de compra. Cuando el MA rápido cruza por debajo del MA lento, se genera una señal de venta.

Principio

Esta estrategia utiliza principalmente la capacidad de seguimiento de tendencias de los promedios móviles. Los promedios móviles son los precios promedio calculados durante un cierto período basados en los precios de cierre históricos. Pueden suavizar las fluctuaciones menores intradiarias y reflejar tendencias de marcos de tiempo más grandes. El MA rápido utiliza un período más corto y puede responder más rápidamente a los cambios de precios, mientras que el MA lento utiliza un período más largo y representa la tendencia a largo plazo. El cruce rápido del MA lento indica que el impulso a corto plazo está rompiendo la tendencia a largo plazo al alza, lo que indica que está comenzando una tendencia alcista.

Esta estrategia genera señales comerciales estableciendo promedios móviles de diferentes longitudes de ciclo y utilizando sus cruces. Cuando el MA de ciclo corto cruza por encima del MA de ciclo largo, señala una mejora del impulso a corto plazo y genera una señal de compra. Cuando el MA de ciclo corto cruza por debajo del MA de ciclo largo, indica una tendencia debilitante a corto plazo y produce una señal de venta.

Ventajas

  • El uso de cruces de MA para determinar los cambios de tendencia es una técnica simple y eficaz
  • Los MAs pueden filtrar el ruido del mercado de manera eficaz y evitar problemas
  • El ajuste de los períodos de admisión rápida y lenta puede adaptarse a las diferentes condiciones del mercado
  • Indica visualmente las señales de tendencia y los puntos de inflexión
  • Fácil de entender, ajuste de parámetros flexible

Los riesgos

  • Los crossovers de doble MA tienen retrasos de tiempo y pueden perder puntos de giro
  • No es adecuado para los mercados de rango, puede producir más señales falsas
  • La configuración inadecuada del período de MA puede causar sobre-sensibilidad o lentitud.
  • Necesita otros indicadores para confirmar el contexto y el momento de la tendencia

Direcciones de optimización

  • Evaluar la rentabilidad de los diferentes parámetros del período de MA y seleccionar el óptimo
  • Agregue otros filtros como indicadores de canal, patrones de velas, etc.
  • Incorporar indicadores de volatilidad para optimizar el stop loss y el take profit
  • Utilice algoritmos de aprendizaje automático para optimizar automáticamente parámetros y reglas
  • Añadir módulos de negociación algorítmicos para la ejecución automática de órdenes

Resumen de las actividades

La estrategia de cruce de doble MA utiliza la capacidad de seguimiento de tendencias de las medias móviles y genera señales basadas en sus cruces. Si bien es simple e intuitiva, también tiene algunos defectos. Estos pueden superarse ajustando parámetros, agregando confirmaciones, optimizando algoritmos, etc. para convertirlo en un sistema robusto. En general, la estrategia de doble MA es una estrategia muy clásica y fácil de usar para seguir tendencias.


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

Más.