La estrategia de ruptura del canal Donchian es una estrategia de seguimiento de tendencias. Forma un canal de precios calculando los precios más altos y más bajos durante un cierto período de tiempo y utiliza los límites del canal como señales de compra y venta.
Esta estrategia utiliza el indicador del canal de Donchian para determinar las tendencias de precios y calcular los puntos de entrada y salida. El canal de Donchian consiste en un tren superior, un tren inferior y un tren medio.
Los períodos de entrada y salida se pueden configurar de forma independiente. Cuando el precio rompe el carril inferior hacia arriba, va largo. Cuando el precio rompe el carril superior hacia abajo, va corto. El punto de salida es cuando el precio toca el carril correspondiente nuevamente. El carril medio también se puede usar como una línea de stop loss.
Además, la estrategia también establece un punto de toma de ganancias. El precio de toma de ganancias para las posiciones largas es el precio de entrada multiplicado por (1 + porcentaje de toma de ganancias), y viceversa para las posiciones cortas.
En resumen, al juzgar la tendencia, esta estrategia asegura suficiente espacio para establecer paradas y obtener ganancias.
Las ventajas de esta estrategia incluyen:
Los riesgos de esta estrategia incluyen:
Para mitigar los riesgos anteriores:
Esta estrategia puede optimizarse aún más en las siguientes dimensiones:
En conclusión, la estrategia de ruptura del canal Donchian proporciona señales claras y riesgos controlables para el comercio de tendencias. Es especialmente adecuado para activos volátiles como las criptomonedas con un gran potencial de ganancia. También hay posibilidades de optimizar aún más los parámetros e incorporar otros indicadores, que son vías para mejoras futuras.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © algotradingcc // Strategy testing and optimisation for free trading bot //@version=4 strategy("Donchian Channel Strategy [for free bot]", overlay=true ) //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()