Esta estrategia utiliza una combinación de líneas medias rápidas y lentas para determinar la dirección de la tendencia, para capturar tendencias de líneas medias y largas para realizar operaciones de tendencia. Hacer más cuando se cruza la media lenta en la línea media rápida y hacer un hueco cuando se cruza la media lenta por debajo de la línea media rápida es una estrategia típica de seguimiento de tendencias.
La estrategia se basa principalmente en la línea de avance para determinar la tendencia del mercado. En concreto, la estrategia utiliza una línea de avance rápida de 5 ciclos y una línea de avance lenta de 21 ciclos.
Cuando la línea de media rápida cruza la línea de media lenta, la estrategia hace un cambio de tendencia en el mercado, y la estrategia hará más en la siguiente apertura de la línea K. Cuando la línea de media rápida cruza la línea de media lenta, la estrategia hace un cambio de tendencia en el mercado, y la estrategia hará hueco en la siguiente apertura de la línea K.
Además, la estrategia también establece el parámetro de la barra de barras para filtrar falsas rupturas. El valor predeterminado de este parámetro es 2, es decir, la línea media rápida requiere 2 líneas K consecutivas sobre la línea media lenta para emitir más señales y poder filtrar falsas rupturas de manera efectiva.
Para las criptomonedas, la estrategia también incluye la lógica de juicio de extremo. La señal de negociación se emite solo cuando la línea media rápida y la línea media lenta se encuentran simultáneamente en la zona extrema. Esto también es para evitar más falsos brechas.
Las reglas de salida estratégica son simples y directas: cuando el precio dispara el punto de parada, se retira de la posición actual.
El riesgo puede reducirse de la siguiente manera:
La estrategia puede ser optimizada en los siguientes aspectos:
Se pueden probar más combinaciones para encontrar los parámetros de la línea media más adecuados para el mercado actual. Por ejemplo, ajustar la línea rápida a 10 ciclos y la línea lenta a 50 ciclos.
Se pueden probar otros indicadores como MACD, KDJ, etc., para establecer condiciones más estrictas y evitar falsas brechas.
La entrada actual es demasiado simple y depende de la línea media, que se puede optimizar de la siguiente manera:
Se pueden probar otras formas de detener el deterioro, como el seguimiento de los estancamientos con el precio, para evitar que los estancamientos se activen demasiado pronto.
Cuando la posición se detiene, se puede volver a entrar, lo que reduce la posibilidad de que se detenga fuera de la tendencia.
Esta estrategia es una estrategia de seguimiento de tendencias básica, la idea central es simple y directa, utiliza la dirección de la tendencia de juicio de doble equilátero, y el stop loss móvil para controlar el riesgo. La ventaja es que es fácil de entender y implementar, se puede seguir la tendencia para obtener ganancias, y el riesgo también puede ser controlado. Pero al mismo tiempo, hay algunas deficiencias, la señal es inexacta en el mercado de liquidación, y el stop loss es fácil de desencadenar demasiado pronto.
/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "Noro's Trend MAs Strategy v2.3", shorttitle = "Trend MAs str 2.3", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)
//Settings
needlong = input(true, "long")
needshort = input(true, "short")
needstops = input(false, "stops")
stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
slowlen = input(21, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
needbg = input(false, defval = false, title = "Need trend Background?")
needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)")
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")
src = close
//PriceChannel 1
lasthigh = highest(src, slowlen)
lastlow = lowest(src, slowlen)
center = (lasthigh + lastlow) / 2
//PriceChannel 2
lasthigh2 = highest(src, fastlen)
lastlow2 = lowest(src, fastlen)
center2 = (lasthigh2 + lastlow2) / 2
//Trend
trend = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend[1]
//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0
//Fast RSI
fastup = rma(max(change(close), 0), 2)
fastdown = rma(-min(change(close), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
//CryptoBottom
mac = sma(close, 10)
len = abs(close - mac)
sma = sma(len, 100)
max = max(open, close)
min = min(open, close)
//Signals
up1 = trend == 1 and (low < center2 or usefastsma == false) and redbars == 1
dn1 = trend == -1 and (high > center2 or usefastsma == false) and greenbars == 1
up2 = high < center and high < center2 and bar == -1 and needex
dn2 = low > center and low > center2 and bar == 1 and needex
up3 = close < open and len > sma * 3 and min < min[1] and fastrsi < 10 ? 1 : 0
//Lines
plot(center2, color = red, linewidth = 3, transp = 0, title = "Fast MA")
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)
//Trading
stoplong = up1 == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn1 == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]
if up1 or up2 or up3
strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
strategy.exit("Stop Long", "Long", stop = stoplong)
if dn1
strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
strategy.exit("Stop Short", "Short", stop = stopshort)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()