Estrategia de entrada de contacto del canal de Donchian contraria con pausa de pérdida después de la parada y pérdida de parada posterior

El autor:¿ Qué pasa?, Fecha: 2024-01-24 15:07:18
Las etiquetas:

img

Resumen general

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.

Estrategia lógica

La estrategia utiliza el canal Donchian de 20 períodos, compuesto por la banda superior, la banda inferior y la línea media.

Lógico de entrada

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.

Deje de perder y obtenga beneficios

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)

Pérdida de detención de seguimiento

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.

Ventajas

  1. Captura los movimientos de tendencia usando las escapadas del Canal Donchian.

  2. La entrada contraria al tacto se alinea con el comercio en contra de la idea de tendencia.

  3. Gestión eficaz del riesgo con parada de pérdida y parada de seguimiento.

  4. Normas claras y fáciles de aplicar.

Los riesgos

  1. Las sacas en los mercados laterales para un sistema de seguimiento de tendencias.

  2. El stop loss fijo podría ser propenso a ser detenido prematuramente.

  3. Un ajuste demasiado agresivo podría acabar con las operaciones rentables demasiado pronto.

  4. La optimización de parámetros es crucial.

Oportunidades de mejora

  1. Optimice el período de búsqueda del canal Donchian para obtener los mejores parámetros.

  2. Incorporar reglas de dimensionamiento de la posición, por ejemplo, restablecer el recuento de pausas periódicamente.

  3. Añadir filtros con otros indicadores para evitar errores.

  4. Experimento con el stop loss dinámico.

Resumen de las actividades

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)


Más.