Estrategia de ruptura del canal de Donchian


Fecha de creación: 2023-09-14 14:44:44 Última modificación: 2023-09-14 14:44:44
Copiar: 0 Número de Visitas: 766
1
Seguir
1617
Seguidores

Principio de estrategia

La estrategia de ruptura del canal de Dongxian es una estrategia de seguimiento de tendencias basada en el canal de Dongxian. La estrategia utiliza los precios máximos y mínimos de diferentes períodos para determinar los puntos de entrada y los puntos de parada de los más altos y los más bajos.

Las reglas de entrada de la estrategia son: hacer más cuando el precio rompe el precio más alto del período especificado (por ejemplo, 20 días); hacer un hueco cuando el precio rompe el precio más bajo del período especificado (por ejemplo, 10 días).

Las reglas de EXIT son: las posiciones de más cabeza se detienen en la línea media o inferior; las posiciones de cabeza vacía se detienen en la línea media o superior. La línea media es el promedio de los precios más altos y más bajos de un período determinado (por ejemplo, 10 días).

Supongamos que la variedad de transacción es BTCUSDT, los parámetros se establecen de la siguiente manera:

  • Ciclo de ingreso múltiple: 20 días
  • Ciclo de detención de múltiples cabezas: 10 días
  • Si el tren se detuvo: Sí
  • Ciclo de ingreso sin cabeza: 10 días
  • Período de pérdida de la cabeza vacía: 20 días
  • Si el tren se detuvo: Sí

Entonces, las reglas de entrada y parada son:

  • Cuando el precio supera el máximo de 20 días, el punto de entrada de la posición excedente
  • El punto de parada de múltiples posiciones es el punto medio entre el precio más alto y el precio más bajo en 10 días
  • Cuando el precio cae por debajo de la mínima de 10 días, en el punto de entrada de la posición vacía
  • El punto de parada vacío es el punto medio entre el precio más alto y el precio más bajo en 20 días

Al ajustar dinámicamente los parámetros de los ciclos de entrada y parada, se puede optimizar en diferentes ciclos de mercado para obtener mejores ganancias en situaciones de tendencia.

Ventajas estratégicas

  • El uso de brechas para determinar la dirección de las tendencias puede ayudar a capturar las tendencias más fuertes.
  • El punto de parada está cerca del precio actual, lo que ayuda a controlar el riesgo
  • Ajuste de parámetros es flexible y se puede optimizar para diferentes ciclos

Riesgo estratégico

  • Las transacciones de ruptura son susceptibles de ser estafadas, por lo que es necesario ser cauteloso para determinar la efectividad de la ruptura.
  • El punto de parada está más cerca del precio, con una mayor probabilidad de cancelación de pérdidas en situaciones de crisis.
  • La configuración incorrecta de los parámetros puede causar juegos demasiado frecuentes o no detener los daños a tiempo

Resumir

La estrategia de ruptura del canal de Tōkyō utiliza la ruptura para determinar la dirección de la tendencia, y el punto de parada se establece como el punto medio de la vía o el tren de descenso, lo que permite controlar el riesgo de manera efectiva. A través de la configuración de parámetros optimizados, se puede mejorar la captura de la estrategia en situaciones de tendencia.

Código Fuente de la Estrategia
/*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()