Estrategia de seguimiento de tendencias cruzadas de doble MA

El autor:¿ Qué pasa?, Fecha: 2023-12-21 16:10:22
Las etiquetas:

img

Resumen general

Esta estrategia adopta el método típico de seguimiento de tendencias de doble cruce de medias móviles, combinado con mecanismos de gestión de riesgos como el stop loss, el take profit y el trailing stop loss, con el objetivo de obtener grandes ganancias de los mercados de tendencias.

Estrategia lógica

  1. Calcular la EMA de n días como la línea rápida a corto plazo;
  2. Calcular la EMA de m días como la línea lenta a largo plazo;
  3. Ir largo cuando la línea rápida rompe a través de la línea lenta hacia arriba, y ir corto cuando se rompe hacia abajo;
  4. La señal de salida: cruce inverso (por ejemplo, cruce largo de salida cuando se produce cruce largo).
  5. Utilice stop loss, tomar ganancias, dejar atrás de la pérdida para gestionar los riesgos.

Análisis de ventajas

  1. La adopción de líneas EMA duales puede determinar mejor los puntos de reversión de la tendencia de los precios y capturar los movimientos de la tendencia.
  2. La combinación de stop loss, take profit y trailing stop ayuda a limitar la pérdida de una sola operación, bloquear las ganancias y reducir la reducción.
  3. Hay muchos parámetros personalizables para ajustar y optimizar para diferentes productos y entornos de mercado.
  4. La lógica de la estrategia es simple y clara, fácil de entender y modificar.
  5. Apoyar tanto las operaciones largas como las operaciones cortas, adaptadas a las diferentes condiciones del mercado.

Análisis de riesgos

  1. Las estrategias de doble MA son muy sensibles a las fallas y son propensas a quedar atrapadas.
  2. La configuración incorrecta de los parámetros puede dar lugar a una negociación frecuente, un aumento de los costes de negociación y pérdidas por deslizamiento.
  3. La estrategia en sí misma no puede determinar los puntos de inversión de tendencia, debe combinarse con otros indicadores.
  4. Es fácil generar señales comerciales en mercados variados, pero la rentabilidad real tiende a ser baja.
  5. Los parámetros deben optimizarse para diferentes productos y entornos de mercado.

Los riesgos pueden reducirse:

  1. Filtración de señales falsas con otros indicadores.
  2. Optimizando los parámetros para reducir la frecuencia de las operaciones.
  3. Adición de indicadores de tendencia para evitar operaciones de mercado de rango.
  4. Ajuste del tamaño de las posiciones para reducir los riesgos comerciales únicos.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Optimizar los períodos de autorización rápida y lenta para diferentes productos y mercados.
  2. Añadir otros indicadores para determinar tendencias y filtrar señales falsas, por ejemplo MACD, KDJ, etc.
  3. Considere la posibilidad de sustituir la EMA por una SMA o una WMA.
  4. Ajuste dinámico de pérdida de parada basado en ATR.
  5. Ajustar de forma flexible los tamaños de las posiciones individuales en función de la metodología de dimensionamiento de las posiciones.
  6. Optimización automática de parámetros basada en métricas de correlación y volatilidad.

Resumen de las actividades

En resumen, esta es una estrategia típica de seguimiento de tendencias de doble EMA. Tiene la ventaja de capturar movimientos de tendencias, integrados con mecanismos de gestión de riesgos como stop loss, take profit y trailing stop loss. Pero también tiene algunas debilidades típicas, como alta sensibilidad hacia el ruido y los mercados de rango, propensos a quedar atrapados. Se pueden hacer mejoras adicionales introduciendo indicadores adicionales, optimización de parámetros, ajustes dinámicos y uso de cartera para mejorar el rendimiento de la estrategia. En general, con el ajuste adecuado de parámetros y una buena adecuación con las condiciones del producto y el mercado, esta estrategia puede lograr resultados decentes.


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

//@version=2

strategy(title = "Strategy Code Example", shorttitle = "Strategy Code Example", overlay = true)

// Revision:        1
// Author:          @JayRogers
//
// *** THIS IS JUST AN EXAMPLE OF STRATEGY RISK MANAGEMENT CODE IMPLEMENTATION ***

// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = open, title = "Fast MA Source")
maFastLength   = input(defval = 14, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource   = input(defval = open, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

// === STRATEGY RELATED INPUTS ===
tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)

// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = red, linewidth = 2, style = line, transp = 50)

// === LOGIC ===
// is fast ma above slow ma?
aboveBelow = maFast >= maSlow ? true : false
// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => not tradeDirection[1] and tradeDirection // functions can be used to wrap up and work out complex conditions
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)


Más.