Estrategia de negociación de retroceso de promedio móvil de varios plazos

El autor:¿ Qué pasa?, fecha: 2024-02-29 11:20:28
Las etiquetas:

img

Resumen general

Esta estrategia adopta el enfoque de la media móvil de varios marcos de tiempo, utilizando la media móvil a largo plazo para determinar la dirección de la tendencia principal, mientras que la media móvil a corto plazo para determinar la dirección de la tendencia a corto plazo. Cuando la tendencia a largo plazo se alinea con la tendencia a corto plazo, se toman posiciones en consecuencia. Cuando la media móvil a corto plazo retrocede a la vecindad de la media móvil a largo plazo, indica una corrección a corto plazo que presenta oportunidades comerciales para la dirección inversa.

Estrategia lógica

La estrategia utiliza la media móvil simple de 200 días (SMA) para determinar la dirección de la tendencia a largo plazo, y la SMA de 10 días para la dirección de la tendencia a corto plazo. Cuando el precio cierra por encima de la SMA de 200 días y por debajo de la SMA de 10 días, señala una tendencia ascendente a largo plazo con un retroceso a corto plazo, presentando una oportunidad de compra. Cuando el precio cierra por debajo de la SMA de 200 días y por encima de la SMA de 10 días, señala una tendencia descendente a largo plazo con un rebote a corto plazo, presentando una oportunidad de venta.

En concreto, cuando se cumplen las siguientes condiciones, se activa la entrada larga: cierre > SMA de 200 días Y cierre < SMA de 10 días.

Después de la entrada, se implementa un mecanismo de stop loss del 10%. La posición se detendrá si el retroceso del precio de entrada excede el 10%. Además, si se habilita la opción i_lowerClose, esperará un cierre inferior antes de salir, evitando la sensibilidad excesiva de la stop loss.

Análisis de ventajas

Esta estrategia combina promedios móviles de varios marcos de tiempo, lo que permite una alta probabilidad de capturar la dirección de la tendencia a medio y largo plazo. Proporciona un momento de entrada decente cuando la SMA a corto plazo se vuelve a la SMA a largo plazo. En comparación con los sistemas de promedios móviles únicos, la probabilidad de ser atrapado en correcciones a corto plazo se reduce.

El riesgo involucrado en esta estrategia está bien definido y limitado. Un índice de stop loss del 10% restringe el tamaño máximo de la pérdida. También el filtro de rango de tiempo evita la negociación en períodos de tiempo especificados.

Análisis de riesgos

Si la corrección a corto plazo dura demasiado tiempo o la amplitud de retroceso es demasiado grande, se podría desencadenar el stop loss, lo que daría lugar a una salida forzada en momentos inoportunos.

La adaptabilidad de esta estrategia a todos los instrumentos de negociación es limitada. Para las acciones con alta volatilidad y períodos de corrección prolongados, esta estrategia tiende a alcanzar el stop loss prematuramente, lo que produce un bajo rendimiento.

Durante las grandes correcciones en todo el mercado, por ejemplo, la crisis financiera, esta estrategia podría sufrir grandes pérdidas.

Direcciones de optimización

Se pueden introducir más sistemas de medias móviles para formar un mecanismo de filtrado múltiple. Por ejemplo, agregando una SMA de 50 días, las posiciones de entrada solo se consideran cuando el precio está entre la SMA de 50 días y la SMA de 200 días. Esto extra filtra las acciones con características de tendencia inferiores.

Se puede implementar un mecanismo de stop loss dinámico. Específicamente, después de la entrada, la relación de stop loss se ajusta en función de la volatilidad observada en lugar de un 10% fijo.

También se pueden incorporar otros indicadores que miden las condiciones del mercado. Por ejemplo, MACD, cuando el MACD muestra divergencia del mercado, esta estrategia podría desactivarse temporalmente para evitar pérdidas. Agrega un mecanismo de sincronización del mercado para activar y desactivar la estrategia.

Conclusión

En conclusión, esta es una estrategia típica de promedio móvil de varios marcos de tiempo. Se capitaliza en la dirección de tendencia a mediano y largo plazo indicada por el promedio móvil a largo plazo, mientras se aprovecha de las oportunidades de retroceso a corto plazo reveladas por el promedio móvil a corto plazo. Los factores de riesgo están definidos y bien limitados.


/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 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) // 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.