Este artículo analiza una estrategia de negociación basada en un promedio móvil simple. La estrategia compara el precio de cierre con un promedio móvil de 17 períodos, yendo largo cuando el precio de cierre cruza por encima del promedio móvil y va corto cuando cruza por debajo.
La estrategia utiliza los siguientes parámetros para calcular la media móvil:
Basándose en estos parámetros, se llama a la función getMAType() para calcular la SMA de 17 períodos de los precios de cierre.
A continuación, comparar la relación entre el precio de cierre y la media móvil:
Cuando el precio de cierre cruza por encima de la media móvil desde abajo, se genera una señal larga.
Durante el período de backtest, abrir posiciones largas cuando aparecen señales largas y abrir posiciones cortas cuando aparecen señales cortas.
La mayor ventaja de esta estrategia es que la lógica es muy simple y clara. Con solo un indicador, juzga la inversión de tendencia en función del cambio de dirección del indicador. La estrategia es fácil de entender e implementar, adecuada para que los principiantes aprendan.
Además, las medias móviles pertenecen a indicadores de tendencia, que pueden realizar un seguimiento eficaz de los cambios de tendencia y evitar interferencias del ruido del mercado a corto plazo.
Al ajustar los parámetros, puede adaptarse a diferentes ciclos y diferentes productos.
En primer lugar, esta estrategia se basa únicamente en un indicador, por lo que los criterios de evaluación son relativamente únicos, lo que puede generar más señales falsas.
Además, como sistema de seguimiento de tendencias, no funciona bien en los mercados de rango y laterales.
Además, sin stop loss o take profit, existe el riesgo de que las pérdidas se extiendan.
Las soluciones son incorporar otros indicadores, optimizar las combinaciones de parámetros para reducir las señales falsas, agregar stop loss y take profit para controlar los riesgos y optimizar los drawdowns.
Aquí hay algunas ideas para optimizar la estrategia:
Ajustar los parámetros de la media móvil, optimizar los números de períodos, por ejemplo, cambiar a 30 o 50 períodos.
Pruebe diferentes tipos de promedios móviles, como EMA, VIDYA, etc. Tienen una sensibilidad variable a los cambios de precios.
Añadir otros indicadores en combinación, por ejemplo, MACD para evaluar la fortaleza; RSI para reducir las señales falsas.
Añadir mecanismos de stop loss: establecer un porcentaje fijo o una pérdida de stop de seguimiento basada en ATR para controlar el monto de la pérdida de una sola operación.
Agregue mecanismos de toma de ganancias. Establezca el porcentaje de ganancias objetivo para maximizar las ganancias.
Estas optimizaciones pueden hacer que el rendimiento de la estrategia sea más estable y evitar reducciones excesivas.
Este artículo analiza una estrategia de trading simple basada en una media móvil de 17 períodos. La estrategia tiene fuentes de señal simples, fáciles de entender e implementar, pertenecientes a un sistema típico de seguimiento de tendencias. A través de una interpretación en profundidad de la estrategia, se analizan sus pros y contras, y se proponen múltiples dimensiones de ideas de optimización. Se cree que a través de la optimización y enriquecimiento continuos, esta estrategia puede evolucionar gradualmente y lograr retornos estables también en el comercio en vivo.
/*backtest start: 2023-12-05 00:00:00 end: 2024-01-04 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Simple 17 BF 🚀", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0) /////////////// Time Frame /////////////// testStartYear = input(2012, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0) testStopYear = input(2019, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0) testPeriod() => true ///////////// Moving Average ///////////// source = input(title="MA Source", defval=ohlc4) maType = input(title="MA Type", defval="sma", options=["sma", "ema", "swma", "wma", "vwma", "rma"]) length = input(title="MA Length", defval=17) ///////////// Get MA Function ///////////// getMAType(maType, sourceType, maLen) => res = sma(close, 1) if maType == "ema" res := ema(sourceType, maLen) if maType == "sma" res := sma(sourceType, maLen) if maType == "swma" res := swma(sourceType) if maType == "wma" res := wma(sourceType, maLen) if maType == "vwma" res := vwma(sourceType, maLen) if maType == "rma" res := rma(sourceType, maLen) res MA = getMAType(maType, source, length) /////////////// Strategy /////////////// long = close > MA short = close < MA last_long = 0.0 last_short = 0.0 last_long := long ? time : nz(last_long[1]) last_short := short ? time : nz(last_short[1]) long_signal = crossover(last_long, last_short) short_signal = crossover(last_short, last_long) /////////////// Execution /////////////// if testPeriod() strategy.entry("L", strategy.long, when=long_signal) strategy.entry("S", strategy.short, when=short_signal) /////////////// Plotting /////////////// p1 = plot(MA, color = long ? color.lime : color.red, linewidth=2) p2 = plot(close, linewidth=2) fill(p1, p2, color=strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=80)