La Estrategia de Momentum es una estrategia de comercio a corto plazo que utiliza tanto el impulso de precios como los indicadores de tendencia. La estrategia utiliza el precio de cierre, el precio de apertura, el canal de precios, el RSI rápido y otros indicadores para generar señales comerciales. Establecerá posiciones largas o cortas cuando surjan breakouts de precios o señales de indicadores. También establece condiciones de stop loss para forzar la liquidación cuando las pérdidas alcanzan un cierto nivel.
La estrategia toma decisiones comerciales basadas principalmente en los siguientes indicadores de juicio:
Canal de precios: Calcula los precios más altos y más bajos de los últimos 30 candelabros para determinar el rango del canal. El precio de cierre por encima del punto medio del canal se considera alcista. El precio de cierre por debajo del punto medio del canal se considera bajista.
RSI rápido: Calcula el valor del RSI de las últimas 2 velas. RSI por debajo de 25 se considera sobreventa y RSI por encima de 75 se considera sobrecomprado.
Línea Yin Yang: Calcula el tamaño de la entidad de las últimas 2 velas. Dos velas rojas sugieren una señal bajista mientras que dos velas verdes sugieren una señal alcista.
Condición de suspensión de pérdidas: obligar a liquidar cuando las pérdidas alcancen un cierto porcentaje para limitar las pérdidas.
Con las señales combinadas de los indicadores de tendencia, impulso y sobrecompra/sobreventa, esta estrategia a corto plazo puede identificar efectivamente las reversiones y generar señales comerciales oportunas.
Las ventajas de esta estrategia incluyen:
Mejora de la precisión de la señal mediante la combinación de múltiples indicadores, lo que ayuda a filtrar las señales falsas.
Respuestas más rápidas a los puntos de inflexión debido al uso del RSI rápido, que es más sensible que el RSI regular.
Alta fiabilidad en diferentes productos y plazos, gracias a la rigurosa optimización de parámetros durante las pruebas de retroceso.
Mecanismo automático de stop loss para controlar las pérdidas potenciales más allá de las expectativas.
Algunos riesgos de esta estrategia:
La configuración incorrecta de los parámetros del canal de precios puede causar choques. Los canales que son demasiado estrechos pueden desencadenar falsas rupturas.
El tiempo de mantenimiento de la posición unilateral puede ser demasiado largo durante tendencias fuertes, superando las proyecciones.
El ajuste incorrecto del punto de stop loss puede aumentar las pérdidas.
Podemos mitigar y reducir estos riesgos ajustando los parámetros del canal, optimizando el tiempo de entrada, ajustando dinámicamente los puntos de stop loss, etc.
Algunas direcciones en las que la estrategia puede optimizarse aún más:
Incorporar algoritmos de aprendizaje automático para lograr la optimización automática de parámetros, mejorando la adaptabilidad.
Combine más fuentes de datos como noticias para mejorar las decisiones comerciales y la precisión de la señal.
Desarrollar mecanismos dinámicos de dimensionamiento de posiciones basados en las condiciones del mercado para controlar mejor los riesgos.
Ampliar la aplicabilidad al comercio de arbitraje de futuros para aumentar aún más los rendimientos absolutos.
Esta estrategia combina varias técnicas, incluida la ruptura de precios, la señal de indicador, el stop loss, etc. Ha demostrado una buena estabilidad y rendimiento en backtests y operaciones en vivo.
/*backtest start: 2023-11-23 00:00:00 end: 2023-11-30 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Price Channel Strategy v1.2", shorttitle = "Price Channel str 1.2", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 100000, title = "capital, %") uset = input(true, defval = true, title = "Use trend entry") usect = input(true, defval = true, title = "Use counter-trend entry") usersi = input(true, defval = true, title = "Use RSI strategy") pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel Period") showcl = input(true, defval = true, title = "Price Channel") fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") src = close //Price channel lasthigh = highest(src, pch) lastlow = lowest(src, pch) center = (lasthigh + lastlow) / 2 trend = low > center ? 1 : high < center ? -1 : trend[1] col = showcl ? blue : na col2 = showcl ? black : na plot(lasthigh, color = col2, linewidth = 2) plot(lastlow, color = col2, linewidth = 2) plot(center, color = col, linewidth = 2) //Bars bar = close > open ? 1 : close < open ? -1 : 0 rbars = sma(bar, 2) == -1 gbars = sma(bar, 2) == 1 //Fast RSI fastup = rma(max(change(src), 0), 2) fastdown = rma(-min(change(src), 0), 2) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Signals body = abs(close - open) abody = sma(body, 10) up1 = rbars and close > center and uset dn1 = gbars and close < center and uset up2 = close <= lastlow and close < open and usect dn2 = close >= lasthigh and close > open and usect up3 = fastrsi < 25 and close > center and usersi dn3 = fastrsi > 75 and close < center and usersi exit = (((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2) lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1] //Trading if up1 or up2 or up3 if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn1 or dn2 or dn3 if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()