Estrategia de seguimiento de tendencias de media móvil cruzada

El autor:¿ Qué pasa?, Fecha: 2024-01-29 16:52:46
Las etiquetas:

img

Resumen general

Esta es una estrategia simple basada en promedios móviles que funciona bien con diferentes pares de monedas. Traza el precio de apertura y el precio de cierre promedio móviles, y decide entrar en una posición larga o salir de ella en función de si las dos líneas se han cruzado entre sí. La idea es que entra en una posición cuando el precio promedio de cierre está aumentando, lo que puede indicar un impulso al alza en los precios. Luego sale de la posición cuando el precio promedio de cierre disminuye, lo que puede indicar un impulso a la baja. Esto es especulativo, pero a veces puede predecir muy bien la acción del precio.

Estrategia lógica

Esta estrategia primero selecciona el tipo de promedio móvil, incluyendo EMA, SMA, RMA, WMA y VWMA. Luego establece el período de retroceso para el promedio móvil, generalmente entre 10 y 250 bares.

La lógica de negociación específica es:

  1. Calcular la media móvil del precio de apertura y del precio de cierre;
  2. Comparar los valores medios móviles entre el precio de cierre y el precio de apertura;
  3. Introducir una posición larga si la media móvil del precio cerrado se cruza por encima de la media móvil del precio abierto;
  4. Cierre la posición larga si la media móvil del precio cerrado se cruza por debajo de la media móvil del precio abierto.

Entrar en la posición lo considera una señal de movimiento de precios al alza, mientras que salir considera un movimiento de precios a la baja.

Análisis de ventajas

Las principales ventajas de esta estrategia son las siguientes:

  1. Configuración de parámetros flexibles que se pueden optimizar para diferentes pares de monedas para una mejor especificidad;
  2. Una lógica sencilla que sea fácil de entender e implementar.
  3. Se pueden obtener rendimientos muy elevados para algunos pares de monedas, con una buena estabilidad en general.
  4. Alta personalización en la visualización de diferentes indicadores.

Análisis de riesgos

También hay algunos riesgos con esta estrategia:

  1. Para algunos pares de monedas y parámetros, los rendimientos y la estabilidad pueden ser bajos;
  2. No puede responder bien a las fluctuaciones de precios a corto plazo, bajo rendimiento para monedas altamente volátiles;
  3. La elección del período de retroceso promedio móvil no es lo suficientemente científica, es algo subjetivo.

Soluciones y optimización:

  1. Utilice plazos más largos como 12H, 1D para reducir las operaciones innecesarias y mejorar la estabilidad;
  2. Añadir funciones de optimización de parámetros para probar automáticamente diferentes combinaciones de parámetros para obtener los mejores parámetros;
  3. Añadir la selección adaptativa del período de revisión de la media móvil para que el sistema decida automáticamente el período óptimo.

Conclusión

En resumen, esta es una estrategia simple que utiliza indicadores de promedio móvil para determinar la tendencia de precios y los puntos de inflexión. Puede lograr muy buenos resultados ajustando los parámetros, y es una estrategia de seguimiento de tendencias efectiva que vale la pena mejorar y aplicar.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Author @divonn1994

initial_balance = 100
strategy(title='Close v Open Moving Averages Strategy', shorttitle = 'Close v Open', overlay=true, pyramiding=0, default_qty_value=100, default_qty_type=strategy.percent_of_equity, precision=7, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent, initial_capital=initial_balance)

//Input for number of bars for moving average, Switch to choose moving average type, Display Options and Time Frame of trading----------------------------------------------------------------

bars = input.int(66, "Moving average length (number of bars)", minval=1, group='Strategy') //66 bars and VWMA for BTCUSD on 12 Hours.. 35 bars and VWMA for BTCUSD on 1 Day
strategy = input.string("VWMA", "Moving Average type", options = ["EMA", "SMA", "RMA", "WMA", "VWMA"], group='Strategy')

redOn = input.string("On", "Red Background Color On/Off", options = ["On", "Off"], group='Display')
greenOn = input.string("On", "Green Background Color On/Off", options = ["On", "Off"], group='Display')
maOn = input.string("On", "Moving Average Plot On/Off", options = ["On", "Off"], group='Display')

startMonth = input.int(title='Start Month 1-12 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=12, group='Beginning of Strategy')
startDate = input.int(title='Start Date 1-31 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=31, group='Beginning of Strategy')
startYear = input.int(title='Start Year 2000-2100 (set any start time to 0 for furthest date)', defval=2011, minval=2000, maxval=2100, group='Beginning of Strategy')

endMonth = input.int(title='End Month 1-12 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=12, group='End of Strategy')
endDate = input.int(title='End Date 1-31 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=31, group='End of Strategy')
endYear = input.int(title='End Year 2000-2100 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=2100, group='End of Strategy')

//Strategy Calculations-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

inDateRange = true

maMomentum = switch strategy
    "EMA" => (ta.ema(close, bars) > ta.ema(open, bars)) ? 1 : -1
    "SMA" => (ta.sma(close, bars) > ta.sma(open, bars)) ? 1 : -1
    "RMA" => (ta.rma(close, bars) > ta.rma(open, bars)) ? 1 : -1
    "WMA" => (ta.wma(close, bars) > ta.wma(open, bars)) ? 1 : -1
    "VWMA" => (ta.vwma(close, bars) > ta.vwma(open, bars)) ? 1 : -1
    =>
        runtime.error("No matching MA type found.")
        float(na)

openMA = switch strategy
    "EMA" => ta.ema(open, bars)
    "SMA" => ta.sma(open, bars)
    "RMA" => ta.rma(open, bars)
    "WMA" => ta.wma(open, bars)
    "VWMA" => ta.vwma(open, bars)
    =>
        runtime.error("No matching MA type found.")
        float(na)
        
closeMA = switch strategy
    "EMA" => ta.ema(close, bars)
    "SMA" => ta.sma(close, bars)
    "RMA" => ta.rma(close, bars)
    "WMA" => ta.wma(close, bars)
    "VWMA" => ta.vwma(close, bars)
    =>
        runtime.error("No matching MA type found.")
        float(na)

//Enter or Exit Positions--------------------------------------------------------------------------------------------------------------------------------------------------------------------

if ta.crossover(maMomentum, 0)
    if inDateRange
        strategy.entry('long', strategy.long, comment='long')
if ta.crossunder(maMomentum, 0)
    if inDateRange
        strategy.close('long')

//Plot Strategy Behavior---------------------------------------------------------------------------------------------------------------------------------------------------------------------

plot(series = maOn == "On" ? openMA : na, title = "Open moving Average", color = color.new(color.purple,0), linewidth=3, offset=1)
plot(series = maOn == "On" ? closeMA : na, title = "Close Moving Average", color = color.new(color.white,0), linewidth=2, offset=1)
bgcolor(color = inDateRange and (greenOn == "On") and maMomentum > 0 ? color.new(color.green,75) : inDateRange and (redOn == "On") and maMomentum <= 0 ? color.new(color.red,75) : na, offset=1)

Más.