Estrategia de inversión de la media móvil doble

El autor:¿ Qué pasa?, Fecha: 2023-11-22 10:07:19
Las etiquetas:

img

Resumen general

La idea principal de esta estrategia es utilizar el cruce de medias móviles rápidas y lentas para juzgar las tendencias del mercado y tomar posiciones cuando las medias móviles a corto y largo plazo se invierten, de modo que se logre el efecto de seguir las tendencias.

Estrategia lógica

  1. Establecer el período de media móvil a corto plazo shortma (default 7 días) y el período de media móvil a largo plazo longma (default 77 días)
  2. Cuando el MA corto cruza el MA largo, se determina como una señal de compra y una barra de registro desde el momento de comprar. El MA largo implica que ha comenzado una tendencia alcista. Cuando el MA corto cruza por debajo del MA largo, se determina como una señal de venta y una barra de registro desde el momento de vender. El MA largo implica que la tendencia alcista ha terminado.
  3. Comparar los valores de barras desde el cruce hacia abajo de la MA corta, cuanto más barras desde el cruce hacia arriba de la MA corta, más fuerte es la señal de inversión.
  4. Cuando el barsin de la señal de venta es mayor que el barsin de la señal de compra, se activa una señal de compra.
  5. Esencialmente, se trata de una estrategia de inversión de MA dual, que utiliza inversiones cruzadas de MA rápidas y lentas para detectar puntos de inversión de tendencia.

Ventajas

  1. Utiliza dos MAs para filtrar algunas señales falsas.
  2. Barras añadidas, ya que la comparación evita roturas falsas y inversiones cercanas de precios
  3. Fácil de entender e implementar
  4. Los parámetros de MA personalizables se adaptan a diferentes períodos y mercados

Los riesgos

  1. Las estrategias de doble MA tienden a producir señales comerciales más frecuentes
  2. El mal ajuste del parámetro MA puede perder tendencias más largas
  3. Las pérdidas de detención en caso de ruptura de los MAs a largo plazo pueden ser lejanas, lo que dará lugar a mayores reducciones.
  4. No puede filtrar eficazmente las bobinas y las oscilaciones

Direcciones de mejora

  1. Añadir otros indicadores para evitar problemas en los mercados variados
  2. Añadir mecanismos de stop loss
  3. Optimización de las combinaciones de parámetros MA
  4. Ajuste dinámico de los parámetros del MA en función del ciclo del mercado

Resumen de las actividades

La estrategia en general tiene una lógica clara y fácil de entender, utilizando inversiones de MA rápidas y lentas para detectar puntos de inversión de tendencia. En teoría puede rastrear efectivamente las tendencias. Pero en la implementación real todavía necesita optimización del propio algoritmo y ajuste de parámetros para hacerlo más robusto y práctico.


/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Up Down", "Up Down", precision = 6, pyramiding = 1, default_qty_type = strategy.percent_of_equity, default_qty_value = 99, commission_type = strategy.commission.percent, commission_value = 0.0, initial_capital = 1000, overlay = true)

buy = close > open and open > close[1]
sell = close < open and open < close[1]

longma = input(77,"Long MA Input")
shortma = input(7,"Short MA Input")
long = sma(close,longma)
short = sma(close, shortma)
mabuy = crossover(short,long) or buy and short > long
masell = crossunder(short,long) or sell and short > long

num_bars_buy = barssince(mabuy)
num_bars_sell = barssince(masell)
//plot(num_bars_buy, color = teal)
//plot(num_bars_sell, color = orange)

xbuy = crossover(num_bars_sell, num_bars_buy)
xsell = crossunder(num_bars_sell, num_bars_buy)
plotshape(xbuy,"Buy Up Arrow", shape.triangleup, location.belowbar, white, size = size.tiny)
plotshape(xsell,"Sell Down Arrow", shape.triangledown, location.abovebar, white, size = size.tiny)
plot(long,"Long MA", fuchsia, 2)

// Component Code Start
// Example usage:
// if testPeriod()
//   strategy.entry("LE", strategy.long)
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(7, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop

if testPeriod()
    strategy.entry("buy", true, when = xbuy, limit = close)
    strategy.close("buy", when = xsell)


Más.