Estrategia de trading con sistema de media móvil


Fecha de creación: 2024-01-05 15:36:00 Última modificación: 2024-01-05 15:36:00
Copiar: 1 Número de Visitas: 683
1
Seguir
1617
Seguidores

Estrategia de trading con sistema de media móvil

Descripción general

Este artículo trata sobre una estrategia de negociación basada en una media móvil simple. La estrategia utiliza una media móvil de longitud de 17 para comparar con el precio de cierre.

Principio de estrategia

Calculación de las medias móviles

La estrategia utiliza los siguientes parámetros para calcular la media móvil:

  • MA fuente: el promedio por defecto de OHLC (OHCL4)
  • Tipo MA: promedio móvil simple por defecto (SMA)
  • Duración del MA: 17 por defecto

De acuerdo con estos parámetros, se llama a la función getMAType () para calcular el SMA de cierre de 17 ciclos.

Generación de señales de comercio

Luego compara la relación entre el precio de cierre y la media móvil:

  • Cierre de la cotización > Media móvil: señales de posiciones largas
  • Precio de cierre < promedio móvil: señal de vacío

Cuando el precio de cierre cruza la media móvil desde abajo, genera una señal de más; cuando cruza desde arriba hacia abajo, genera una señal de menos.

Ejecución de la operación

Durante el ciclo de retracción, se abren más posiciones en caso de señales de más y más, y se abren posiciones en caso de señales de menos.

Análisis de las ventajas

La mayor ventaja de esta estrategia es que la idea es muy simple y clara. Sólo un indicador para juzgar el cambio de tendencia a través de su cambio de dirección. La estrategia es fácil de entender, fácil de implementar y adecuada para los principiantes.

Además, los promedios móviles son indicadores de seguimiento de tendencias, que permiten un seguimiento eficaz de las tendencias cambiantes y evitan la interferencia del ruido a corto plazo en el mercado.

Se puede adaptar a diferentes períodos y diferentes variedades mediante ajustes de parámetros.

Análisis de riesgos

En primer lugar, la estrategia se basa en un solo indicador, y el criterio de evaluación es más simple y puede generar más señales erróneas.

Además, la estrategia es un sistema de seguimiento de tendencias que no puede funcionar en un mercado que se estabiliza y se agita.

Además, no se ha establecido un Stop Loss Stop, con el riesgo de que las pérdidas aumenten.

La solución consiste en combinar otros indicadores, optimizar la combinación de parámetros, reducir las señales erróneas. Configurar un stop loss, controlar el riesgo y optimizar la retirada.

Dirección de optimización

Los siguientes aspectos pueden servir como ideas para optimizar la estrategia:

  1. Ajustar los parámetros de las medias móviles, optimizar el número de ciclos. Por ejemplo, cambiar a 30 o 50 ciclos.

  2. Prueba diferentes tipos de promedios móviles, como EMA, VIDYA, etc. Ellos son diferentes en cuanto a su sensibilidad a los cambios en los precios.

  3. La combinación con otros indicadores puede ser, por ejemplo, con el MACD, para determinar la fuerza o la debilidad, o con el RSI, para reducir las señales erróneas.

  4. Aumentar el mecanismo de stop loss. Establecer un stop loss móvil de un porcentaje fijo o un valor de ATR. Controlar las pérdidas individuales.

  5. Aumentar el mecanismo de suspensión. Establecer el porcentaje de ganancias objetivo. Maximizar las ganancias.

Estas optimizaciones permiten una mayor estabilidad en el rendimiento de la estrategia y evitan una retirada excesiva.

Resumir

Este artículo analiza una estrategia de negociación simple basada en una media móvil de 17 períodos. La fuente de la señal de la estrategia es simple, fácil de entender y implementar, pertenece a un sistema típico de seguimiento de tendencias. A través de una interpretación en profundidad de la estrategia, se analizan sus ventajas y riesgos, y se da una idea de optimización en varias dimensiones.

Código Fuente de la Estrategia
/*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)