Esta estrategia es un sistema de seguimiento de tendencias que combina el índice de movimiento direccional (DMI) con el rango verdadero promedio (ATR). El mecanismo principal utiliza indicadores DI + y DI- para identificar la dirección y la fuerza de la tendencia del mercado, mientras que utiliza ATR para ajustes dinámicos de stop-loss y take-profit. La introducción de un promedio móvil de filtrado de tendencias mejora aún más la fiabilidad de la señal.
La estrategia se basa en los siguientes mecanismos fundamentales:
El riesgo de mercado de oscilación - Puede dar lugar a paradas consecutivas en los mercados de rango. Sugerencia: añadir indicadores de oscilación para filtrar o ajustar los umbrales de los parámetros.
El riesgo de deslizamiento - Puede sufrir un deslizamiento significativo durante los períodos de alta volatilidad. Sugerencia: Ampliar adecuadamente las posiciones de stop-loss para acomodar el deslizamiento.
El riesgo de ruptura falsa es el riesgo de error potencial en los puntos de inflexión de la tendencia. Sugerencia: Incorpore indicadores de volumen para confirmar la señal.
Sensibilidad de parámetros: el rendimiento varía significativamente con diferentes combinaciones de parámetros. Sugerencia: Encuentre rangos de parámetros estables mediante backtesting.
Optimización de la señal: considere introducir el indicador ADX para la evaluación de la fuerza de la tendencia o agregar mecanismos de confirmación de volumen.
Gestión de posiciones - Implementar un dimensionamiento dinámico de las posiciones basado en la fuerza de la tendencia para un control del riesgo más refinado.
Estructura de tiempo - Considere el análisis de marcos de tiempo múltiples para mejorar la confiabilidad de la señal.
Adaptabilidad al mercado - Desarrollar mecanismos de ajuste de parámetros adaptativos basados en las diferentes características de los instrumentos.
Esta estrategia logra un seguimiento dinámico de tendencias y control de riesgos mediante la combinación de indicadores direccionales y de volatilidad. El diseño de la estrategia enfatiza la practicidad y operabilidad, demostrando una fuerte adaptabilidad del mercado. A través de la optimización de parámetros y las mejoras de la señal, hay espacio para una mayor mejora. Se aconseja a los inversores que prueben a fondo y hagan ajustes específicos basados en las características del mercado antes de la implementación.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-04 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("使用 DI+ 和 DI- 的策略 (最終完整修正且含圖表止損止盈線)", overlay=true) // 輸入參數 diLength = input.int(title="DI 長度", defval=14) adxSmoothing = input.int(title="ADX Smoothing", defval=14) trendFilterLength = input.int(title="趨勢過濾均線長度", defval=20) strengthThreshold = input.int(title="趨勢強度門檻值", defval=20) atrLength = input.int(title="ATR 長度", defval=14) atrMultiplierStop = input.float(title="ATR 停損倍數", defval=1.5) atrMultiplierTakeProfit = input.float(title="ATR 止盈倍數", defval=2.5) // 計算 DI+ 和 DI- [diPlus, diMinus, _] = ta.dmi(diLength, adxSmoothing) // 計算趨勢過濾均線 trendFilterMA = ta.sma(close, trendFilterLength) // 判斷趨勢方向和強度 strongUpTrend = diPlus > diMinus + strengthThreshold and close > trendFilterMA strongDownTrend = diMinus > diPlus + strengthThreshold and close < trendFilterMA // 計算 ATR atr = ta.atr(atrLength) // 追蹤止損止盈價格 (使用 var 宣告,只在進場時更新) var float longStopPrice = na var float longTakeProfitPrice = na var float shortStopPrice = na var float shortTakeProfitPrice = na // 進場邏輯 longCondition = strongUpTrend shortCondition = strongDownTrend if (longCondition) strategy.entry("多單", strategy.long) longStopPrice := close - atr * atrMultiplierStop // 進場時計算並更新止損價 longTakeProfitPrice := close + atr * atrMultiplierTakeProfit // 進場時計算並更新止盈價 if (shortCondition) strategy.entry("空單", strategy.short) shortStopPrice := close + atr * atrMultiplierStop // 進場時計算並更新止損價 shortTakeProfitPrice := close - atr * atrMultiplierTakeProfit // 進場時計算並更新止盈價 // 出場邏輯 (使用 time 限制和 ATR) inLongPosition = strategy.position_size > 0 inShortPosition = strategy.position_size < 0 lastEntryTime = strategy.opentrades.entry_bar_index(strategy.opentrades - 1) if (inLongPosition and time > lastEntryTime) strategy.exit("多單出場", "多單", stop=longStopPrice, limit=longTakeProfitPrice) if (inShortPosition and time > lastEntryTime) strategy.exit("空單出場", "空單", stop=shortStopPrice, limit=shortTakeProfitPrice) // 繪製 DI+、DI- 和趨勢過濾均線 plot(diPlus, color=color.green, title="DI+") plot(diMinus, color=color.red, title="DI-") plot(trendFilterMA, color=color.blue, title="趨勢過濾均線") // 繪製止損止盈線 (使用 plot 函數繪製) plot(strategy.position_size > 0 ? longStopPrice : na, color=color.red, style=plot.style_linebr, linewidth=2, title="多單停損") plot(strategy.position_size > 0 ? longTakeProfitPrice : na, color=color.green, style=plot.style_linebr, linewidth=2, title="多單止盈") plot(strategy.position_size < 0 ? shortStopPrice : na, color=color.red, style=plot.style_linebr, linewidth=2, title="空單停損") plot(strategy.position_size < 0 ? shortTakeProfitPrice : na, color=color.green, style=plot.style_linebr, linewidth=2, title="空單止盈")