La estrategia utiliza una combinación de promedios móviles rápidos y promedios móviles lentos para determinar la dirección de la tendencia, generando una señal de negociación cuando la línea rápida rompe la línea lenta, perteneciendo a un sistema de negociación de doble promedio móvil.
La estrategia utiliza un promedio móvil rápido de menor longitud y un promedio móvil lento de mayor longitud.
La MA lenta se utiliza para determinar la dirección de la tendencia principal. Cuando el precio está por encima de la MA, se determina como una tendencia alcista; cuando el precio está por debajo de la MA, se determina como una tendencia descendente.
En una tendencia alcista, si una MA rápida se cruza con una MA lenta, produce una señal de compra; en una tendencia bajista, si una MA rápida se cruza con una MA lenta, produce una señal de venta.
Una vez que se produce la señal de negociación, se puede elegir si se establece el punto de parada para seguir el seguimiento de la parada.
La combinación de MA rápida y lenta es eficaz para identificar tendencias.
La MA rápida puede generar señales de negociación más sensibles.
La MA lenta elimina el ruido del mercado para evitar falsas brechas.
Se pueden elegir varios algoritmos MA, como EMA, DEMA, etc.
Se puede activar una estrategia de stop loss para seguir el stop loss.
MA tiene problemas de retraso, que pueden causar retraso en la señal. Se pueden probar parámetros más sensibles.
El punto de parada puede estar demasiado cerca, causando daños por la ruptura. Se debe dejar espacio para la fluctuación adecuadamente.
Sin tener en cuenta el volumen de transacciones, existe el riesgo de manipulación de precios. Se puede agregar la confirmación de volumen de transacciones.
La probabilidad de que se produzca una señal falsa solo se basa en el indicador. Se puede agregar otros factores para confirmar.
Dificultad de optimización de parámetros. Se puede usar optimización progresiva o algoritmos genéticos para encontrar los parámetros óptimos.
Prueba diferentes parámetros del algoritmo MA para encontrar el mejor.
Estudiar la adaptación de las medias móviles para mejorar la sensibilidad.
Añadir otros indicadores o factores para optimizar la filtración de la señal.
Establecer un mecanismo dinámico de detención de pérdidas para que sea más flexible.
Optimizar las estrategias de gestión de fondos, como ajustar las posiciones en función de la dinámica de ATR.
La estrategia utiliza el doble MA para generar señales de negociación, se puede configurar el riesgo de limitación de pérdidas. Su lógica de negociación es simple y clara, pero hay dificultades para elegir los parámetros. Se puede mejorar mediante la optimización de parámetros, el filtrado de indicadores y la estrategia de detención de pérdidas, para que la estrategia sea más estable y fiable.
/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "Noro's Trend MAs Strategy v1.7", shorttitle = "Trend MAs str 1.7", 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, %")
type = input(7, defval = 7, minval = 1, maxval = 7, title = "Type of Slow MA")
src = input(close, defval = close, title = "Source of Slow MA")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
len = input(20, 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?")
needarr = input(false, defval = false, title = "Need entry arrows?")
fastsma = ema(src, fastlen)
//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)
//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3
//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2)
kama = nz(kama[1]) + nsmooth * (src - nz(kama[1]))
//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2
//Trend
ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0
trend = low > ma and low[1] > ma[1] and low[2] > ma[2] ? 1 : high < ma and high[1] < ma[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
//Signals
min = min(open, close)
max = max(open, close)
up = trend == 1 and (low < fastsma or usefastsma == false) and redbars == 1 ? 1 : 0
dn = trend == -1 and (high > fastsma or usefastsma == false) and greenbars == 1 ? 1 : 0
//Lines
colorfastsma = usefastsma == true ? red : na
plot(fastsma, color = colorfastsma, title = "Fast MA")
plot(ma, color = blue, linewidth = 3, transp = 0, title = "Slow MA")
//Arrows
plotarrow(up == 1 and needarr == true ? 1 : 0, colorup = black, colordown = black, transp = 0)
plotarrow(dn == 1 and needarr == true ? -1 : 0, colorup = black, colordown = black, transp = 0)
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 90)
//Alerts
alertcondition(up == 1, title='buy', message='Uptrend')
alertcondition(dn == 1, title='sell', message='Downtrend')
//Trading
stoplong = up == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]
longCondition = up == 1
if (longCondition)
strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
strategy.exit("Stop Long", "Long", stop = stoplong)
shortCondition = dn == 1
if (shortCondition)
strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
strategy.exit("Stop Short", "Short", stop = stopshort)