
La estrategia utiliza los cambios en los precios más altos y más bajos de la línea K para determinar la dirección y la intensidad de las oscilaciones del mercado, combinadas con la línea media para determinar la tendencia general, lo que permite operar en línea corta. Se aplica principalmente a las variedades en las que las oscilaciones son más evidentes.
La estrategia comienza por determinar el cambio de los precios máximos y mínimos de la línea K con respecto a la línea K anterior, y si el precio máximo sube, se marca como 1, si el precio mínimo baja, se marca como 1, o se marca como 0. Luego calcula el promedio de los cambios de los precios máximos y mínimos en un período determinado, respectivamente, para determinar la dirección y la fuerza de las oscilaciones del mercado.
Al mismo tiempo, la estrategia registra los precios más altos y más bajos en el período más reciente. Cuando la línea media determina un cambio de tendencia, los precios registrados se combinan para determinar el nivel de precios clave, formando niveles de stop loss y stop loss.
La dirección de entrada se determina de acuerdo a la línea media, los más altos se compran en la parte superior del carril y los vacíos se venden en la parte inferior. Los niveles de stop loss y stop loss se forman a través de la determinación de los precios clave.
La mayor ventaja de esta estrategia es aprovechar al máximo las características de la oscilación de las líneas cortas para obtener ganancias. Al determinar el nivel de precios clave, se forma un stop loss, lo que hace que la estrategia funcione bajo reglas claras. Al mismo tiempo, se combina con el juicio de tendencias para filtrar las acciones desfavorables y evitar pérdidas innecesarias.
La estrategia enfrenta los siguientes riesgos:
Si las cosas no cambian, no se puede ganar.
Si el precio supera el límite de pérdidas, se producen pérdidas innecesarias. Se puede flexibilizar adecuadamente el límite de pérdidas.
Se puede ajustar adecuadamente el parámetro de la línea media.
La estrategia puede ser optimizada en los siguientes aspectos:
Ajustar el ciclo de la línea media a las características de las diferentes variedades.
Optimización del rango de parada y pérdidas para equilibrar ganancias y pérdidas.
Añadir otros indicadores de juicio para evitar errores de operación.
Aumentar el Stop Loss automático y controlar las pérdidas máximas.
En general, la estrategia es una estrategia que aprovecha las características de la oscilación de la línea corta. Aprovecha al máximo el pequeño rango de funcionamiento del precio para obtener ganancias. Al mismo tiempo, controla rigurosamente el riesgo y se detiene a tiempo cuando la tendencia es desfavorable.
/*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()