Estrategia de negociación cruzada de media móvil doble

El autor:¿ Qué pasa?, Fecha: 2023-10-07 16:39:01
Las etiquetas:

Resumen general

Esta estrategia utiliza la cruz de oro y la cruz de muerte de los promedios móviles duales para determinar la tendencia y generar señales de compra y venta. Cuando el promedio móvil rápido cruza por encima del promedio móvil lento desde abajo, se produce una cruz de oro y se genera una señal de compra. Cuando el promedio móvil rápido cruza por debajo del promedio móvil lento desde arriba, se produce una cruz de muerte y se genera una señal de venta.

Estrategia lógica

La estrategia consta de los siguientes componentes:

  1. Calcular el valor del oscilador del precio en forma de porcentaje. El valor del oscilador es el porcentaje del precio menos un valor mediano. El valor mediano se calcula como el promedio de los precios más altos y más bajos de 20 días.

  2. Calcular la media móvil de los valores del oscilador, como la media móvil de Hull de 20 días.

  3. Calcular el valor de retraso de la media móvil, por ejemplo, el retraso de 12 días.

  4. Determinar si la media móvil se cruza por encima o por debajo de la media móvil rezagada, generando señales de cruz dorada o cruz de muerte.

  5. Emite señales de compra y venta.

Específicamente, la estrategia calcula primero el valor del oscilador del precio, luego la media móvil del oscilador y luego el valor rezagado de la media móvil.

Cuando el promedio móvil del oscilador cruza por encima del promedio móvil rezagado, se genera una señal de cruz dorada para ir largo.

Al juzgar el cruce de las dos medias móviles, se determina la dirección de la negociación.

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. El uso de dos promedios móviles filtra las señales falsas y mejora la confiabilidad de la señal.

  2. La combinación de promedios móviles rápidos y lentos captura las tendencias a mediano plazo. El MA rápido es sensible a los cambios de precios mientras que el MA lento tiene calidad rezagada. La combinación de ambos filtra el ruido a corto plazo mientras capta las reversiones de tendencia a mediano plazo.

  3. El oscilador resalta los puntos de ruptura y genera señales comerciales más claras.

  4. Los algoritmos y parámetros de MA personalizables se adaptan a diferentes entornos de mercado.

  5. Lógica de estrategia simple y clara, fácil de entender e implementar, amigable para principiantes.

Análisis de riesgos

Los riesgos de esta estrategia incluyen:

  1. Los cruces de doble MA tienen señales rezagadas, potencialmente faltando los mejores puntos de entrada.

  2. Propenso a señales erróneas durante los mercados de rango.

  3. Incapaz de determinar la fuerza de la tendencia, corre el riesgo de una salida temprana durante los mercados alcistas.

  4. Demasiados parámetros ajustables, difícil de optimizar para las mejores combinaciones de parámetros.

  5. No hay un mecanismo de stop loss, incapaz de controlar la pérdida de una sola operación.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Optimización de los tipos y parámetros de los MA, estabilidad de las pruebas en diferentes mercados.

  2. Añadir indicadores de tendencia como ADX para evitar operaciones innecesarias de señales equivocadas.

  3. Agregue mecanismos de stop loss como stop de seguimiento o stop porcentual para controlar la pérdida de una sola operación.

  4. Incorporar otros indicadores como el volumen, RSI para mejorar la calidad de la señal.

  5. Utilice el aprendizaje automático para optimizar automáticamente los parámetros para ajustes más robustos.

  6. Considere relajar ligeramente las condiciones de entrada para reducir las operaciones perdidas.

Resumen de las actividades

Esta estrategia de cruce de promedios móviles dobles captura puntos de inversión de tendencia a medio plazo combinando promedios móviles rápidos y lentos, filtrando el ruido del mercado a corto plazo. Tiene la ventaja de ser simple, fácil de entender y amigable para principiantes. Pero también tiene desventajas como generar señales incorrectas e incapacidad para determinar la fuerza de la tendencia. La estrategia se puede mejorar optimizando parámetros de MA, agregando filtros de tendencia, estableciendo condiciones de stop loss, etc. para adaptarse a diferentes entornos de mercado.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 4h
basePeriod: 15m
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/
// © EvoCrypto

//@version=4
strategy("Distance Oscillator Strategy- evo", shorttitle="Distance Oscillator Strategy")

// INPUTS {
na_1                =   input(false,    title="────────────{ Oscillator }──────────────")

// Osc_Src             =   input(close,    title="Oscillator Source                                ")

Example_Length      =   input(20,       title="Example Length", minval=1)
Osc_Src             =   (highest(Example_Length) + lowest(Example_Length)) / 2

// Strategy can not let you choose a Moving Average to connect with like the study version, so I use the MA above as example

Osc_Format          =   input("Percent",title="Oscillator Format",              options=["Percent", "Currency"]) 

na_2                =   input(false,    title="─────────────{ Average }──────────────")
Average_Type        =   input("Hull",   title="Average Type",                   options=["Hull", "Sma", "Ema", "Wma"])
Length              =   input(50,       title="Average Length", minval=1)
Lagg                =   input(12,       title="Average Lagg",   minval=1)
Display_MA          =   input(true,     title="Display Average")
// }

// SETTINGS {
Osc_Sum             =   
 Osc_Format == "Percent"  ? (close - Osc_Src) / close * 100 :
 Osc_Format == "Currency" ? (close - Osc_Src)               : na

Osc_MA              =   Display_MA == false ? na:
 Average_Type == "Hull"? hma(Osc_Sum, Length)   :
 Average_Type == "Sma" ? sma(Osc_Sum, Length)   :
 Average_Type == "Ema" ? ema(Osc_Sum, Length)   :
 Average_Type == "Wma" ? wma(Osc_Sum, Length)   : na
Osc_MA_1            =   Osc_MA[Lagg]

Cross_Up            =   crossover( Osc_MA, Osc_MA_1)
Cross_Down          =   crossunder(Osc_MA, Osc_MA_1)

Osc_Color           =   Osc_Sum > 0         ? color.new(#bbdefb, 70)  : Osc_Sum < 0          ? color.new(#000000, 70)  : na
Average_Color       =   Osc_MA  > Osc_MA_1  ? color.new(#311b92, 100) : Osc_MA  < Osc_MA_1   ? color.new(#b71c1c, 100) : na
// }

// PLOT {
plot(Osc_Sum,                           title="Oscillator", color=Osc_Color, style=plot.style_histogram, linewidth=2)

Plot_0              =   plot(Osc_MA,    title="Osc Average",color=#b71c1c, linewidth=2)
Plot_1              =   plot(Osc_MA_1,  title="Osc Average",color=#311b92, linewidth=2)
fill(Plot_0, Plot_1,                    title="Average",    color=Average_Color)

plotshape(Cross_Up   ? Osc_MA_1 : na,   title="Cross Up",   color=#bbdefb, location=location.absolute, size=size.tiny, style=shape.circle)
plotshape(Cross_Down ? Osc_MA_1 : na,   title="Cross Down", color=#000000, location=location.absolute, size=size.tiny, style=shape.circle)
// }

// STRATEGY {
if (Cross_Up)
    strategy.entry("Long", strategy.long)
if (Cross_Down)
    strategy.entry("Short", strategy.short)
// }

Más.