Esta estrategia utiliza el indicador del canal de Donchian para rastrear de forma adaptativa las tendencias del mercado para el comercio de tendencias.
Calcular el máximo máximo y el mínimo mínimo durante un cierto período para formar el canal de Donchian.
Abre una posición larga cuando el precio se rompe por encima de la banda superior del canal.
Después de abrir posiciones, el stop loss sigue la línea media del canal.
Cortar pérdidas y cerrar posiciones cuando el precio vuelve a caer en el canal.
La estrategia utiliza el canal Donchian para determinar la dirección de la tendencia y capturar rápidamente las rupturas.
El uso de la línea media del canal para detener la pérdida protege los beneficios.
El objetivo de ganancia se amplifica de acuerdo con el porcentaje de ganancia definido por el usuario.
Se adapta a las diferentes condiciones del mercado, como la consolidación, la ruptura, el retroceso, etc., y ajusta de manera flexible el tamaño de las posiciones.
Lógica comercial simple y clara, fácil de entender y dominar.
La estrategia sólo opera con breakouts y no puede manejar eficazmente la consolidación.
Existe el riesgo de falsas señales de ruptura, otros indicadores necesarios para la verificación.
El establecimiento inadecuado del stop loss y del take profit puede dar lugar a una salida prematura o a un beneficio insuficiente.
La configuración incorrecta del período del canal afecta la precisión de las señales comerciales.
El tamaño excesivo de las posiciones amplifica los riesgos de fluctuación del mercado.
Existen riesgos de interrupción inesperados del robot, asegurando la fiabilidad del sistema.
Agregue indicadores de volumen para evitar perseguir falsos brotes.
Aumentar los filtros de indicadores de tendencia para mejorar la precisión de la señal de entrada.
Optimizar los algoritmos dinámicos de stop loss y take profit.
Ajustar la estrategia de posicionamiento en función de las condiciones del mercado en tiempo real.
Investigación durante la noche y datos previos al mercado para un mejor momento de entrada.
Prueba diferentes períodos de parámetros para encontrar combinaciones óptimas.
Añadir la validación del modelo para evitar el sobreajuste.
En general, esta es una estrategia de seguimiento de tendencias adaptativa simple y práctica. Tiene ventajas como capturar rápidamente las rupturas de tendencia y proteger las ganancias. También tiene desventajas como la ineficacia durante la consolidación y las pérdidas por rupturas falsas. Las mejoras futuras consisten en incorporar más filtrado de señales, stop loss / take profit dinámico, para adaptarse a más condiciones de mercado.
/*backtest start: 2022-10-19 00:00:00 end: 2023-10-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2020 //@version=4 strategy(title = "Noro's Donchian Strategy", shorttitle = "Donchian str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") tp = input(defval = 10, minval = 1, title = "Take profit") lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %") pclen = input(50, minval = 1, title = "Price Channel Length") showll = input(true, defval = true, title = "Show lines") showbg = input(false, defval = false, title = "Show Background") showof = input(true, defval = true, title = "Show Offset") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Price Channel h = highest(high, pclen) l = lowest(low, pclen) center = (h + l) / 2 tpl = h * (100 + tp) / 100 tps = l * (100 - tp) / 100 //Lines tpcol = showll ? color.lime : na pccol = showll ? color.blue : na slcol = showll ? color.red : na offset = showof ? 1 : 0 plot(tpl, offset = offset, color = tpcol, title = "TP Long") plot(h, offset = offset, color = pccol, title = "Channel High") plot(center, offset = offset, color = slcol, title = "Cannel Center") plot(l, offset = offset, color = pccol, title = "Channel Low") plot(tps, offset = offset, color = tpcol, title = "TP Short") //Background size = strategy.position_size bgcol = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na bgcolor(bgcol, transp = 70) //Trading truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59) lot = 0.0 lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1] mo = 0 mo := strategy.position_size != 0 ? 0 : high >= center and low <= center ? 1 : mo[1] if h > 0 strategy.entry("Long", strategy.long, lot, stop = h, when = strategy.position_size <= 0 and needlong and truetime and mo) strategy.exit("TP Long", "Long", limit = tpl, stop = center) strategy.entry("Short", strategy.short, lot, stop = l, when = strategy.position_size >= 0 and needshort and truetime and mo) strategy.exit("TP Short", "Short", limit = tps, stop = center) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all() strategy.cancel("Long") strategy.cancel("Short")