En la carga de los recursos... Cargando...

Versión extrema de la estrategia de promedios móviles de tendencia de Noro

El autor:¿ Qué pasa?, Fecha: 2024-01-31 17:00:53
Las etiquetas:

img

Resumen general

Esta estrategia utiliza dos indicadores de promedio móvil para identificar la dirección de la tendencia y las oportunidades largas / cortas.

Estrategia lógica

  1. Calcular dos promedios móviles: un MA más lento con el período 21 para determinar la tendencia general y un MA más rápido con el período 5 que se combina con el canal de precios para encontrar oportunidades comerciales.

  2. Compruebe si el precio actual rompe el canal de precios formado en el período anterior.

  3. Cuenta el número y la dirección de las velas recientes. Por ejemplo, varias velas bajistas consecutivas pueden indicar una oportunidad larga, mientras que las velas alcistas consecutivas pueden indicar una oportunidad corta.

  4. Combine todos los factores anteriores para generar señales largas / cortas. Una señal se activa cuando el movimiento del precio se alinea con la dirección de la tendencia de MA más lenta, el MA rápido o el canal de precios produce una señal y el movimiento de la vela coincide con la condición.

Ventajas

  1. El sistema de medias móviles dobles rastrea efectivamente la dirección de la tendencia.

  2. Un MA más rápido y un canal de precios combinados detectan puntos de ruptura tempranos para aprovechar las oportunidades comerciales.

  3. También considera la dirección del candelero y cuenta para evitar quedar atrapado por las inversiones del mercado.

  4. Los parámetros de MA personalizables funcionan para diferentes productos y plazos.

Riesgos y mitigaciones

  1. Los MAs dobles pueden producir señales falsas durante los mercados laterales.

  2. Todavía existe el riesgo de quedar atrapado en movimientos excepcionales del mercado.

  3. Es imposible evitar completamente las inversiones, pero seguiremos mejorando la lógica y los parámetros para hacer la estrategia más robusta.

Oportunidades de mejora

  1. Agregue indicadores de apoyo como ADX, MACD para evitar operaciones equivocadas en mercados agitados.

  2. Calculación dinámica de pérdidas de detención, por ejemplo, basada en ATR y preferencia de riesgo.

  3. Optimización de parámetros mediante aprendizaje automático para capacidad adaptativa.

  4. Parámetros de ajuste preciso basados en las características del instrumento, por ejemplo, períodos más cortos para las criptomonedas.

Conclusión

En general, esta estrategia funciona muy bien en el seguimiento de tendencias de los mercados, con oportunidades adicionales de ruptura. Con las mejoras adecuadas se puede convertir en una estrategia comercialmente viable de alta calidad. Continuaremos mejorándola para comerciar más mercados de manera estable.


/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs Strategy v1.9 Extreme", shorttitle = "Trend MAs str 1.9 extreme", 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, %")
useohlc4 = input(false, defval = false, title = "Use OHLC4")
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?")
needarr = input(false, defval = false, title = "Need entry arrows?")
needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)")

src = useohlc4 == true ? ohlc4 : 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

//Signals
up = trend == 1 and (low < center2 or usefastsma == false) and (redbars == 1) ? 1 : 0
dn = trend == -1 and (high > center2 or usefastsma == false) and (greenbars == 1) ? 1 : 0

up2 = high < center and high < center2 and bar == -1 ? 1 : 0
dn2 = low > center and low > center2 and bar == 1 ? 0 : 0

//Lines
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")
plot(center2, color = red, linewidth = 3, transp = 0, title = "PriceChannel 2")

//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 or (up2 == 1 and needex == true)
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)

Más.