Esta estrategia se basa en el indicador de canal de precios. Al establecer un parámetro de impulso, calcula el valor medio de los precios más altos y más bajos en diferentes ciclos para formar la línea media del canal de precios, y establece líneas largas y cortas basadas en esto. Cuando el precio rompe la línea larga, va largo; cuando el precio rompe la línea corta, va corto. La condición final es que el precio regrese a la línea media del canal.
Esta estrategia utiliza el indicador de canal de precios para calcular el valor medio de los precios más altos y más bajos en diferentes ciclos para formar la línea media del canal. Basándose en la línea media, las líneas largas y cortas se establecen a través del parámetro de cambio.
Cuando el precio es inferior a la línea larga, abrir posiciones largas con órdenes límite; cuando el precio es superior a la línea corta, abrir posiciones cortas con órdenes límite.
La estrategia tiene las siguientes ventajas:
La estrategia también tiene algunos riesgos:
Los riesgos anteriores pueden mitigarse optimizando los parámetros, estableciendo órdenes de stop loss o combinando otros indicadores para el juicio.
La estrategia se puede optimizar en los siguientes aspectos:
La idea de diseño de esta estrategia basada en el indicador del canal de precios es clara. Usar el breakout para abrir posiciones puede controlar los riesgos de manera efectiva. Pero también hay grandes espacios de optimización de parámetros y mecanismos de stop loss que deben mejorarse. En general, la estrategia tiene un cierto valor práctico y vale la pena probar y optimizar más.
/*backtest start: 2022-11-29 00:00:00 end: 2023-12-05 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy(title = "Noro's PCMA Strategy v1.0", shorttitle = "PCMA 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %") per = input(3, title = "Length") shortlevel = input(10.0, title = "Short line (red)") longlevel = input(-5.0, title = "Long line (lime)") 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, per) l = lowest(low, per) c = (h + l) / 2 ll = c + ((c / 100) * longlevel) sl = c + ((c / 100) * shortlevel) //Lines shortcolor = needshort ? red : na longcolor = needlong ? lime : na plot(sl, linewidth = 2, color = shortcolor, title = "Short line") plot(c, linewidth = 2, color = blue, title = "SMA line") plot(ll, linewidth = 2, color = longcolor, title = "Long line") //Trading size = strategy.position_size lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] if (not na(close[per])) and size == 0 and needlong strategy.entry("L", strategy.long, lot, limit = ll, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if (not na(close[per])) and size == 0 and needshort strategy.entry("S", strategy.short, lot, limit = sl, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if (not na(close[per])) and size > 0 strategy.entry("Close", strategy.short, 0, limit = c, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if (not na(close[per])) and size < 0 strategy.entry("Close", strategy.long, 0, limit = c, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all()