Esta estrategia combina el índice de movimiento direccional (DMI) y el promedio móvil para identificar la dirección de la tendencia y generar señales comerciales.
La estrategia se basa en dos indicadores principales:
DMI, incluyendo DMI+ y DMI-, se utiliza para identificar la existencia y dirección de una tendencia. Cuando DMI+ está por encima de DMI-, una tendencia alcista está presente. Cuando DMI- está por encima de DMI+, una tendencia bajista está presente.
El promedio móvil, generalmente fijado en 15 a 50 días, se utiliza para determinar la dirección de la tendencia del precio.
La estrategia primero calcula el DMI+, el DMI- y el promedio móvil. Cuando el DMI muestra un estado de tendencia (DMI+ por encima del DMI- o viceversa) y el promedio móvil confirma la dirección, se genera una señal comercial.
Cuando el DMI+ se cruza por encima del DMI- y el precio se cruza por encima del MA, vaya largo.
Cuando el DMI- cruza por encima del DMI+ y el precio cruza por debajo del MA, sea corto.
También se incluye una opción de entrada inversa.
La combinación de un indicador de tendencia como el DMI y un indicador de tendencia como el promedio móvil puede mejorar la confiabilidad de la señal mediante la utilización de los puntos fuertes de ambos.
La ventaja de DMI es su rápida identificación de tendencias emergentes. El promedio móvil ayuda a filtrar el ruido y confirmar la dirección de la tendencia.
La opción inversa también añade flexibilidad para operar con o contra la tendencia.
Los principales riesgos de esta estrategia son:
Las señales erróneas pueden ocurrir alrededor de las transiciones de tendencia, lo que conduce a pérdidas.
La formación de tendencias requiere tiempo. Mientras tanto, las fluctuaciones de precios pueden generar señales falsas. El alargamiento de los períodos DMI y MA puede filtrar este ruido.
El comercio de inversión tiene mayores riesgos de pérdida en movimientos adversos.
Los parámetros deben ser re-optimizados para diferentes productos y marcos de tiempo.
Las posibles optimizaciones para esta estrategia incluyen:
Prueba de diferentes períodos de media móvil para encontrar el mejor ajuste para las transiciones de tendencia.
Prueba de los períodos de suavización del DMI para filtrar las inversiones cortas dentro de las tendencias.
Evaluación del efecto de la opción inversa frente a la tendencia de impago, siguiendo las pruebas de retroceso históricas para elegir el mejor enfoque.
Incorporar estrategias de stop como trailing stops, time stops o breakout stops para limitar el tamaño de la pérdida.
Evaluar el rendimiento de los parámetros en diferentes productos y plazos y optimizar los parámetros.
Añadiendo filtros como RSI para evitar señales falsas en extremos localizados.
Esta estrategia combina los puntos fuertes del DMI de seguimiento de tendencias y los indicadores de promedio móvil para entrar en tendencias temprano, evitando los golpes en los mercados agitados. La opción inversa también agrega flexibilidad.
/*backtest start: 2023-08-28 00:00:00 end: 2023-09-27 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 03/03/2017 // The related article is copyrighted material from Stocks & Commodities Aug 2009 // // You can change long to short in the Input Settings // Please, use it only for learning or paper trading. Do not for real trading. //////////////////////////////////////////////////////////// strategy(title="Combining DMI And Moving Average For A EUR/USD Trading System") Length_MA = input(30, minval=1) Length_DMI = input(14, minval=1) reverse = input(false, title="Trade reverse") xMA = sma(close, Length_MA) up = change(high) down = -change(low) trur = rma(tr, Length_DMI) xPDI = fixnan(100 * rma(up > down and up > 0 ? up : 0, Length_DMI) / trur) xNDI = fixnan(100 * rma(down > up and down > 0 ? down : 0, Length_DMI) / trur) nPDI = xPDI nNDI = xNDI nMA = xMA nPDI_1 = xPDI[1] nNDI_1 = xNDI[1] nMA_1 = xMA[1] bMDILong =iff(nPDI > nNDI and nPDI_1 < nNDI_1, true, iff(nPDI < nNDI and nPDI_1 > nNDI_1, false, false)) bMDIShort = iff(nPDI > nNDI and nPDI_1 < nNDI_1, false, iff(nPDI < nNDI and nPDI_1 > nNDI_1, true, false)) bMALong = iff(close > nMA and close[1] < nMA_1, true, iff(close < nMA and close[1] > nMA_1, false, false)) bMAShort = iff(close > nMA and close[1] < nMA_1, false, iff(close < nMA and close[1] > nMA_1, true, false)) pos = iff(bMDILong and bMALong, 1, iff(bMDIShort and bMAShort, -1, nz(pos[1], 0))) possig = iff(reverse and pos == 1, -1, iff(reverse and pos == -1, 1, pos)) if (possig == 1 ) strategy.entry("Long", strategy.long) if (possig == -1 ) strategy.entry("Short", strategy.short) barcolor(possig == -1 ? red: possig == 1 ? green : blue ) plot(nPDI, color=green, title="DMI Plus") plot(nNDI, color=red, title="DMI Minus")