Estrategia de las zonas transitorias

El autor:¿ Qué pasa?, Fecha: 2023-12-29 17:03:27
Las etiquetas:

img

Resumen general

La estrategia de zonas transitorias es una estrategia comercial a corto plazo basada en zonas de fluctuación de precios.

Estrategia lógica

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:

  • Precio más bajo = punto más bajo en N candeleros pasados
  • Precio más alto = punto más alto en N candeleros pasados

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.

Ventajas

La estrategia tiene las siguientes ventajas:

  1. Captura las zonas de precios y determina los puntos de reversión de tendencia para entradas largas/cortas precisas
  2. Los filtros de color y el cuerpo ayudan a filtrar señales falsas
  3. Lógica de estrategia simple y clara, fácil de entender y ajustar parámetros
  4. Muchos parámetros ajustables permiten optimizar la estrategia

Los riesgos

La estrategia también tiene algunos riesgos:

  1. La configuración inadecuada de los parámetros puede provocar un exceso de negociación y tarifas altas
  2. Las configuraciones incorrectas del rango de zona pueden generar demasiadas señales falsas de fuga
  3. Poca capacidad de predicción de la zona de precios durante las violentas oscilaciones del mercado
  4. Incapaz de manejar las brechas de precios

Estos riesgos pueden reducirse ajustando los parámetros de las zonas, optimizando los filtros de señal, etc.

Direcciones de optimización

La estrategia se puede optimizar en varias direcciones:

  1. Ajuste dinámico del rango de la zona de precios en lugar de N candeleros fijos
  2. Incorporar una lógica de stop loss para limitar las pérdidas
  3. Optimizar los parámetros del filtro para mejorar la calidad de la señal
  4. Añadir lógica para manejar las brechas de precios
  5. Combine varios marcos de tiempo para juzgar las señales y evitar trampas

Conclusión

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()

Más.