Esta estrategia calcula el índice de movimiento direccional (DI) de las materias primas y lo combina con parámetros límite para implementar el comercio de doble dirección.
El indicador central de esta estrategia es el índice de movimiento direccional (DI).
El valor de las emisiones de gases de efecto invernadero se calculará en función de las emisiones de gases de efecto invernadero. El valor de las emisiones de gases de efecto invernadero se calculará en función de las emisiones de gases de efecto invernadero.
Donde DM+ representa el Movimiento Direccional Positivo, DM- representa el Movimiento Direccional Negativo. El True Range representa la volatilidad reciente calculando el valor máximo del precio más alto, el precio más bajo y el precio de cierre del día anterior durante tres días.
Según la definición de DI, cuando DI+ > DI-, significa que el impulso del mercado actual es más fuerte, perteneciente a un mercado alcista; cuando DI- > DI+, significa que el impulso bajista es más fuerte que el impulso bajista, perteneciente a un mercado bajista.
Esta estrategia utiliza esta característica y establece un parámetro límite. Cuando DI + es mayor que DI- por un parámetro límite, determina que el mercado actual es un mercado alcista y va largo. Cuando DI- es mayor que DI + por un parámetro límite, determina que el mercado actual es un mercado bajista y va corto.
Por ejemplo, si el parámetro límite está fijado en 3, las reglas específicas de negociación son:
Dado que a menudo hay pequeñas diferencias fluctuantes entre DI+ y DI-, el establecimiento de un parámetro límite puede filtrar algunas operaciones sin una direccionalidad significativa y reducir las operaciones innecesarias.
Las principales ventajas de esta estrategia son las siguientes:
DI es fiable para juzgar la orientación del mercado
DI juzga directamente las tendencias del mercado calculando el poder de los toros y los osos.
El parámetro límite puede filtrar eficazmente las señales
El parámetro límite filtra las pequeñas fluctuaciones sin una direccionalidad significativa, seleccionando solo las secciones con una direccionalidad significativa para el comercio, evitando quedar atrapados.
Lograr el comercio bidireccional automatizado
Las posiciones largas y cortas se pueden cambiar automáticamente en función del indicador DI sin necesidad de juicio manual, lo que reduce la dificultad de negociación.
Cuadro de tiempo de negociación personalizable
Apoya la configuración para operar solo dentro de un rango de fechas personalizable y cerrar todas las posiciones automáticamente después, flexible y conveniente.
Solo se puede seleccionar largo o corto
A través de los interruptores largos y cortos, solo se pueden seleccionar señales unidireccionales para implementar estrategias largas o cortas adecuadas para diferentes entornos de mercado.
También hay algunos riesgos con esta estrategia:
Posibilidad de que el DI dé señales erróneas
El DI puede dar señales erróneas a corto plazo cuando se producen fluctuaciones drásticas del mercado, lo que conduce a operaciones fallidas.
Configuración incorrecta de los parámetros límite
La configuración incorrecta de los parámetros de límite alto o bajo puede dar lugar a muy pocas o demasiadas señales de negociación. Los parámetros deben ajustarse según el mercado.
No se puede determinar el punto final de la tendencia
El DI sólo puede determinar la dirección actual de la tendencia y no puede juzgar si la tendencia ha terminado o se ha invertido.
Las soluciones para los riesgos incluyen:
Combinar la media móvil y otros indicadores para filtrar las señales DI
Ajustar los parámetros límite basados en los resultados de las pruebas de retroceso
Combine el volumen, el MACD, etc. para determinar si la inversión de tendencia
La estrategia se puede optimizar aún más de las siguientes maneras:
Combinar otros indicadores de evaluación de tendencias como el perfil de mercado
La combinación de indicadores como el Perfil de mercado, que también juzga intuitivamente la potencia corta larga con DI, puede mejorar la precisión del juicio.
Añadir estrategias de stop-profit y stop-loss
El establecimiento de un stop-profit, un stop-loss temporal o porcentual puede bloquear los beneficios y reducir las pérdidas.
Ajuste de los parámetros para productos específicos
El ajuste de los parámetros límite y los tiempos de negociación de acuerdo con las diferentes características del producto puede mejorar el rendimiento de la estrategia.
Optimización dinámica mediante aprendizaje automático
Aplicación de algoritmos de aprendizaje por refuerzo para optimizar dinámicamente la configuración de parámetros basados en señales en vivo.
En resumen, esta estrategia es relativamente simple y práctica. Utiliza el cálculo de DI
/*backtest start: 2022-12-12 00:00:00 end: 2023-12-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Noro's DI Strategy", overlay = false, 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 = 10000, title = "Capital, %") len = input(title="Length", defval=14) limit = input(3, title = "limit, %") fromyear = input(1900, defval = 1900, 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") //DI TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1]))) DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0 DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0 SmoothedTrueRange = 0.0 SmoothedDirectionalMovementPlus = 0.0 SmoothedDirectionalMovementMinus = 0.0 SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 //Trend trend = 0 trend := DIPlus > DIMinus + limit ? 1 : DIPlus < DIMinus - limit ? -1 : trend[1] //Background col = trend == 1 ? lime : red bgcolor(col, transp = 80) //Lines plot(DIPlus, color=lime, title="DI+", linewidth = 3) plot(DIMinus, color=red, title="DI-", linewidth = 3) //Trading size = strategy.position_size lot = 0.0 lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1] if trend == 1 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 trend == -1 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) strategy.close_all()