Esta estratégia é um sistema de seguimento de tendências que combina o índice de movimento direcional (DMI) com a faixa verdadeira média (ATR). O mecanismo central usa indicadores DI + e DI- para identificar a direção e a força da tendência do mercado, ao mesmo tempo em que utiliza ATR para ajustes dinâmicos de stop-loss e take-profit. A introdução de uma média móvel de filtragem de tendências aumenta ainda mais a confiabilidade do sinal.
A estratégia baseia-se nos seguintes mecanismos essenciais:
Risco de mercado de oscilação - Pode resultar em paradas consecutivas em mercados de gama. Sugestão: adicionar indicadores de oscilação para filtragem ou ajustar limiares de parâmetros.
O risco de deslizamento - Pode enfrentar deslizamento significativo durante períodos de alta volatilidade. Sugestão: alargar adequadamente as posições de stop loss para acomodar o deslizamento.
Risco de falha de ruptura - Possíveis erros de julgamento em pontos de virada da tendência. Sugestão: Incorpore indicadores de volume para confirmação do sinal.
Sensibilidade dos parâmetros - O desempenho varia significativamente com diferentes combinações de parâmetros. Sugestão: encontrar intervalos de parâmetros estáveis através de backtesting.
Optimização do sinal - considerar a introdução do indicador ADX para avaliação da força da tendência ou adicionar mecanismos de confirmação de volume.
Gerenciamento de posições - Implementar o dimensionamento dinâmico das posições com base na força da tendência para um controlo do risco mais refinado.
Estrutura de tempo - Considere a análise de vários prazos para melhorar a confiabilidade do sinal.
Adaptabilidade ao mercado - Desenvolver mecanismos adaptativos de ajustamento dos parâmetros com base nas diferentes características dos instrumentos.
Esta estratégia alcança o seguimento de tendências dinâmicas e o controle de riscos combinando indicadores direcionais e de volatilidade. O design da estratégia enfatiza a praticidade e a operabilidade, demonstrando forte adaptabilidade do mercado. Através da otimização de parâmetros e melhorias de sinais, há espaço para maior aprimoramento.
/*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="空單止盈")