La estrategia de dinámica es una estrategia de negociación basada en la tendencia de los cambios de precios. La estrategia determina la tendencia del movimiento de los precios mediante el cálculo de los cambios de precios en un período determinado, y luego genera una señal de negociación.
La estrategia determina la dinámica de los precios mediante el cálculo de los cambios en los precios de cierre durante un período determinado. En concreto, se calcula el cambio en los precios de cierre con respecto a los precios de cierre antes de N períodos.
Primero se calcula el primer indicador de movimiento MOM0, cuya fórmula es:
MOM0 = CLOSE - CLOSE[N]
Entre ellos, CLOSE indica el precio de cierre del ciclo actual,[N] representa el precio de cierre antes de N períodos. Así, MOM0>0 representa el aumento del precio de cierre antes de N períodos en relación con el ciclo actual, y MOM0 representa la caída del precio de cierre antes de N períodos en relación con el ciclo actual.
Luego se calcula el segundo indicador de potencia MOM1, con la fórmula:
MOM1 = MOM0 - MOM0[1]
Es decir, calcular el valor de MOM0 del ciclo actual menos el valor del ciclo anterior. MOM1>0 indica que MOM0 subió, MOM1 indica que MOM0 bajó.
Al mismo tiempo, se calcula el tercer indicador de potencia MOM2, con la fórmula:
MOM2 = CLOSE - CLOSE[1]
Es decir, se calcula el precio de cierre del ciclo actual menos el precio de cierre del ciclo anterior. MOM2>0 significa que el precio de cierre ha aumentado, MOM2 significa que el precio de cierre ha disminuido.
Cuando MOM0>0 y MOM1>0, indica que el impulso continúa subiendo, produciendo una señal de compra; cuando MOM0 y MOM2, indica que el impulso continúa bajando, produciendo una señal de venta.
El código también añade la condición de tiempo time_second, que sólo generará una señal de transacción dentro del período de tiempo de retracción establecido. Además, antes de colocar la orden, verifique una vez más si la condición sigue vigente, para evitar que la señal desaparezca.
Se puede reducir el riesgo mediante la reducción de los ciclos de volumen, la introducción de un juicio de tendencia o la configuración de un stop loss. También se puede considerar la inclusión de un indicador de volumen de transacción para hacer filtraciones.
La estrategia de dinámica puede determinar la dirección de los puntos calientes del mercado y aprovechar las oportunidades de subida y bajada de los precios al seguir la tendencia de los cambios en los precios en lugar de los precios en sí mismos. Sin embargo, la dinámica tiene un retraso, la selección de parámetros y la optimización de la combinación son fundamentales para la eficacia 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")