Estrategia de negociación cuantitativa basada en medias móviles y bandas de Bollinger

El autor:¿ Qué pasa?, fecha: 2024-04-26 11:45:05
Las etiquetas:La SMALa WMAEl EMA

img

Resumen general

Esta estrategia utiliza principalmente promedios móviles y bandas de Bollinger para capturar las tendencias y la volatilidad del mercado. Emplea tres tipos diferentes de promedios móviles: promedio móvil simple (SMA), promedio móvil ponderado (WMA) y promedio móvil exponencial (EMA). Al mismo tiempo, utiliza bandas de Bollinger para establecer canales de precios, con las bandas superior e inferior que sirven como señales para abrir y cerrar posiciones. Cuando el precio rompe la banda superior de Bollinger, abre una posición corta; cuando rompe la banda inferior, abre una posición larga. También establece bandas de Bollinger más amplias como niveles de stop-loss, cerrando posiciones cuando el precio viola estas bandas.

Principios de estrategia

  1. Calcular tres medias móviles con períodos diferentes: SMA lenta, EMA rápida y WMA media, que reflejan las tendencias de mercado a largo, corto y mediano plazo respectivamente.
  2. Calcule dos conjuntos de bandas de Bollinger basadas en la desviación estándar de precios: bandas de Bollinger de entrada (con una distancia más estrecha entre las bandas superior e inferior) y bandas de Bollinger de stop-loss (con una distancia más amplia).
  3. Cuando la EMA rápida cruza por encima de la banda de Bollinger superior, abra una posición corta; cuando la EMA rápida cruza por debajo de la banda de Bollinger inferior, abra una posición larga. Esto implica que el precio se ha desviado significativamente de la media y puede surgir una tendencia.
  4. Una vez abierta una posición, si el precio cruza más por encima de la banda superior de stop-loss de Bollinger, cierre todas las posiciones largas; si el precio cruza más por debajo de la banda inferior de stop-loss de Bollinger, cierre todas las posiciones cortas.
  5. El proceso anterior se repite continuamente, lo que permite a la estrategia ajustar de forma flexible las posiciones de acuerdo con las tendencias del mercado y detener las pérdidas de manera oportuna, con el fin de lograr rendimientos sólidos.

Ventajas estratégicas

  1. Considera tres promedios móviles de velocidades diferentes, que reflejan de manera exhaustiva las tendencias del mercado a diversos niveles.
  2. Introduce bandas de Bollinger como condiciones para la apertura y el cierre de posiciones, que pueden ajustarse dinámicamente según la volatilidad del mercado, adaptándose de manera flexible a las condiciones del mercado.
  3. Establece bandas de stop-loss para controlar las reducciones y cierra decisivamente las posiciones cuando el mercado fluctúa dramáticamente, evitando pérdidas amplificadas.
  4. La lógica es clara y las reglas son simples, fáciles de implementar y optimizar.
  5. Tiene una amplia gama de aplicaciones y puede ser eficaz para diversos mercados y períodos de tiempo.

Riesgos estratégicos

  1. En un mercado lateral, la apertura y el cierre frecuentes de posiciones pueden acarrear costes de transacción sustanciales, que reducen los beneficios.
  2. En la etapa inicial de una inversión de tendencia, la estrategia puede seguir operando en la dirección de la tendencia original, lo que resulta en ciertas pérdidas.
  3. Para condiciones de mercado extremas, como brechas de precios rápidas, las bandas de Bollinger de stop-loss pueden no controlar los riesgos de manera efectiva.
  4. La selección incorrecta de parámetros (por ejemplo, períodos de media móvil, anchos de banda de Bollinger, etc.) puede invalidar la estrategia.
  5. Si el mercado continúa fluctuando, es posible que la estrategia no pueda captar oportunidades de tendencia significativas durante un período prolongado.

