Estrategia de inversión de tendencia basada en medias móviles

El autor:¿ Qué pasa?, Fecha: 2024-02-21 17:03:31
Las etiquetas:

img

Resumen general

La idea principal de esta estrategia es el comercio de retrocesos a corto plazo a lo largo de la dirección de la tendencia a largo plazo. Específicamente, el promedio móvil simple de 200 días se utiliza para determinar la dirección de la tendencia a largo plazo, y el promedio móvil simple de 10 días se utiliza para determinar la dirección de la tendencia a corto plazo. Cuando el precio está por encima de la línea de 200 días, es un mercado alcista. Cuando el precio está por debajo de la línea de 200 días, es un mercado bajista. En un mercado alcista, ir largo cuando el precio cae a la línea de 10 días. En un mercado bajista, ir corto cuando el precio sube a la línea de 10 días.

Estrategia lógica

Esta estrategia utiliza el promedio móvil simple de 200 días y el promedio móvil simple de 10 días para determinar la tendencia del mercado. Cuando el precio cruza por encima de la línea de 200 días, se considera que entra en un mercado alcista. Cuando el precio cruza por debajo de la línea de 200 días, se considera que entra en un mercado bajista. En un mercado alcista, si el precio cae alrededor de la línea de 10 días, significa que se encuentra con una corrección a corto plazo. En este momento, vaya largo, apuntando a la continuación de la tendencia alcista a largo plazo. En un mercado bajista, si el precio sube alrededor de la línea de 10 días, significa que se encuentra con un rebote a corto plazo. En este momento, vaya corto, apuntando a la continuación de la tendencia bajista a largo plazo.

Específicamente, cuando se cumplan las siguientes condiciones, ir largo para entrar en el mercado: el precio está por encima de la línea de 200 días, el precio está por debajo de la línea de 10 días, y no hubo ninguna posición anterior. Cuando se cumplen las siguientes condiciones, cierre la posición para salir del mercado: el precio está por encima de la línea de 10 días, y hubo una posición larga anterior. Para evitar pérdidas enormes, se establece un stop loss FAILSAFE. Si el retroceso desde el punto más alto excede el 10%, cierre directamente la pérdida para salir.

Se puede ver que la lógica de negociación de esta estrategia se basa principalmente en la cruz de oro y la cruz de muerte de las medias móviles.

Análisis de ventajas

La mayor ventaja de esta estrategia es el seguimiento de tendencias de bajo coste para obtener rendimientos excedentes.

  1. El uso de una combinación de medias móviles a largo plazo y a corto plazo para determinar la dirección de las tendencias primarias y secundarias puede bloquear eficazmente las oportunidades de tendencia a mediano y largo plazo y evitar ser engañado por los movimientos a corto plazo del mercado.

  2. Al ingresar basándose en retiros a corto plazo, el costo de entrada puede minimizarse para obtener un potencial de ganancia relativamente alto.

  3. El mecanismo de detención de pérdidas FAILSAFE puede controlar eficazmente las pérdidas individuales para proteger los fondos de la cuenta.

  4. Al permitir salidas de seguimiento de tendencias, se pueden aprovechar plenamente las oportunidades de tendencia a medio y largo plazo para obtener rendimientos excedentes de alfa.

  5. La adopción de un método de negociación totalmente automatizado evita el impacto emocional subjetivo y facilita la implementación de la estrategia.

Análisis de riesgos

Los principales riesgos de esta estrategia son:

  1. Las condiciones reales del mercado pueden diferir de los datos históricos, lo que resulta en un rendimiento comercial reducido.

  2. La probabilidad de que los precios se revierten cerca de las medias móviles es relativamente grande, lo que puede conducir fácilmente a pequeñas pérdidas acumuladas.

  3. El riesgo de reversión de tendencia: son comunes las reversiones repentinas en las tendencias a medio y largo plazo, que pueden conducir fácilmente a pérdidas relativamente grandes cuando se mantienen posiciones.

Las contramedidas son:

  1. Aumentar el tamaño de la muestra y utilizar más datos históricos para las pruebas de robustez para garantizar resultados fiables.

  2. Optimizar los parámetros ajustando la combinación de parámetros del sistema de media móvil para garantizar la calidad de la señal.

  3. Las líneas de stop loss se amplían adecuadamente para permitir algunas retraces de precios para evitar las stop loss demasiado sensibles.

Direcciones de optimización

Esta estrategia puede optimizarse aún más en los siguientes aspectos:

  1. Añadir condiciones de filtrado como el filtrado de volumen para reducir eficazmente las operaciones innecesarias causadas por falsos breakouts.

  2. Incorporar otros indicadores como KDJ y MACD para formar señales combinadas para mejorar la calidad de las señales comerciales.

  3. Prueba diferentes períodos de retención y optimiza las estrategias de toma de ganancias y stop loss para mejorar aún más la relación Sharpe, etc.

  4. Ajustar dinámicamente los parámetros en función de las condiciones del mercado para formar un mecanismo de optimización de parámetros adaptativo para hacer que la estrategia sea más robusta.

  5. Añadir módulos de negociación algorítmicos que utilizan aprendizaje automático, etc. para generar automáticamente señales comerciales para reducir la intervención humana.

Resumen de las actividades

La lógica general de esta estrategia es clara y fácil de implementar para el seguimiento de bajo costo de las tendencias a mediano y largo plazo para lograr un alfa estable. Pero también hay riesgos de quedar atrapados en el lado equivocado de la tendencia que requiere una mayor optimización para mejorar la robustez. En general, esta estrategia está diseñada desde una perspectiva de seguimiento de tendencias y vale la pena investigar y aplicar más.


/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © irfanp056
// @version=5

strategy("Simple Pullback Strategy", 
     overlay=true, 
     initial_capital=100000,
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=1000, // 100% of balance invested on each trade
     commission_type=strategy.commission.cash_per_contract, 
     commission_value=0.005) // Interactive Brokers rate

// Get user input
i_ma1           = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2           = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent   = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose    = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime     = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Get indicator values
ma1 = ta.sma(close, i_ma1)
ma2 = ta.sma(close, i_ma2)

// Check filter(s)
f_dateFilter = true

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter
sellCondition   = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1])
stopDistance    = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice       = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition   = strategy.position_size > 0 and stopDistance > i_stopPercent

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)

Más.