Estrategia de ruptura de la tendencia de doble MA

El autor:¿ Qué pasa?, Fecha: 2024-01-08 16:43:38
Las etiquetas:

img

Resumen general

La estrategia de ruptura de tendencia de doble MA es una estrategia de negociación cuantitativa que utiliza dos promedios móviles de diferentes períodos para determinar la tendencia y generar señales de entrada.

Estrategia lógica

La estrategia consta de las siguientes partes principales:

El juicio de la tendencia: Calcula el MA de 21 períodos, definido como el MA lento. Su posición es relativamente estable y se puede utilizar para juzgar la dirección general de la tendencia. Cuando los precios aumentan cerca de este MA, es una tendencia al alza. Cuando los precios caen cerca de este MA, es una tendencia a la baja.

Filtración de entradas: Calcula el MA de 5 períodos, definido como el MA rápido. Solo cuando el precio rompe tanto el MA lento como el MA rápido, se activa la señal de negociación. Este diseño filtra principalmente la posibilidad de fallas falsas.

Filtración de velas: La estrategia sólo va largo cuando la vela actual es bajista, o va corto cuando la vela actual es alcista. Esto considera que el uso de barras de reversión para la entrada puede obtener una mayor tasa de éxito. También combina el indicador RSI rápido para evitar entrar en áreas de sobrecompra o sobreventa.

El filtro piramidal: Para el mercado de cifrado, la estrategia incluye además una condición de ruptura de volatilidad de triplicación para capturar oportunidades de sobreventa en tendencias bajistas significativas.

Detener pérdida: La estrategia admite movimientos de stop loss. Después de abrir posiciones, el stop loss se actualizará en tiempo real en función del porcentaje establecido.

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. El diseño de la doble MA es sencillo y práctico, fácil de entender y dominar;
  2. Una evaluación fiable de la tendencia mediante el peinado de los MAs rápidos y lentos;
  3. La entrada de la barra de inversión mejora la tasa de ganancia de la negociación;
  4. La metodología general es conservadora y estable, adecuada para todos los plazos;
  5. Apoya el movimiento del stop loss para controlar los riesgos;
  6. Considera especialmente las características del mercado de cifrado al agregar oportunidades de pirámide de sobreventa para obtener rendimientos excedentes.

Análisis de riesgos

La estrategia también tiene algunos riesgos:

  1. Durante los períodos de doble MA de rango limitado, habrá múltiples ganancias y pérdidas pequeñas.
  2. La entrada de la barra de inversión puede tener una baja tasa de ganancia en algunos marcos de tiempo.
  3. El mercado de criptomonedas tiene una alta volatilidad y una alta probabilidad de que se desencadene un stop loss.
  4. Las oportunidades de pirámide sobrevendidas no son muchas, con una alta volatilidad de rendimiento.

Para hacer frente a estos riesgos, se pueden realizar optimizaciones en los siguientes aspectos:

  1. Añadir más condiciones de entrada para evitar golpes ineficaces;
  2. Ajustar el marco de tiempo o añadir otros indicadores para el filtrado;
  3. Optimizar los algoritmos de stop loss para realizar un seguimiento cerca de la línea media;
  4. Evaluar el rendimiento real de las estrategias de pirámide de sobreventa.

Direcciones de optimización

Los principales aspectos para optimizar esta estrategia incluyen:

  1. Optimización de parámetros: Prueba sistemática de retroceso para encontrar combinaciones óptimas de períodos de MA rápidos y lentos para mejorar los rendimientos ajustados al riesgo.

  2. Reconocimiento de patrones: Agregue otros indicadores como KDJ, MACD para identificar señales de reversión más confiables.

  3. Optimización de pérdidas: Desarrollar algoritmos de stop loss flotantes o atrasados para reducir la posibilidad de ser detenido.

  4. Aprendizaje automático: Recopilar y etiquetar más datos históricos para generar automáticamente reglas de negociación utilizando ML.

  5. Tamaño de la posición: Ajuste dinámico del tamaño de las posiciones en función de las condiciones del mercado.

Conclusión

La estrategia de ruptura de tendencia de doble MA es generalmente una estrategia de seguimiento de tendencias simple y práctica. En comparación con los algoritmos de aprendizaje automático complejos, esta estrategia es más fácil de interpretar y dominar, con mayor confiabilidad. Con el ajuste de parámetros, la expansión de características y el aumento de ML, esta estrategia tiene un gran potencial de mejora y es un gran punto de partida para el comercio cuantitativo.


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

//@version=2
strategy(title = "Noro's Trend MAs Strategy v2.0 +CB", shorttitle = "Trend MAs str 2.0", 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

//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)
up3 = close < open and len > sma * 3 and min < min[1] and fastrsi < 10 ? 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) or up3 == 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)

Más.