
La estrategia de inversión de seguimiento de tendencias es una estrategia de negociación de tendencias basada en promedios móviles y extremos de precios. La estrategia utiliza dos promedios móviles para seguir la tendencia de los precios y abrir posiciones invertidas cuando la tendencia se invierte. Al mismo tiempo, calcula un canal de precios basado en los precios más altos y más bajos de las líneas K más recientes y establece un stop loss cuando el precio se acerca a los límites del canal para controlar el riesgo aún más.
La estrategia utiliza un promedio móvil hma y lma de 3 puntos de longitud y un promedio móvil de 3 puntos de longitud para rastrear la tendencia de los precios. Interpreta como positivo cuando el precio sube por hma; Interpreta como negativo cuando el precio baja por lma.
La estrategia también calcula los precios máximos y mínimos dentro de la línea K de la raíz de barras más reciente en base a la trayectoria ascendente y descendente del canal de precios: uplevel y dnlevel. uplevel agrega un coeficiente de corrección corr en base al precio máximo dentro de la línea K de la raíz de barras más reciente; dnlevel resta un coeficiente de corrección corr en base al precio mínimo dentro de la línea K de la raíz de barras más reciente. Esto constituye el rango de canal de precios.
Cuando se abren más órdenes, el precio de parada es el canal de arriba; cuando se abren las órdenes vacías, el precio de parada es el canal de abajo. Esto puede controlar eficazmente el riesgo de pérdidas provocadas por la inversión de precios.
Cuando aparece una señal de reversión, la estrategia abre posiciones de reversión inmediatamente y sigue una nueva tendencia de precios. Esto es lo que se conoce como el principio de seguimiento de la reversión.
Mejoramiento:
La estrategia tiene espacio para ser optimizada aún más:
Se pueden introducir otras combinaciones de indicadores para filtrar algunas señales no válidas. Por ejemplo, MACD, KD, etc.
Se puede agregar una lógica de stop-loss adaptativa, como stop-loss móvil, stop-loss de saldo, etc., para controlar aún más el riesgo.
Se puede probar la influencia de diferentes parámetros en la eficacia de la estrategia, optimizando la combinación de parámetros, como la longitud del ciclo MA, el tamaño del coeficiente de regresión, etc.
La estrategia es actualmente para el comercio por períodos de tiempo y puede adaptarse para el comercio todo el día. Esto puede requerir otras reglas de filtración.
La estrategia en su conjunto es una estrategia de inversión de tendencias que utiliza un canal de precios combinado con un promedio móvil. Se puede seguir de manera efectiva el movimiento de los precios al seguir la tendencia y abrir posiciones de reversión a tiempo. Al mismo tiempo, los medios de control de riesgo del canal de precios y la apertura de posiciones de reversión también le permiten controlar eficazmente las pérdidas individuales.
/*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()