Se trata de una estrategia de seguimiento de tendencias basada en el indicador del canal de Donchian, combinada con un stop loss dinámico basado en el indicador ATR para obtener ganancias. Pertenece a la categoría de estrategia de seguimiento de tendencias.
La estrategia utiliza un canal de Donchian de 20 períodos, donde la línea media del canal es el promedio del más alto y el más bajo mínimo. Va largo cuando el precio cruza por encima de la línea media del canal y va corto cuando el precio cruza por debajo de la línea media. La regla de salida es cuando el precio toca la línea de stop loss dinámica, que se calcula como el mínimo de las 3 barras recientes menos un tercio del valor ATR para posiciones largas, y el máximo de las 3 barras recientes más un tercio del valor ATR para posiciones cortas.
Las principales ventajas de esta estrategia son las siguientes:
Los principales riesgos de esta estrategia incluyen:
Algunas direcciones de optimización para esta estrategia:
En resumen, esta es una estrategia de seguimiento de tendencias simple y práctica. Identifica la dirección de la tendencia a través del canal Donchian y bloquea las ganancias con un stop loss dinámico, que puede seguir efectivamente las tendencias.
/*backtest start: 2023-11-29 00:00:00 end: 2023-12-06 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title = "dc", overlay = true) atrLength = input(title="ATR Length:", defval=20, minval=1) testStartYear = input(2017, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testEndYear = input(2018, "Backtest Start Year") testEndMonth = input(12) testEndDay = input(31, "Backtest Start Day") testPeriodEnd = timestamp(testEndYear,testEndMonth,testEndDay,0,0) testPeriod() => true //time >= testPeriodStart ? true : false dcPeriod = input(20, "Period") dcUpper = highest(close, dcPeriod)[1] dcLower = lowest(close, dcPeriod)[1] dcAverage = (dcUpper + dcLower) / 2 atrValue=atr(atrLength) useTakeProfit = na useStopLoss = na useTrailStop = na useTrailOffset = na //@version=1 Buy_stop = lowest(low[1],3) - atr(20)[1] / 3 plot(Buy_stop, color=red, title="buy_stoploss") Sell_stop = highest(high[1],3) + atr(20)[1] / 3 plot(Sell_stop, color=green, title="sell_stoploss") plot(dcLower, style=line, linewidth=3, color=red, offset=1) plot(dcUpper, style=line, linewidth=3, color=aqua, offset=1) plot(dcAverage, color=black, style=line, linewidth=3, title="Mid-Line Average") strategy.entry("simpleBuy", strategy.long, when=(close > dcAverage) and cross(close,dcAverage)) strategy.close("simpleBuy",when= ( close< Buy_stop)) strategy.entry("simpleSell", strategy.short,when=(close < dcAverage) and cross(close,dcAverage) ) strategy.close("simpleSell",when=( close > Sell_stop)) //strategy.exit("Exit simpleBuy", from_entry = "simpleBuy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset) //strategy.exit("Exit simpleSell", from_entry = "simpleSell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)