La estrategia de negociación de ruptura de canal Donchian juzga las tendencias de precios actuales calculando el canal de precios más altos y más bajos durante un cierto período y las operaciones largas y cortas basadas en las rupturas de canal.
Esta estrategia construye un canal calculando el precio más alto pmax y el precio más bajo pmin en los últimos períodos históricos.
En el caso de los vehículos de las categorías M1, M2 y M3, el valor de las emisiones de CO2 se calculará en función de las emisiones de CO2 de los vehículos de las categorías M2 y M3.
El valor de las emisiones de CO2 de los vehículos de las categorías M1 y N2 será el valor de las emisiones de CO2 de los vehículos de las categorías M2 y N3.
donde %Dev es predeterminado para 13.
Una señal larga se genera cuando el precio rompe el rieles superior. Una señal corta se genera cuando el precio rompe el rieles inferior.
La lógica específica para generar señales comerciales es:
boundup = high > yh para determinar si el carril superior está roto
bounddn = low < yl para determinar si el carril inferior está roto
upsign = sma(bounddn, 2) == 1 utiliza sma de bounddn para determinar la ruptura persistente del carril inferior
dnsign = sma(boundup, 2) == 1 utiliza sma de boundup para determinar la ruptura persistente del carril superior
Exitup = dnsign ruptura del carril superior genera la señal de salida
salidadn = ruptura de la señal superior del carril inferior genera la señal de salida
si la ruptura de la señal superior del carril inferior genera una señal larga
si la ruptura de la señal del carril superior genera una señal corta
La estrategia también establece los horarios de inicio y finalización de las operaciones para evitar posiciones overnight innecesarias.
Utiliza el canal Donchian para determinar tendencias, buenos resultados de backtest
Tiene señales largas y cortas, permite el comercio bidireccional
Utiliza SMA para filtrar señales y evitar malas operaciones
Las pérdidas de suspensión opcionales para controlar los riesgos
Establecer los horarios de inicio y de finalización de las operaciones para evitar los riesgos durante la noche
Sensible a los parámetros de historial y percentDev, necesita optimización para diferentes productos
Puede generar señales falsas en mercados de rango
No tiene en cuenta la gestión de pedidos, puede afectar a la rentabilidad en el comercio en vivo
No tiene en cuenta el tamaño de las posiciones, los riesgos de posiciones de gran tamaño
No tiene en cuenta la gestión del dinero, necesita un capital comercial razonable
Optimice los parámetros de historial y percentDev para diferentes productos
Añadir filtros para evitar señales falsas en los mercados variados
Añadir módulo de dimensionamiento de posición para controlar el tamaño de posición única
Añadir módulo de gestión de dinero para limitar el tamaño total de la posición
Añadir gestión de pedidos para una ejecución óptima de pedidos
La estrategia de ruptura de canal Donchian utiliza rupturas de canal para determinar tendencias y señales comerciales, con buenos resultados de backtest y capacidad para operar tanto largo como corto. Sin embargo, existen riesgos con respecto a la optimización de parámetros, filtros, tamaño de posición, administración de dinero, administración de pedidos, etc. Se necesitan mejoras adecuadas en estas áreas antes de una negociación estable en vivo. En general, es una estrategia tradicional de seguimiento de tendencias, y con optimizaciones puede convertirse en una estrategia comercial cuantitativa confiable.
/*backtest start: 2023-10-31 00:00:00 end: 2023-11-07 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //////////////////////////////////////////////////////////// // Copyright by AlexInc v1.0 02/07/2018 @aav_1980 // PriceChannel strategy // If you find this script helpful, you can also help me by sending donation to // BTC 16d9vgFvCmXpLf8FiKY6zsy6pauaCyFnzS // LTC LQ5emyqNRjdRMqHPHEqREgryUJqmvYhffM //////////////////////////////////////////////////////////// //@version=3 strategy("AlexInc PriceChannel Str", overlay=false) history = input(20) percentDev = input(13) capital = input(100) needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") usestoploss = input(true, defval = true, title = "Stop Loss") stoplossmult = input(3.8, defval = 3.8, minval = 1, maxval = 10, title = "Stop loss multiplicator") fromyear = input(2018, defval = 2018, 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") bodymin = min( open, close) bodymax = max(open, close) pcmax = highest(bodymax, history) pcmin = lowest(bodymin, history) yh = ((pcmax - pcmin) / 100 * (100 - percentDev)) + pcmin yl = ((pcmax - pcmin) / 100 * percentDev) + pcmin plot(pcmax) plot(pcmin) plot(yh) plot(yl) //1 bounddn = low < yl ? 1 : 0 boundup = high > yh ? 1 : 0 upsign = sma(bounddn, 2) == 1 dnsign = sma(boundup, 2) == 1 //2 //upsign = crossover(bodymin, yl) //dnsign = crossunder(bodymax , yh) exitup = dnsign exitdn = upsign lot = strategy.equity / close * capital / 100 xATR = atr(history) nLoss = usestoploss ? stoplossmult * xATR : na stop_level_long = 0.0 stop_level_long := nz(stop_level_long[1]) stop_level_short = 0.0 stop_level_short := nz(stop_level_short[1]) pos = strategy.position_size if pos >0 and pos[1] <= 0 //crossover(pos, 0.5) stop_level_long = strategy.position_avg_price - nLoss if pos < 0 and pos[1] >= 0 //crossunder(pos, -0.5) stop_level_short = strategy.position_avg_price + nLoss if pos == 0 stop_level_long = bodymin - nLoss stop_level_short = bodymax + nLoss //plot(bodymax + nLoss, color=red) //plot(bodymin - nLoss, color=red) plot(stop_level_long, color=red) plot(stop_level_short, color=red) if upsign strategy.entry("Long", strategy.long, needlong == false ? 0 : lot) if dnsign strategy.entry("Short", strategy.short, needshort == false ? 0 : na) if true strategy.close_all() //if strategy.position_size != 0 // strategy.exit("Exit Long", from_entry = "Long", stop = stop_level_long) // strategy.exit("Exit Short", from_entry = "Short", stop = stop_level_short)