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.
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
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.
Los riesgos pueden reducirse acortando los períodos de impulso, agregando la determinación de tendencia o configurando el stop loss.
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")