La estrategia de inversión de tendencia es una estrategia de negociación de tendencia basada en promedios móviles y extremos de precios. La estrategia utiliza dos promedios móviles para rastrear las tendencias de precios y abre posiciones inversas cuando las tendencias se invierten. Al mismo tiempo, también calcula un canal de precios basado en los precios más altos y más bajos de las líneas K recientes para detener la pérdida cuando los precios se acercan a los límites del canal, controlando aún más los riesgos.
La estrategia utiliza promedios móviles de puntos altos y bajos de 3 períodos hma y lma para rastrear las tendencias de los precios.
La estrategia también calcula los rieles superiores e inferiores (uplevel y dnlevel) del canal de precios en función de los precios más altos y más bajos dentro de las barras recientes K-líneas. uplevel es el precio más alto en las barras recientes K-líneas más un coeficiente de retroceso hacia arriba; dnlevel es el precio más bajo en las barras recientes K-líneas menos un coeficiente de retroceso hacia abajo. Esto constituye el rango del canal de precios.
Cuando se abren posiciones largas, el precio de stop loss se establece en el carril superior del canal; cuando se abren posiciones cortas, el precio de stop loss se establece en el carril inferior del canal.
Cuando aparece una señal de reversión, la estrategia invertirá inmediatamente las posiciones abiertas para seguir la nueva tendencia del precio.
Mejoras:
Hay espacio para una mayor optimización:
Se pueden introducir otros indicadores para filtrar algunas señales no válidas, como el MACD, el KD, etc.
Se puede añadir una lógica de stop loss adaptativa, como movimiento de stop loss, balance stop loss, etc., para controlar aún más los riesgos.
Prueba el impacto de diferentes parámetros en el rendimiento de la estrategia y optimiza las combinaciones de parámetros, como las longitudes de los ciclos de MA, los tamaños de los coeficientes de retroceso, etc.
La estrategia se negocia actualmente en sesiones cronometradas. También se puede ajustar a la negociación durante todo el día. Esto puede requerir reglas de filtrado adicionales.
En resumen, esta es una estrategia de inversión de tendencia que combina canales de precios y promedios móviles. Al rastrear las tendencias y las posiciones de apertura inversa oportunas, puede seguir efectivamente los movimientos de precios. Al mismo tiempo, las medidas de control de riesgos de los canales de precios y la apertura inversa también le permiten controlar eficazmente las pérdidas individuales. La idea de la estrategia es simple y clara, y vale la pena probar y optimizar más en el comercio en vivo.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=3 strategy(title = "Noro's 3Bars Strategy by Larry Williams", shorttitle = "3Bars", 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") showos = input(true, defval = true, title = "Show Levels one side") showcl = input(false, defval = false, title = "Show Levels continuous line") 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") len = input(3) hma = sma(high, len) lma = sma(low, len) plot(hma) plot(lma) //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] //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) //Lines upcol = na upcol := showll == false ? na : uplevel != uplevel[1] and showcl == false ? na : showos and trend[1] == 1 ? na : lime plot(uplevel, color = upcol, linewidth = 2) dncol = na dncol := showll == false ? na : dnlevel != dnlevel[1] and showcl == false ? na : showos and trend[1] == -1 ? na : red plot(dnlevel, color = dncol, linewidth = 2) //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) strategy.entry("Long stop", strategy.short, 0, stop = lma) strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel) strategy.entry("Short stop", strategy.long, 0, stop = hma) // if time > timestamp(toyear, tomonth, today, 23, 59) // strategy.close_all()