Una estrategia de negociación cruzada de media móvil doble

El autor:¿ Qué pasa?, Fecha: 2023-11-27 15:32:57
Las etiquetas:

img

Resumen general

Esta estrategia genera señales de compra y venta basadas en el cruce de dos promedios móviles con diferentes configuraciones de parámetros. Cuando el promedio móvil de período más corto cruza por encima del promedio móvil de período más largo desde abajo, se genera una señal de compra. Cuando el promedio móvil de período más corto cruza por debajo del promedio móvil de período más largo desde arriba, se genera una señal de venta.

Estrategia lógica

La estrategia está escrita en el script de Pine. Primero define dos promedios móviles, llamados p1 y p2, con tipo, longitud y fuente de precio personalizables a través de la entrada. Aquí p1 representa el período más corto MA y p2 representa el período más largo MA.

Las funciones de cruce y cruce se utilizan para detectar el cruce entre los dos MA. Cuando p1 cruza sobre p2 desde abajo, se genera una señal de compra. Cuando p1 cruza debajo de p2 desde arriba, se genera una señal de venta.

Para ejecutar operaciones, la estrategia entra en posiciones largas o cortas utilizando strategy.entry cuando se activan las señales.

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. Normas claras, fáciles de entender y aplicar
  2. El cruce de MA es una señal comercial clásica y ampliamente conocida
  3. Tipos, longitudes y fuentes de precios de los MA altamente personalizables
  4. Puede operar solo con señales de venta a menor frecuencia de operaciones

Análisis de riesgos

También hay algunos riesgos con esta estrategia:

  1. Pueden ocurrir múltiples cruces inválidas durante los mercados agitados, lo que lleva a un exceso de negociación.
  2. Los parámetros necesitan optimización para diferentes productos y plazos.
  3. Incapaz de determinar la dirección de la tendencia, puede operar contra la tendencia.

Los riesgos pueden reducirse ajustando las longitudes de MA, añadiendo condiciones de filtro, etc. También se pueden añadir indicadores de tendencia para determinar el sesgo del mercado.

Oportunidades de mejora

La estrategia puede mejorarse en los siguientes aspectos:

  1. Utilice VWAP o precio típico como fuente de precios para hacer que las señales de cruce sean más confiables.

  2. Añadir un período de validación para evitar cruces erróneos a corto plazo.

  3. Se incluirán las paradas ATR basadas en la pérdida máxima aceptable de acuerdo con la volatilidad del mercado.

  4. Optimización de parámetros mediante ajuste de curvas para encontrar combinaciones óptimas.

  5. Solo considere las señales en la dirección de tendencias de marcos de tiempo más altos.

Resumen de las actividades

La doble estrategia de cruce de MA es fácil de entender e implementar, generando señales comerciales de dos cruces de MA con alta personalizabilidad. Pero también puede producir señales inválidas excesivas durante los mercados agitados. Los riesgos se pueden reducir a través de la optimización de parámetros y lógica con amplias oportunidades de mejora, que vale la pena investigar más.


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © RafaelPiccolo

//@version=4
strategy("Double MA Cross", overlay=true)

type1 = input("SMA", "MA Type 1", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len1 = input(10, minval=1, title="Length 1")
src1 = input(close, "Source 1", type=input.source)

type2 = input("SMA", "MA Type 2", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len2 = input(50, minval=2, title="Length 2")
src2 = input(close, "Source 2", type=input.source)

shortOnly = input(false, "Short only")

tema(src, len)=>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    ema3 = ema(ema2, len)
    return = 3 * (ema1 - ema2) + ema3

getPoint(type, len, src)=>
    return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len)

p1 = getPoint(type1, len1, src1)
p2 = getPoint(type2, len2, src2)

shortCondition = crossunder(p1, p2)
longCondition = crossover(p1, p2)

if (shortCondition)
    strategy.entry("Short", strategy.short)

if (longCondition)
    if (shortOnly)
        strategy.close("Short")
    else
        strategy.entry("Long", strategy.long)

plot(p1, "MA 1", p1 < p2 ? color.red : color.green)
plot(p2, "MA 2", color.blue)


Más.