Estrategia cuantitativa de cruce de tendencia de filtro de media móvil

El autor:¿ Qué pasa?, Fecha: 2023-12-01 14:25:08
Las etiquetas:

img

Resumen general

La estrategia cuantitativa de cruce de promedios móviles es una estrategia de comercio cuantitativa a medio y largo plazo. Determina la dirección de tendencia del mercado a través del cruce de promedios móviles rápidos y lentos, y entra en el mercado bajo la premisa de identificar una tendencia efectiva. Al mismo tiempo, esta estrategia también establece un promedio móvil de ciclo más largo como filtro de tendencia, de modo que las señales comerciales válidas solo pueden generarse cuando los precios rompen ese promedio móvil.

Estrategia lógica

Esta estrategia se basa principalmente en el principio de cruce de promedios móviles. Específicamente, se calculan dos promedios móviles con períodos diferentes, generalmente establecidos en líneas de 20 días y 50 días. Se genera una señal de compra cuando la línea de 20 días se rompe por encima de la línea de 50 días desde abajo hacia arriba, y se genera una señal de venta cuando la línea de 20 días rompe la línea de 50 días desde arriba hacia abajo.

Además, la estrategia también establece un promedio móvil de 200 días como el punto de referencia general de la tendencia. Solo cuando el precio rompe la línea de 200 días, las señales cruzadas simples mencionadas anteriormente se consideran válidas. Esto constituye un mecanismo de filtrado de tendencias para evitar generar muchas señales inválidas en un mercado limitado por el rango.

Análisis de ventajas

  1. La frecuencia de negociación a medio y largo plazo evita una negociación excesiva, reduciendo los costes de negociación y los riesgos de deslizamiento.

  2. La determinación de la media móvil cruzada es clara y fácil de entender e implementar.

  3. El mecanismo de filtrado de tendencias puede filtrar la mayoría de las señales inválidas y mejorar la tasa de ganancia.

  4. El ajuste flexible de los parámetros de la media móvil es aplicable a diferentes variedades y ciclos de tiempo.

  5. El stop loss y el take profit se pueden configurar para controlar un solo beneficio y pérdida.

Análisis de riesgos

  1. Cuando el precio oscila alrededor de los promedios móviles, se pueden generar múltiples señales inválidas que resultan en una sobre negociación.

  2. Los promedios móviles de ciclo largo pueden quedarse rezagados con respecto al mercado, por lo que se pierden los puntos de inversión de tendencia.

  3. Se requieren datos históricos relativamente largos para establecer medias móviles de referencia, por lo que no se pueden aplicar nuevas variedades o ciclos cortos.

  4. Los parámetros de la estrategia necesitan pruebas y optimización repetidas, la configuración incorrecta puede causar el fracaso de la estrategia.

Mitigación de riesgos:

  1. Adoptar promedios móviles de ciclo más largo o aumentar las condiciones de filtración de tendencias.

  2. Incorporar otros indicadores para determinar la tendencia principal, tales como indicadores de energía, indicadores de volatilidad, etc.

  3. Mejorar la capacidad de adaptación de los parámetros del ciclo de la media móvil.

  4. Mejorar la optimización de parámetros y los mecanismos de retroalimentación para ajustar dinámicamente los parámetros de la estrategia.

Optimización de la estrategia

  1. Pruebe diferentes tipos de promedios móviles, como la media móvil ponderada lineal.

  2. Aumentar la funcionalidad del ciclo de la media móvil adaptativa.

  3. Incorporar indicadores de volatilidad para determinar las etapas de tendencia, mejorando la validez de los cruces de las medias móviles.

  4. Introducir algoritmos de aprendizaje automático para optimizar automáticamente los parámetros de la estrategia.

  5. Explorar estrategias de combinación de activos múltiples utilizando correlaciones entre activos para obtener ganancias.

Resumen de las actividades

