La Moving Average Turning Point Crossover Trading Strategy es una estrategia clásica de indicadores técnicos. La idea central de esta estrategia es generar señales de compra y venta mediante la combinación de promedios móviles de diferentes períodos y optimizar aún más las salidas comerciales utilizando los puntos de inflexión de la media móvil.
La estrategia utiliza principalmente dos promedios móviles, uno con un período más corto como la línea rápida y el otro con un período más largo como la línea lenta. Cuando la línea rápida rompe la línea lenta hacia arriba, se genera una señal de compra. Cuando la línea rápida rompe la línea lenta hacia abajo, se genera una señal de venta. Este es el mecanismo de generación de señales comerciales de la estrategia clásica de cruce de promedios móviles.
Además, la estrategia sale de las operaciones utilizando los puntos de inflexión de los promedios móviles. Cuando la línea rápida cambia de subir a bajar, las posiciones largas saldrán. Cuando la línea rápida cambia de bajar a subir, las posiciones cortas saldrán. Los puntos de inflexión de los promedios móviles pueden capturar los puntos de reversión del mercado a corto plazo, lo que ayuda a la estrategia a reducir las pérdidas o obtener ganancias a tiempo, mejorando así el rendimiento general.
La estrategia de negociación cruzada de puntos de inflexión de media móvil tiene las siguientes ventajas:
La estrategia utiliza sólo dos indicadores: promedio móvil e indicador ROC.
Las características inherentes de retraso y suavización de precios de las medias móviles pueden filtrar algo de ruido y evitar generar demasiadas operaciones inválidas en tendencias variables.
Puede controlar eficazmente las pérdidas unilaterales. Las pérdidas de parada oportunas utilizando puntos de inflexión de la media móvil pueden reducir las grandes pérdidas unilaterales.
Amplia aplicabilidad. El principio de la estrategia es simple y se puede aplicar a diferentes productos y marcos de tiempo de negociación, como barras diarias y horarias. Gran espacio de optimización de parámetros.
Comparado con las estrategias que persiguen puntos calientes del mercado, esta estrategia se centra más en el control de riesgos en lugar de buscar rendimientos súper altos, pero puede obtener rendimientos positivos estables.
La estrategia de negociación cruzada de medias móviles de punto de inflexión también presenta algunos riesgos, principalmente en los siguientes aspectos:
Retraso de las medias móviles Cuando el mercado rápido llega, las señales de cruce de las medias móviles se retrasarán, posiblemente perdiendo el mejor punto de entrada.
Esta estrategia tiene salidas oportunas pero señales de entrada más lentas. Esto puede conducir a períodos de retención vacíos excesivos.
Optimización de parámetros difícil. La elección de parámetros como la longitud media móvil y el ciclo ROC tendrá un gran impacto en el rendimiento de la estrategia. Pero la optimización de parámetros requiere una gran cantidad de datos históricos para backtesting, planteando dificultades en la optimización.
En las tendencias con altas variaciones de volatilidad, las medias móviles generarán múltiples cruces inválidos, lo que perjudicará el rendimiento de la estrategia.
La estrategia comercial puede optimizarse aún más en los siguientes aspectos:
Incorporar indicadores de filtrado de tendencias. Agregar indicadores como ADX y ATR para juzgar el estado de la tendencia. Desactivar la estrategia cuando no hay una tendencia clara para evitar operaciones inútiles.
Identificar la dirección de la tendencia principal en los marcos de tiempo más altos para evitar el comercio contra la tendencia principal.
Optimización de parámetros adaptativos: permite que parámetros como la longitud media móvil se ajusten adaptativamente en función de la volatilidad del mercado en tiempo real para mejorar la robustez de los parámetros.
Identificar patrones de velas en puntos de cruce MA para filtrar señales falsas.
En general, la estrategia de negociación de cruce de punto de inflexión promedio móvil equilibra el riesgo y el rendimiento. Tiene ventajas como la facilidad de implementación, resistencia a pérdidas consecutivas y rendimientos estables. También tiene desventajas como la emisión tardía de MAs y períodos de retención vacíos excesivos. Al optimizar los parámetros, incorporar el juicio de tendencia, reconocimiento de patrones, etc., el rendimiento de la estrategia se puede mejorar aún más.
/*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"}] */ //@version=4 //study(title="MA Crossover Strategy", overlay = true) strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true) src = input(close, title="Source") price = request.security(syminfo.tickerid, timeframe.period, src) ma1 = input(25, title="1st MA Length") type1 = input("SMA", "1st MA Type", options=["SMA", "EMA"]) ma2 = input(50, title="2nd MA Length") type2 = input("SMA", "2nd MA Type", options=["SMA", "EMA"]) price1 = if (type1 == "SMA") sma(price, ma1) else ema(price, ma1) price2 = if (type2 == "SMA") sma(price, ma2) else ema(price, ma2) //plot(series=price, style=line, title="Price", color=black, linewidth=1, transp=0) plot(series=price1, style=line, title="1st MA", color=blue, linewidth=2, transp=0) plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0) longCondition = crossover(price1, price2) if (longCondition) strategy.entry("Long", strategy.long) shortCondition = crossunder(price1, price2) if (shortCondition) strategy.entry("Short", strategy.short) lookback1 = input(1, "Lookback 1") roc1 = roc(price1, lookback1) ma1up = false ma1down = false ma2up = false ma2down = false ma1up := nz(ma1up[1]) ma1down := nz(ma1down[1]) ma2up := nz(ma2up[1]) ma2down := nz(ma2down[1]) trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01 if crossover(roc1, trendStrength1) ma1up := true ma1down := false if crossunder(roc1, -trendStrength1) ma1up := false ma1down := true shortexitCondition = ma1up and ma1down[1] if (shortexitCondition) strategy.close("Short") longexitCondition = ma1down and ma1up[1] if (longexitCondition) strategy.close("Long")