A Contrarian Donchian Channel Touch Entry Strategy é uma estratégia quantitativa de negociação baseada no indicador Donchian Channel.
A estratégia entra em posições longas / curtas quando o preço toca a faixa superior / inferior do canal de Donchian. Os níveis de stop loss e take profit são definidos para cada negociação. Após um stop loss, haveria uma pausa por um número de barras antes de tomar um novo comércio na mesma direção.
A estratégia utiliza o canal de Donchian de 20 períodos, composto por banda superior, banda inferior e linha média.
Vá longo quando o preço tocar a faixa inferior; vá curto quando o preço tocar a faixa superior.
É necessária uma pausa (por exemplo, 3 barras) após uma parada de perda anterior na mesma direção para evitar a perseguição de tendências.
Para cada operação, fixar uma percentagem fixa de stop loss (por exemplo, 22%) e um take profit dinâmico calculado com base na relação risco/recompensa (por exemplo, 2)
Usar um stop loss final durante as negociações:
Para as transações longas, se o preço cruzar acima da linha média, ajuste o stop loss para o ponto médio do preço de entrada e da linha média.
Por outro lado, para posições curtas que cruzam abaixo da linha média.
Apanhe os movimentos de tendência usando as fugas do canal Donchian.
A entrada contrária do toque alinha-se com a negociação contra a ideia de tendência.
Gestão eficaz do risco com pausa de stop loss e trailing stop.
Regras claras e fáceis de aplicar.
Fusões nos mercados laterais para um sistema de tendência.
O stop loss fixo pode ser propenso a ser parado prematuramente.
Um ajuste de parada de atraso agressivo pode acabar com negócios lucrativos muito cedo.
A otimização dos parâmetros é crucial.
Otimizar o período de observação do canal de Donchian para melhores parâmetros.
Incorporar regras de dimensionamento da posição, por exemplo, reiniciar periodicamente a contagem de pausas.
Adicionar filtros usando outros indicadores para evitar falsas rupturas.
Experimento com stop loss dinâmico.
A Contrarian Donchian Channel Touch Entry Strategy integra a identificação de tendências, gerenciamento de riscos e muito mais.
/*backtest start: 2023-01-17 00:00:00 end: 2024-01-23 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Contrarian Donchian Channel Strategy - Touch Entry with Post-SL Pause and Trailing Stop", overlay=true, default_qty_value=0.01, default_qty_type=strategy.percent_of_equity) // Inputs length = input(20, minval=1, title="Donchian Channel Length") riskRewardRatio = input(2, title="Risk/Reward Ratio") stopLossPercent = input(0.22, title="Stop Loss (%)") / 100 pauseCandles = input(3, minval=1, title="Pause After SL (Candles)") // Donchian Channel Calculation upper = highest(high, length) lower = lowest(low, length) centerline = (upper + lower) / 2 // Calculating the Centerline // Plotting Donchian Channel and Centerline plot(upper, color=color.red, title="Upper Band") plot(lower, color=color.green, title="Lower Band") plot(centerline, color=color.blue, title="Centerline") // Tracking Stop Loss Hits and Pause var longSLHitBar = 0 var shortSLHitBar = 0 var int lastTradeDirection = 0 // 1 for long, -1 for short, 0 for none // Update SL Hit Bars if (strategy.position_size[1] > 0 and strategy.position_size == 0) if (close[1] < strategy.position_avg_price[1]) longSLHitBar := bar_index lastTradeDirection := 1 if (strategy.position_size[1] < 0 and strategy.position_size == 0) if (close[1] > strategy.position_avg_price[1]) shortSLHitBar := bar_index lastTradeDirection := -1 // Entry Conditions - Trigger on touch longCondition = (low <= lower) and (bar_index - longSLHitBar > pauseCandles or lastTradeDirection != 1) shortCondition = (high >= upper) and (bar_index - shortSLHitBar > pauseCandles or lastTradeDirection != -1) // Trade Execution if (longCondition) strategy.entry("Long", strategy.long) if (shortCondition) strategy.entry("Short", strategy.short) // Initial Stop Loss and Take Profit Calculation stopLoss = strategy.position_avg_price * (1 - stopLossPercent) takeProfit = strategy.position_avg_price * (1 + stopLossPercent * riskRewardRatio) // Trailing Stop Loss Logic var float trailingStopLong = na var float trailingStopShort = na // Update Trailing Stop for Long Position if (strategy.position_size > 0) if (close > centerline) trailingStopLong := (strategy.position_avg_price + centerline) / 2 stopLoss := na(trailingStopLong) ? stopLoss : max(trailingStopLong, stopLoss) // Update Trailing Stop for Short Position if (strategy.position_size < 0) if (close < centerline) trailingStopShort := (strategy.position_avg_price + centerline) / 2 stopLoss := na(trailingStopShort) ? stopLoss : min(trailingStopShort, stopLoss) // Setting Stop Loss and Take Profit for each trade strategy.exit("SL_TP_Long", "Long", stop=stopLoss, limit=takeProfit) strategy.exit("SL_TP_Short", "Short", stop=stopLoss, limit=takeProfit)