La Contrarian Donchian Channel Touch Entry Strategy es una estrategia de trading cuantitativa basada en el indicador Donchian Channel. Incorpora una pausa de stop loss y un trailing stop loss para la gestión del riesgo.
La estrategia entra en posiciones largas / cortas cuando el precio toca la banda superior / inferior del canal de Donchian. Los niveles de stop loss y take profit se establecen para cada operación. Después de un stop loss hit, habría una pausa de varias barras antes de tomar una nueva operación en la misma dirección.
La estrategia utiliza el canal Donchian de 20 períodos, compuesto por la banda superior, la banda inferior y la línea media.
Ir largo cuando el precio toca la banda inferior; ir corto cuando el precio toca la banda superior.
Se requiere una pausa (por ejemplo, 3 barras) después de un stop loss anterior en la misma dirección para evitar perseguir tendencias.
Para cada operación, establecer un porcentaje fijo de stop loss (por ejemplo, 22%) y una rentabilidad dinámica calculada sobre la base de la relación riesgo-recompensación (por ejemplo, 2)
Utilice un stop loss trasero durante las operaciones:
Para las operaciones largas, si el precio cruza por encima de la línea media, ajuste el stop loss al punto medio del precio de entrada y la línea media.
Por el contrario, para las posiciones cortas que cruzan por debajo de la línea media.
Captura los movimientos de tendencia usando las escapadas del Canal Donchian.
La entrada contraria al tacto se alinea con el comercio en contra de la idea de tendencia.
Gestión eficaz del riesgo con parada de pérdida y parada de seguimiento.
Normas claras y fáciles de aplicar.
Las sacas en los mercados laterales para un sistema de seguimiento de tendencias.
El stop loss fijo podría ser propenso a ser detenido prematuramente.
Un ajuste demasiado agresivo podría acabar con las operaciones rentables demasiado pronto.
La optimización de parámetros es crucial.
Optimice el período de búsqueda del canal Donchian para obtener los mejores parámetros.
Incorporar reglas de dimensionamiento de la posición, por ejemplo, restablecer el recuento de pausas periódicamente.
Añadir filtros con otros indicadores para evitar errores.
Experimento con el stop loss dinámico.
La Contrarian Donchian Channel Touch Entry Strategy integra la identificación de tendencias, la gestión de riesgos y más.
/*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)