La estrategia de cruce de promedio móvil de filtro de tendencia es en general una estrategia cuantitativa de mediano a largo plazo simple y práctica. Determina la tendencia de mediano a largo plazo a través del cruce de promedio móvil, y luego utiliza el filtrado de tendencias para reducir las señales inválidas. Esta estrategia tiene la ventaja de ser fácil de entender e implementar, adecuada para principiantes en el comercio cuantitativo. Las áreas potenciales de mejora se encuentran en la optimización de los promedios móviles, así como en la integración con otros indicadores y algoritmos de aprendizaje automático.


/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

////////////////////////////////////////////////////////////////////////////////
// Booz Strategy
// Developed for Godstime
// Version 1.1
// 11/28/2021
////////////////////////////////////////////////////////////////////////////////

//@version=4
strategy("Booz Strategy", "", true)

// ----------------------------- Inputs ------------------------------------- //
source_ma_type = input("EMA", "Source MA Type", options=["SMA", "EMA"])
source_ma_length = input(50, "Source MA Length")
fast_ma_length = input(20, "Fast MA Length")
slow_ma_length = input(50, "Slow MA Length")        
use_trend_filter = input(true, "Trend Filter")
trend_filter_ma_type = input("EMA", "Trend Filter MA Type", options=["SMA", "EMA"])
trend_filter_ma_length = input(200, "Trend Filter MA Period")
show_mas = input(true, "Show MAs")
swing_trading_mode = input(false, "Swing Trading")

// -------------------------- Calculations ---------------------------------- //
fast_ma = ema(close, fast_ma_length)
slow_ma = ema(close, slow_ma_length)
source_ma = source_ma_type == "EMA"? ema(close, source_ma_length): 
                                     sma(close, source_ma_length)
trend_filter_ma = trend_filter_ma_type == "EMA"? ema(close, trend_filter_ma_length): 
                                                 sma(close, trend_filter_ma_length)

// --------------------------- Conditions ----------------------------------- //
uptrend = not use_trend_filter or close > trend_filter_ma
buy_cond = crossover(fast_ma, slow_ma) and uptrend

downtrend = not use_trend_filter or close < trend_filter_ma
sell_cond = crossunder(fast_ma, slow_ma) and downtrend

// ---------------------------- Plotting ------------------------------------ //
bgcolor(use_trend_filter and downtrend? color.red: use_trend_filter? color.green: na)
plot(show_mas? fast_ma: na, "Fast MA", color.green)
plot(show_mas? slow_ma: na, "Slow MA", color.red)
plot(show_mas? source_ma: na, "Source MA", color.purple)
plot(show_mas? trend_filter_ma: na, "Trend Filter MA", color.blue)


// ---------------------------- Trading  ------------------------------------ //
// Inputs
sl_perc = input(1.0, "Stop Loss (in %)", group="Backtest Control")/100
tp_perc = input(1.0, "Take Profit (in %)", group="Backtest Control")/100
leverage = input(10, "Leverage", maxval=100, group="Backtest Control")
bt_start_time = input(timestamp("2021 01 01"), "Backtest Start Time", input.time, group="Backtest Control")
bt_end_time = input(timestamp("2021 12 31"), "Backtest End Time", input.time, group="Backtest Control")

// Trading Window
in_trading_window = true
trade_qty = 1

// Long Side
strategy.entry("Long Entry", strategy.long, trade_qty, when=buy_cond and in_trading_window)
long_tp = strategy.position_avg_price * (1 + tp_perc)
long_sl = strategy.position_avg_price * (1 - sl_perc)
if not swing_trading_mode
    strategy.exit("Long Exit", "Long Entry", limit=long_tp, stop=long_sl)

// Short Side
strategy.entry("Short Entry", strategy.short, trade_qty, when=sell_cond and in_trading_window)
short_tp = strategy.position_avg_price * (1 - tp_perc)
short_sl = strategy.position_avg_price * (1 + sl_perc)
if not swing_trading_mode
    strategy.exit("Short Exit", "Short Entry", limit=short_tp, stop=short_sl)

// End of trading window close
strategy.close_all(when=not in_trading_window)

Más.