Esta estrategia permite el comercio bidireccional de mercancías mediante el cálculo del índice de movimiento de la mercancía (DI) y la combinación de parámetros de restricción. Hacer más cuando el DI+ es mayor que el DI- un parámetro de restricción y hacer menos cuando el DI- es mayor que el DI+ un parámetro de restricción.
El indicador central de la estrategia es el índice de tendencia ((DI) ≠ DI calculado por la siguiente fórmula:
DI + = (DM + / verdadero rango) * 100 DI- = (DM- / verdadero rango) por 100
El DM+ representa el movimiento de las carteras y el DM- representa el movimiento de las carteras. El rango real representa la amplitud de las fluctuaciones recientes mediante el cálculo del máximo valor de los máximos, mínimos y precios de cierre de ayer durante tres días.
De acuerdo con la definición de DI, cuando DI+ > DI- indica que la fuerza de cabecera es mayor que la fuerza de cabecera, pertenece al mercado de cabecera; cuando DI- > DI+ indica que la fuerza de cabecera es mayor que la fuerza de cabecera, pertenece al mercado de cabecera.
La estrategia utiliza esta característica para establecer un parámetro de restricción. Cuando el DI+ es mayor que el DI- un parámetro de restricción, se considera que el mercado está lleno de tiendas, hacer más; cuando el DI- es mayor que el DI+ un parámetro de restricción, se considera que el mercado está vacío, hacer vacío.
Por ejemplo, si el parámetro de restricción se establece en 3, entonces las reglas de transacción específicas son:
Como a menudo hay una menor oscilación de diferencia entre DI+ y DI-, la configuración de parámetros de restricción puede filtrar algunas señales de negociación sin una orientación obvia, reduciendo las transacciones innecesarias, que es una ventaja de esta estrategia.
La estrategia tiene las siguientes ventajas:
El DI determina el movimiento de la bolsa de valores de manera más directa mediante el cálculo de las fuerzas de las dos partes del mercado, sin algoritmos complejos como la adaptación de la curva, y la teoría es simple y confiable.
Al limitar los parámetros de filtración sin fluctuaciones de menor magnitud de dirección evidente, solo seleccione los segmentos de mercado con una dirección evidente para operar y evitar ser apisonado.
El posicionamiento multi-vacío se puede cambiar automáticamente según el indicador DI, sin necesidad de juicio manual, lo que reduce la dificultad de las transacciones.
La configuración de soporte solo opera en el rango de fechas personalizadas, eliminación automática de la posición al final, flexibilidad y conveniencia.
Con el interruptor de espacio múltiple, solo se puede seleccionar una señal unidireccional, para realizar solo hacer más o solo hacer vacío, para adaptarse a diferentes entornos de mercado.
La estrategia también tiene sus riesgos:
Cuando hay una gran volatilidad en el mercado, el DI puede emitir señales erróneas a corto plazo, lo que lleva al fracaso de la operación. Se requiere una combinación de otros indicadores para su verificación.
Si los parámetros de restricción se establecen demasiado grandes o demasiado pequeños, pueden dar lugar a demasiadas o pocas señales de negociación, por lo que es necesario ajustar los parámetros según el mercado.
El DI solo puede determinar la dirección de la tendencia actual, no puede determinar si la tendencia termina o se invierte, y requiere la combinación de otros indicadores.
Las soluciones para los riesgos incluyen:
Indicadores como el promedio móvil se combinan para filtrar las señales DI
Ajuste de los parámetros de restricción de acuerdo con los resultados de la medición
En combinación con Volumes, MACD, etc., para determinar si la tendencia se ha invertido
La estrategia puede seguir optimizándose en los siguientes aspectos:
Indicadores más intuitivos para juzgar la fuerza aérea, como el mapa de la lluvia de la opinión pública, se pueden combinar con el DI para mejorar la precisión de los juicios.
Establezca un punto de parada móvil, un punto de parada de tiempo o de tasa para bloquear las ganancias y reducir las pérdidas.
Ajustar los parámetros de restricción y el tiempo de negociación de acuerdo con las características comerciales de las diferentes variedades puede mejorar la eficacia de la estrategia.
Aplicación de técnicas como el aprendizaje por refuerzo y configuración de parámetros de optimización de la señal en disco.
La estrategia en su conjunto es sencilla y práctica. Utiliza el método de cálculo de DI para determinar la dirección de la tendencia; limita las señales de filtración de parámetros; puede realizar operaciones bidireccionales, o solo puede hacer más o nada; soporta la configuración de los períodos de operación. La principal ventaja es la alta fiabilidad y la señal de filtración efectiva.
/*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()