Direcciones para la optimización de la estrategia

  1. Aumentar adecuadamente los parámetros de los períodos de medias móviles y las anchuras de la banda de Bollinger para reducir la frecuencia y los costes de negociación en un mercado lateral.
  2. Introduzca más indicadores técnicos o indicadores de sentimiento del mercado como filtros para mejorar la precisión de las señales de entrada y evitar perder operaciones que puedan ocurrir al comienzo de una tendencia.
  3. Establecer normas especiales para las condiciones extremas del mercado, como la suspensión de nuevas posiciones cuando se producen brechas, para controlar los riesgos.
  4. Optimizar los parámetros para encontrar la combinación más adecuada para el mercado actual, mejorando la solidez de la estrategia.
  5. Añadir las reglas de gestión de posiciones y de gestión de capital, tales como el ajuste de posiciones basadas en la fuerza de la tendencia o la rentabilidad, el establecimiento de líneas generales de stop-loss, etc., para controlar aún más los riesgos de la estrategia.

Resumen de las actividades

El Marina Parfenova School Project Bot es una estrategia de negociación cuantitativa basada en promedios móviles y Bandas de Bollinger. Intenta obtener ganancias capturando las tendencias del mercado mientras controla las reducciones a través de líneas de stop-loss de Bandas de Bollinger. La lógica de la estrategia es simple y directa, con una amplia gama de aplicaciones, y los parámetros se pueden ajustar de manera flexible de acuerdo con las características del mercado. Sin embargo, en la aplicación práctica, todavía se necesita prestar atención a cuestiones como mercados laterales, condiciones extremas, optimización de parámetros, etc., y es necesario un mayor refinamiento de las reglas de gestión de capital y posición. En general, esta estrategia puede servir como un marco de negociación cuantitativo básico, que puede ser continuamente optimizado y mejorado para lograr resultados comerciales más robustos.


/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy ("Marina Parfenova School Project Bot", overlay = true)

sma(price, n) =>
    result = 0.0
    for i = 0 to n - 1
        result := result + price [i] / n    
    result

wma(price, n) =>
    result = 0.0
    sum_weight = 0.0
    weight = 0.0
    for i = 0 to n - 1
        weight := n - 1
        result := result + price [i]*weight
        sum_weight := sum_weight + weight
    result/sum_weight

ema(price, n) =>
    result = 0.0
    alpha = 2/(n + 1)
    prevResult = price 
    if (na(result[1]) == false)
        prevResult := result[1]
    result := alpha * price + (1 - alpha) * prevResult

/// Настройки
n_slow = input.int(50, "Период медленной скользящей средней", step=5)
n_fast = input.int(4, "Период быстрой скользящей средней")
n_deviation = input.int(30, "Период среднеквадратического отклонения", step=5)
k_deviation_open = input.float(1.2, "Коэффициент ширины коридора покупки", step=0.1)
k_deviation_close = input.float(1.6, "Коэффициент ширины коридора продажи", step=0.1)

// ----- Линии индикаторов -----

// Медленная скользящая 
sma = sma(close, n_slow)
plot(sma, color=#d3d3d3)

// Линии Боллинджера, обозначающие коридор цены
bollinger_open = k_deviation_open * ta.stdev(close, n_deviation)
open_short_line = sma + bollinger_open
plot(open_short_line, color=#ec8383)
open_long_line = sma - bollinger_open
plot(open_long_line, color=#6dd86d)

bollinger_close = k_deviation_close * ta.stdev(close, n_deviation)
close_short_line = sma + bollinger_close
plot(close_short_line, color=#e3e3e3)
close_long_line = sma - bollinger_close
plot(close_long_line, color=#e3e3e3)

// Быстрая скользящая
ema = ema(close, n_fast)
plot(ema, color = color.aqua, linewidth = 2)

// ----- Сигналы для запуска стратегии -----

// если ema пересекает линию open_short сверху вниз - сигнал на создание ордера в short
if(ema[1] >= open_short_line[1] and ema < open_short_line)
    strategy.entry("short", strategy.short)

// если ema пересекает линию open_long снизу вверх - сигнал на создание ордера в long
if(ema[1] <= open_long_line[1] and ema > open_long_line)
    strategy.entry("long", strategy.long)

// если свеча пересекает верхнюю линию коридора продажи - закрываем все long-ордера 
if (high >= close_short_line)
    strategy.close("long")

// если свеча пересекает нижнюю линию коридора продажи - закрываем все short-ордера
if (low <= close_long_line)
    strategy.close("short")

Relacionados

Más.