Estrategia de salida del Canal de Donchian

El autor:¿ Qué pasa?, Fecha: 14 de septiembre de 2023 14:44:44
Las etiquetas:

Estrategia lógica

La estrategia de ruptura del canal de Donchian es una estrategia de seguimiento de tendencias basada en el canal de Donchian.

Las reglas de entrada son: ir largo cuando el precio se rompe por encima del máximo más alto durante un período de observación (por ejemplo, 20 días), y ir corto cuando el precio se rompe por debajo del mínimo más bajo durante otro período de observación (por ejemplo, 10 días).

Las reglas de EXIT son: las posiciones largas se detienen en la banda media o inferior del canal; las posiciones cortas se detienen en la banda media o superior.

Por ejemplo, el comercio de BTCUSDT con los siguientes parámetros:

  • Período de revisión de entradas largo: 20 días
  • Periodo de recuperación de pérdidas de parada larga: 10 días
  • Pérdida de parada en la banda media: Sí
  • Período de revisión de las entradas: 10 días
  • Periodo de recuperación de pérdidas de parada corta: 20 días
  • Pérdida de parada en la banda media: Sí

Las reglas de entrada y parada serían:

  • Ir largo cuando el precio se rompe por encima del máximo de 20 días
  • Las pérdidas de suspensión largas en el punto medio de los máximos y mínimos de 10 días
  • Ir corto cuando el precio se rompe por debajo de los mínimos de 10 días
  • Las pérdidas de parada corta en el punto medio de los máximos y mínimos de 20 días

Al ajustar dinámicamente los períodos de retroceso, la estrategia se puede optimizar a través de los ciclos de mercado para capturar tendencias con una mejor relación beneficio/riesgo.

Ventajas

  • Las rupturas pueden identificar la dirección de la tendencia desde el principio
  • Detener pérdidas cercanas al precio ayuda a gestionar el riesgo
  • Los parámetros flexibles permiten la optimización para diferentes ciclos

Los riesgos

  • Los brotes son propensos a las flechas, necesitan confirmar su validez.
  • Las pérdidas de cierre susceptibles de sacudidas en mercados agitados
  • La mala regulación de los parámetros podría llevar a un exceso de operaciones o a paradas insuficientes

Resumen de las actividades

La ruptura del canal Donchian utiliza las rupturas para identificar tendencias, con puntos medios/bandas del canal como paradas para controlar el riesgo. La optimización de los períodos de retroceso puede mejorar la captura de tendencias en movimientos fuertes. Sin embargo, se necesita precaución sobre la validez de la ruptura y las sacudidas. En general, esta estrategia es adecuada para el comercio de tendencias a medio y largo plazo, pero puede tener dificultades en mercados agitados.


/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Donchian Channel Strategy", overlay=true, default_qty_type= strategy.percent_of_equity, initial_capital = 1000, default_qty_value = 20, commission_type=strategy.commission.percent, commission_value=0.036)

//Long optopns
buyPeriodEnter = input(10, "Channel Period for Long enter position")
buyPeriodExit = input(10, "Channel Period for Long exit position")
isMiddleBuy = input(true, "Is exit on Base Line? If 'no' - exit on bottom line")
takeProfitBuy = input(2.5, "Take Profit (%) for Long position")
isBuy = input(true, "Allow Long?")

//Short Options
sellPeriodEnter = input(20, "Channel Period for Short enter position")
sellPeriodExit = input(20, "Channel Period for Short exit position")
isMiddleSell = input(true, "Is exit on Base Line? If 'no' - exit on upper line")
takeProfitSell = input(2.5, "Take Profit (%) for Short position")
isSell = input(true, "Allow Short?")

// Test Start
startYear = input(2005, "Test Start Year")
startMonth = input(1, "Test Start Month")
startDay = input(1, "Test Start Day")
startTest = timestamp(startYear,startMonth,startDay,0,0)

//Test End
endYear = input(2050, "Test End Year")
endMonth = input(12, "Test End Month")
endDay = input(30, "Test End Day")
endTest = timestamp(endYear,endMonth,endDay,23,59)

timeRange = time > startTest and time < endTest ? true : false

// Long&Short Levels
BuyEnter = highest(buyPeriodEnter)
BuyExit = isMiddleBuy ? ((highest(buyPeriodExit) + lowest(buyPeriodExit)) / 2): lowest(buyPeriodExit)

SellEnter = lowest(sellPeriodEnter)
SellExit = isMiddleSell ? ((highest(sellPeriodExit) + lowest(sellPeriodExit)) / 2): highest(sellPeriodExit)

// Plot Data
plot(BuyEnter, style=plot.style_line, linewidth=2, color=color.blue, title="Buy Enter")
plot(BuyExit, style=plot.style_line, linewidth=1, color=color.blue, title="Buy Exit", transp=50)
plot(SellEnter, style=plot.style_line, linewidth=2, color=color.red, title="Sell Enter")
plot(SellExit, style=plot.style_line, linewidth=1, color=color.red, title="Sell Exit", transp=50)

// Calc Take Profits
TakeProfitBuy = 0.0
TakeProfitSell = 0.0
if strategy.position_size > 0
    TakeProfitBuy := strategy.position_avg_price*(1 + takeProfitBuy/100)
    
if strategy.position_size < 0
    TakeProfitSell := strategy.position_avg_price*(1 - takeProfitSell/100)

// Long Position    
if isBuy and timeRange
    strategy.entry("Long", strategy.long, stop = BuyEnter, when = strategy.position_size == 0) 
    
strategy.exit("Long Exit", "Long", stop=BuyExit, limit = TakeProfitBuy, when = strategy.position_size > 0)

// Short Position
if isSell and timeRange
    strategy.entry("Short", strategy.short, stop = SellEnter, when = strategy.position_size == 0) 
    
strategy.exit("Short Exit", "Short", stop=SellExit, limit = TakeProfitSell, when = strategy.position_size < 0)

// Close & Cancel when over End of the Test
if time > endTest
    strategy.close_all()
    strategy.cancel_all()


Más.