Indice de movimiento direccional Estrategia de negociación bidireccional

El autor:¿ Qué pasa?, Fecha: 2023-12-19 14:13:52
Las etiquetas:

img

Resumen general

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.

Principio de la estrategia

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:

  1. Cuando DI+ - DI- > 3, se hace largo
  2. Cuando el DI- - DI+ > 3 sea corto

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.

Análisis de ventajas

Las principales ventajas de esta estrategia son las siguientes:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

Análisis de riesgos

También hay algunos riesgos con esta estrategia:

  1. 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.

  2. 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.

  3. 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:

  1. Combinar la media móvil y otros indicadores para filtrar las señales DI

  2. Ajustar los parámetros límite basados en los resultados de las pruebas de retroceso

  3. Combine el volumen, el MACD, etc. para determinar si la inversión de tendencia

Direcciones de optimización

La estrategia se puede optimizar aún más de las siguientes maneras:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Resumen de las actividades

En resumen, esta estrategia es relativamente simple y práctica. Utiliza el cálculo de DI para determinar la dirección del mercado; filtra las señales a través de parámetros límite; admite el comercio bidireccional o solo largo / corto; permite establecer un marco de tiempo de negociación. Las principales ventajas son la alta fiabilidad y el filtrado eficaz de señales. También tiene problemas como señales incorrectas y configuraciones de parámetros. Podemos mejorarlo combinando otros indicadores, estableciendo stop-loss / beneficio, ajustando parámetros, etc., o optimizándolo dinámicamente con aprendizaje automático. En general, es adecuado como indicador direccional para combinarse con otras estrategias para obtener resultados decentes.


/*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()

Más.