Esta estrategia utiliza los cambios en los precios más altos y más bajos de las líneas K para juzgar la dirección e intensidad de la oscilación del mercado, y combina la media móvil para juzgar la tendencia general para implementar operaciones a corto plazo.
Esta estrategia primero juzga los cambios en los precios más altos y más bajos de las líneas K en relación con la línea K anterior. Si el precio más alto sube, se registra como 1. Si el precio más bajo cae, se registra como -1, de lo contrario se registra como 0. Luego, calcula el valor medio de los cambios en los precios más altos y más bajos dentro de un determinado ciclo para juzgar la dirección e intensidad de la oscilación del mercado.
Al mismo tiempo, la estrategia registra los precios más altos y más bajos en el ciclo más reciente.
La dirección de entrada está determinada por la media móvil. Ir largo por encima del carril superior y ir corto por debajo del carril inferior. Los niveles de stop loss y take profit se forman al juzgar los niveles clave de precios.
La mayor ventaja de esta estrategia es hacer pleno uso de las características de las fluctuaciones a corto plazo para obtener ganancias. Al determinar el stop loss y tomar ganancias en función de los niveles clave de precios, la estrategia se ejecuta bajo reglas claras. Al mismo tiempo, combina el juicio de tendencia para filtrar los mercados desfavorables y evitar pérdidas innecesarias.
Los principales riesgos a los que se enfrenta esta estrategia son:
No hay ganancias si el mercado no fluctúa.
Pérdidas innecesarias causadas por precios que superan el nivel de stop loss.
El juicio erróneo de la tendencia puede perder oportunidades o hacer operaciones en la dirección opuesta.
Esta estrategia puede optimizarse en los siguientes aspectos:
Ajustar el ciclo de la media móvil para adaptarlo a las características de las diferentes variedades.
Optimizar el intervalo de stop profit y stop loss para equilibrar las ganancias y pérdidas.
Añadir otros indicadores para el juicio para evitar operaciones incorrectas.
Añadir pérdida de parada automática para controlar la pérdida máxima.
En general, esta estrategia es una que aprovecha las fluctuaciones a corto plazo. Hace pleno uso de los pequeños movimientos de precios para obtener ganancias. Al mismo tiempo, controla estrictamente los riesgos y reduce las pérdidas de manera oportuna cuando la tendencia es desfavorable. Es adecuado para los inversores que buscan rendimientos estables con una actitud relativamente prudente. Con los ajustes de parámetros apropiados, puede lograr buenos resultados en mercados fluctuantes.
/*backtest start: 2024-01-16 00:00:00 end: 2024-01-16 22:45:00 period: 15m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy(title = "Noro's ZZ-3 Strategy", shorttitle = "ZZ-3 str", 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, %") corr = input(0.0, title = "Correction, %") bars = input(1, minval = 1) revers = input(false, defval = false, title = "revers") showll = input(true, defval = true, title = "Show Levels") showbg = input(false, defval = false, title = "Show Background") showar = input(false, defval = false, title = "Show Arrows") 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") //Levels hbar = 0 hbar := high > high[1] ? 1 : high < high[1] ? -1 : 0 lbar = 0 lbar := low > low[1] ? 1 : low < low[1] ? -1 : 0 uplevel = 0.0 dnlevel = 0.0 hh = highest(high, bars + 1) ll = lowest(low, bars + 1) uplevel := hbar == -1 and sma(hbar, bars)[1] == 1 ? hh + ((hh / 100) * corr) : uplevel[1] dnlevel := lbar == 1 and sma(lbar, bars)[1] == -1 ? ll - ((ll / 100) * corr) : dnlevel[1] //Lines upcol = na upcol := showll == false ? na : uplevel != uplevel[1] ? na : lime plot(uplevel, color = upcol, linewidth = 2) dncol = na dncol := showll == false ? na : dnlevel != dnlevel[1] ? na : red plot(dnlevel, color = dncol, linewidth = 2) //Background size = strategy.position_size trend = 0 trend := size > 0 ? 1 : size < 0 ? -1 : high >= uplevel ? 1 : low <= dnlevel ? -1 : trend[1] col = showbg == false ? na : trend == 1 ? lime : trend == -1 ? red : na bgcolor(col) //Arrows longsignal = false shortsignal = false longsignal := size > size[1] shortsignal := size < size[1] plotarrow(longsignal and showar and needlong ? 1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(shortsignal and showar and needshort ? -1 : na, colorup = blue, colordown = blue, transp = 0) //Trading lot = 0.0 lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1] if uplevel > 0 and dnlevel > 0 and revers == false strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if uplevel > 0 and dnlevel > 0 and revers == true strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, limit = dnlevel, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, limit = uplevel, 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()