La estrategia de zonas transitorias es una estrategia comercial a corto plazo basada en zonas de fluctuación de precios.
La estrategia calcula los precios más altos y más bajos de las N velas pasadas para construir una zona de fluctuación de precios.
Específicamente, la estrategia realiza un seguimiento continuo de los precios más altos y más bajos de los últimos N candeleros (parámetro ajustable N), donde:
Esto construye la zona de fluctuación de precios.
Cuando el precio de cierre del último candelabro es mayor que el precio más alto de la zona, indica que la zona ha sido penetrada, generando una señal larga; cuando el precio de cierre es menor que el precio más bajo de la zona, indica que la zona ha sido penetrada, generando una señal corta.
Además, la estrategia también incorpora filtros de color y cuerpo. El filtro de color filtra señales basadas en el color del candelabro; el filtro de cuerpo filtra señales basadas en el tamaño del cuerpo del candelabro. Esto ayuda a filtrar algunas señales falsas.
La estrategia tiene las siguientes ventajas:
La estrategia también tiene algunos riesgos:
Estos riesgos pueden reducirse ajustando los parámetros de las zonas, optimizando los filtros de señal, etc.
La estrategia se puede optimizar en varias direcciones:
La estrategia de zonas transitorias es una estrategia de comercio a corto plazo fácil de usar en general. Determina los puntos de inversión de tendencia a través de las zonas de precios y puede capitalizar rápidamente las oportunidades de mercado. También tiene algunos riesgos a tener en cuenta. Se pueden hacer mejoras adicionales mediante el ajuste y optimización de parámetros para mejorar la rentabilidad.
/*backtest start: 2023-11-28 00:00:00 end: 2023-12-28 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy("Noro's Transient Zones Strategy v1.0", shorttitle = "TZ str 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 = "Capital, %") usecol = input(true, defval = true, title = "Use Color-Filter") usebod = input(true, defval = true, title = "Use Body-Filter") h_left = input(title = "H left", defval = 10) h_right = -1 sample_period = input(title = "Sample bars for % TZ", defval = 5000) show_ptz = input(title = "Show PTZ", type = bool, defval = true) show_channel = input(title = "Show channel", type = bool, defval = true) 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") //By Jurij w/ TZ percent occurrence by SPYderCrusher //barCount = nz(barCount[1]) + 1 //check history and realtime PTZ h_left_low = lowest(h_left) h_left_high = highest(h_left) newlow = low <= h_left_low newhigh = high >= h_left_high plotshape(newlow and show_ptz, style=shape.triangledown, location=location.belowbar, color=red) plotshape(newhigh and show_ptz, style=shape.triangleup, location=location.abovebar, color=green) channel_high = plot(show_channel ? h_left_low : 0, color=silver) channel_low = plot (show_channel ? h_left_high : 0, color=silver) //check true TZ back in history central_bar_low = low[h_right + 1] central_bar_high = high[h_right + 1] full_zone_low = lowest(h_left + h_right + 1) full_zone_high = highest(h_left + h_right + 1) central_bar_is_highest = central_bar_high >= full_zone_high central_bar_is_lowest = central_bar_low <= full_zone_low plotarrow(central_bar_is_highest ? -1 : 0, offset=-h_right-1) plotarrow(central_bar_is_lowest ? 1 : 0, offset=-h_right-1) //Color Filter bar = close > open ? 1 : close < open ? -1 : 0 //Body Filter nbody = abs(close - open) abody = sma(nbody, 10) body = nbody > abody / 3 or usebod == false //Signals up1 = central_bar_is_lowest and body and (bar == -1 or usecol == false) dn1 = central_bar_is_highest and body and (bar == 1 or usecol == false) exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body //Trading lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1] if up1 if strategy.position_size < 0 strategy.close_all() strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn1 if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()