En la carga de los recursos... Cargando...

Estrategia de impulso

El autor:¿ Qué pasa?, Fecha: 2023-09-26 15:16:56
Las etiquetas:

Resumen general

La estrategia de impulso es una estrategia de trading que sigue la tendencia de precios basada en el movimiento de precios. Genera señales de trading mediante el cálculo de los cambios de precios durante un cierto período. Cuando se identifica la tendencia al alza del precio, desencadena una señal de compra. Cuando se identifica la tendencia a la baja del precio, desencadena una señal de venta. Esta estrategia utiliza un doble cruce de indicadores de impulso para generar señales de trading.

Estrategia lógica

Esta estrategia calcula el impulso de los precios midiendo el cambio del precio de cierre en comparación con el precio de cierre de N períodos anteriores.

El primer indicador de impulso MOM0 se calculará de la siguiente manera:

MOM0 = cerrado - cerrado[N]

donde CLOSE es el precio de cierre del período actual y CLOSE[N] es el precio de cierre de N períodos anteriores. MOM0 > 0 indica que el precio de cierre actual es superior al de N períodos anteriores, mientras que MOM0 < 0 indica que el precio de cierre actual es inferior al de N períodos anteriores.

El segundo indicador de impulso MOM1 se calculará de la siguiente manera:

MOM1 = MOM0 - MOM0 [1]

Se calcula la diferencia entre el MOM0 actual y el MOM0 del período anterior.

El tercer indicador de momento MOM2 se calcula como sigue:

MOM2 = cerrado - cerrado [1]

Se calcula la diferencia entre el precio de cierre actual y el precio de cierre del período anterior. MOM2 > 0 indica que el precio de cierre está aumentando, mientras que MOM2 < 0 indica que el precio de cierre está bajando.

Cuando MOM0 > 0 y MOM1 > 0, indica que el impulso está en constante aumento y activa una señal de compra. Cuando MOM0 < 0 y MOM2 < 0, indica que el impulso está en constante caída y activa una señal de venta.

El código también incluye una condición de tiempo time_cond para generar señales solo durante el intervalo de tiempo de backtesting especificado.

Análisis de ventajas

  • Capta las tendencias de cambio de precios independientemente del nivel de precios en sí, evita perseguir máximos y matar mínimos
  • El cruce del indicador de doble impulso filtra las fallas y evita señales erróneas
  • Los controles adicionales de tiempo y condiciones evitan operaciones innecesarias
  • Lógica sencilla y fácil de entender, fácil de implementar
  • Parámetros flexibles ajustables para diferentes entornos de mercado

Análisis de riesgos

  • Los indicadores de impulso tienen retraso y pueden perder puntos de inflexión
  • El cruce de dos indicadores aumenta la filtración, pero también puede perder algunas oportunidades
  • Incapaz de determinar la fuerza y la velocidad del precio hacia arriba o hacia abajo
  • Los parámetros deben seleccionarse cuidadosamente, los ajustes demasiado sensibles pueden aumentar la frecuencia comercial y el costo del deslizamiento
  • El rendimiento depende de la optimización de parámetros, los parámetros necesitan ajuste para diferentes períodos

Los riesgos pueden reducirse acortando los períodos de impulso, agregando la determinación de tendencia o configurando el stop loss.

Direcciones de optimización

  • Prueba diferentes métodos de cálculo de impulso como ROC, RSI, etc.
  • Añadir determinación de tendencias para evitar problemas en mercados variados
  • Emplear estrategias de stop loss para controlar las pérdidas de una sola operación
  • Combinar con los indicadores de volumen para garantizar el soporte de volumen
  • Introducir algoritmos de aprendizaje automático para la optimización de parámetros dinámicos
  • Estrategias de múltiples plazos para diferenciar las tendencias a corto y a largo plazo
  • Considerar estrategias de arbitraje entre mercados que utilicen relaciones de precios entre mercados

Resumen de las actividades

La estrategia de impulso sigue las tendencias de cambio de precios en lugar de los niveles de precios, identificando efectivamente las direcciones de impulso del mercado para capturar los movimientos de precios al alza y a la baja. Sin embargo, el impulso tiene características rezagadas y la selección de parámetros y la optimización de combinaciones son cruciales para el rendimiento de la estrategia.


/*backtest
start: 2022-09-25 00:00:00
end: 2023-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Momentum Strategy", overlay = false, precision = 2, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash, commission_type = strategy.commission.percent, commission_value = 0, calc_on_every_tick = true)

// Calculate start/end date and time condition
startDate  = input(timestamp("2021-01-02T00:00:00"), title = "Start Date", type = input.time)
finishDate = input(timestamp("2021-12-31T00:00:00"), title = "End Date",type = input.time)
 
time_cond  = true

i_len           =       input(defval = 12,      title = "Length",       minval = 1)
i_src           =       input(defval = close,   title = "Source")
i_percent       =       input(defval = true,    title = "Percent?")
i_mom           =       input(defval = "MOM2",  title = "MOM Choice",   options = ["MOM1", "MOM2"])

momentum(seria, length, percent) =>
	_mom        =       percent ? ( (seria / seria[length]) - 1) * 100 : seria - seria[length]
	_mom

mom0        =       momentum(i_src, i_len, i_percent)
mom1        =       momentum(mom0, 1, i_percent)
mom2        =       momentum(i_src, 1, i_percent)

momX        =       mom1

if i_mom == "MOM2"
    momX    :=     mom2

if (mom0 > 0 and momX > 0 and time_cond)
    strategy.entry("MomLE", strategy.long, stop = high + syminfo.mintick, comment = "MomLE")
else
	strategy.cancel("MomLE")
if (mom0 < 0 and momX < 0 and time_cond)
	strategy.entry("MomSE", strategy.short, stop = low - syminfo.mintick, comment = "MomSE")
else
	strategy.cancel("MomSE")

plot(mom0, color = #00bcd4, title = "MOM")
plot(mom1, color = #00FF00, title = "MOM1", display = display.none)
plot(mom2, color = #00FF00, title = "MOM2")

Más.