En la carga de los recursos... Cargando...

Estrategia avanzada de cruce de promedios móviles multiperiódicos flexibles

El autor:¿ Qué pasa?, Fecha: 2024-11-28 15:18:47
Las etiquetas:- ¿Qué es?La SMAEl EMALa WMAHMAEl número de personas afectadas

img

Resumen general

Esta estrategia es un sistema de negociación cuantitativo avanzado basado en múltiples promedios móviles y períodos de tiempo. Permite a los operadores elegir con flexibilidad diferentes tipos de promedios móviles (incluidos SMA, EMA, WMA, HMA y SMMA) y cambiar entre múltiples períodos de tiempo como marcos de tiempo diarios, semanales o mensuales de acuerdo con las condiciones del mercado. La lógica central determina las señales de compra y venta comparando el precio de cierre con la posición de promedio móvil seleccionada, al tiempo que combina diferentes revisiones de períodos de tiempo para mejorar la precisión de la negociación.

Principios de estrategia

La estrategia emplea un diseño modular con cuatro componentes principales: módulo de selección de tipo de promedio móvil, módulo de selección de período de tiempo, módulo de generación de señal y módulo de gestión de posición. Cuando el precio de cierre cruza por encima del promedio móvil seleccionado, el sistema genera una señal larga al comienzo del próximo período de negociación; cuando el precio de cierre cruza por debajo del promedio móvil, el sistema genera una señal de cierre. La estrategia implementa el cálculo de datos interperíodos a través de la función de solicitud. seguridad, asegurando la precisión de la señal en diferentes marcos de tiempo. Además, la estrategia incluye el cierre automático de la posición al final de la prueba de retroceso para garantizar la seguridad del capital.

Ventajas estratégicas

  1. Alta flexibilidad: admite combinaciones de múltiples tipos de medias móviles y períodos de tiempo, adaptándose a diferentes entornos de mercado
  2. Control integral del riesgo: evita oportunidades perdidas mediante un mecanismo de control automático al final del período
  3. Gestión racional del capital: gestión del porcentaje de la posición de los empleados para un control eficaz del riesgo
  4. Fuerte estabilidad de la señal: reduce las señales falsas a través de múltiples mecanismos de confirmación
  5. Amplia adaptabilidad: aplicable a diversos instrumentos de negociación y entornos de mercado

Riesgos estratégicos

  1. Riesgo de retraso: los indicadores de media móvil tienen inherentemente cierto retraso, lo que puede causar un retraso en el momento de entrada y salida
  2. Riesgo de oscilación: puede generar frecuentes falsas señales de ruptura en los mercados laterales
  3. Riesgo transversal: las señales de diferentes períodos pueden contradecirse entre sí, lo que requiere una priorización efectiva de las señales.
  4. Riesgo de gestión de capital: las posiciones en porcentaje fijo pueden ser demasiado agresivas en determinadas condiciones de mercado

Direcciones para la optimización de la estrategia

  1. Incorporar indicadores de volatilidad: se sugiere añadir bandas ATR o Bollinger para el dimensionamiento dinámico de las posiciones
  2. Añadir filtros de tendencia: puede añadir mecanismos de evaluación de tendencias a largo plazo a sólo las posiciones abiertas en la dirección principal de la tendencia
  3. Optimizar la confirmación de la señal: considerar la introducción de volumen y otros indicadores auxiliares para mejorar la fiabilidad de la señal
  4. Mejorar el mecanismo de suspensión de pérdidas: se sugiere añadir una función de suspensión de pérdidas posterior para una mejor protección de las ganancias
  5. Añadir indicadores del sentimiento del mercado: introducción sugerida de RSI o MACD para juzgar las condiciones de sobrecompra/sobreventa del mercado

Resumen de las actividades

Esta estrategia es un sistema de negociación bien diseñado con lógica clara, proporcionando a los operadores una herramienta de negociación confiable a través de configuraciones de parámetros flexibles y múltiples mecanismos de confirmación.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Flexible Moving Average Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Input to select the review frequency (Daily, Weekly, Monthly)
check_frequency = input.string("Weekly", title="Review Frequency", options=["Daily", "Weekly", "Monthly"])

// Input to select the Moving Average method (SMA, EMA, WMA, HMA, SMMA)
ma_method = input.string("EMA", title="Moving Average Method", options=["SMA", "EMA", "WMA", "HMA", "SMMA"])

// Input to select the length of the Moving Average
ma_length = input.int(30, title="Moving Average Length", minval=1)

// Input to select the timeframe for Moving Average calculation
ma_timeframe = input.string("W", title="Moving Average Timeframe", options=["D", "W", "M"])

// Calculate all Moving Averages on the selected timeframe
sma_value = request.security(syminfo.tickerid, ma_timeframe, ta.sma(close, ma_length), lookahead=barmerge.lookahead_off)
ema_value = request.security(syminfo.tickerid, ma_timeframe, ta.ema(close, ma_length), lookahead=barmerge.lookahead_off)
wma_value = request.security(syminfo.tickerid, ma_timeframe, ta.wma(close, ma_length), lookahead=barmerge.lookahead_off)
hma_value = request.security(syminfo.tickerid, ma_timeframe, ta.hma(close, ma_length), lookahead=barmerge.lookahead_off)
smma_value = request.security(syminfo.tickerid, ma_timeframe, ta.rma(close, ma_length), lookahead=barmerge.lookahead_off) // Smoothed Moving Average (SMMA)

// Select the appropriate Moving Average based on user input
ma = ma_method == "SMA" ? sma_value : 
     ma_method == "EMA" ? ema_value :
     ma_method == "WMA" ? wma_value :
     ma_method == "HMA" ? hma_value :
     smma_value  // Default to SMMA

// Variable initialization
var float previous_close = na
var float previous_ma = na
var float close_to_compare = na
var float ma_to_compare = na

// Detect the end of the period (Daily, Weekly, or Monthly) based on the selected frequency
var bool is_period_end = false

if check_frequency == "Daily"
    is_period_end := ta.change(time('D')) != 0
else if check_frequency == "Weekly"
    is_period_end := ta.change(time('W')) != 0
else if check_frequency == "Monthly"
    is_period_end := ta.change(time('M')) != 0

// Store the close and Moving Average values at the end of the period
if is_period_end
    previous_close := close[0]  // Closing price of the last day of the period
    previous_ma := ma[0]  // Moving Average value at the end of the period

// Strategy logic
is_period_start = is_period_end

// Check if this is the first bar of the backtest
is_first_bar = barstate.isfirst

if (is_period_start or is_first_bar)
    // If the previous period values are not available, use current values
    close_to_compare := not na(previous_close) ? previous_close : close[0]
    ma_to_compare := not na(previous_ma) ? previous_ma : ma[0]
    
    if close_to_compare < ma_to_compare
        // Close price below the MA -> Sell
        if strategy.position_size > 0
            strategy.close("Long")
    else
        // Close price above the MA -> Buy/Hold
        if strategy.position_size == 0
            strategy.entry("Long", strategy.long)

// Close all positions at the end of the backtest period
if barstate.islastconfirmedhistory
    strategy.close_all(comment="Backtest End")

// Plot the previous period's close price for comparison
plot(previous_close, color=color.red, title="Previous Period Close", style=plot.style_stepline)
plot(close_to_compare, color=color.blue, title="Close to Compare", style=plot.style_line)

// Plot the selected Moving Average
plot(ma, color=color.white, title="Moving Average", style=plot.style_line, linewidth=3)

Relacionados

Más.