Estrategia de combinación de promedios móviles dinámicos

El autor:¿ Qué pasa?, Fecha: 2024-02-05 10:23:10
Las etiquetas:

img

Resumen general

La estrategia de intercambio de promedios móviles dinámicos es una estrategia de negociación combinada que integra múltiples indicadores técnicos y detecciones de condiciones de mercado. Cálcula dinámicamente la volatilidad del mercado y determina tres fases del mercado basadas en la distancia del precio del promedio móvil a largo plazo y la volatilidad: volátil, tendencia y consolidación.

Estrategia lógica

Calcular la volatilidad del mercado

Utilice el indicador ATR para medir la volatilidad del mercado de los últimos 14 días. Luego aplique un filtro SMA de 100 días para obtener la volatilidad promedio.

Determinar las fases del mercado

Calcule la distancia entre el precio y la SMA de 200 días. Si la distancia absoluta excede 1,5 veces la volatilidad promedio con una dirección clara, se determina como un mercado de tendencia. Si la volatilidad actual excede 1,5 veces la media, es un mercado volátil.

Las operaciones de transferencia de activos de la EMA

El período de EMA rápida es de 10 días. El período de SMA lenta es de 30 días. Una señal de compra se genera cuando la EMA rápida cruza por encima de la SMA lenta.

El MACD

Calcular el MACD con 12, 26, 9 parámetros. Un histograma MACD positivo da una señal de compra.

Las bandas de Bollinger

Calcular el canal de desviación estándar de 20 días. Si el ancho del canal es menor que la SMA de 20 días, se está consolidando.

Reglas de entrada

Volátil: Introduzca largo cuando el cruce o el MACD sea positivo con el precio dentro de las bandas.

Tendencia: Introducir largo cuando el cruce o el MACD es positivo.

Consolidación: Introduzca largo cuando se cruce y el precio está por encima de la banda inferior.

Reglas de salida

General: Salida cuando el MACD sea negativo durante 2 barras y el precio baje 2 días.

Volátil: más salida cuando el StockRSI se sobrecompra.

Consolidación: más salida cuando el precio está por debajo de la banda superior.

Ventajas

La estrategia tiene los siguientes puntos fuertes:

  1. Operaciones sistemáticas con intervenciones menos subjetivas.

  2. Parámetros adaptativos ajustados según las condiciones del mercado.

  3. Mayor precisión de la señal con combinación de indicadores múltiples.

  4. El riesgo es menor con las bandas de Bollinger.

  5. Filtración de condiciones redondeadas para evitar señales falsas.

  6. Detener pérdidas dinámicas y obtener ganancias para seguir las tendencias.

Los riesgos

Los principales riesgos son:

  1. Estrategia no válida si el ajuste de parámetros es incorrecto.

  2. Fallo del modelo debido a eventos repentinos, actualización de lógica recomendada.

  3. Margen de ganancia reducido por el costo de negociación.

  4. Mayor complejidad con múltiples módulos, indicadores básicos recomendados.

Mejoramiento

Direcciones potenciales de optimización:

  1. Mejorar los criterios de evaluación del entorno del mercado.

  2. Introduzca el aprendizaje automático para la adaptación automática de parámetros.

  3. Añadir análisis de texto para detectar eventos.

  4. Pruebas de retroceso de varios mercados para encontrar los mejores parámetros.

  5. Implementar una estrategia de parada para obtener mejores beneficios.

Conclusión

La estrategia de Crossover de promedio móvil dinámico es un sistema de negociación cuantitativo inteligente de múltiples indicadores. Ajusta los parámetros dinámicamente en función de las condiciones del mercado para implementar una negociación sistemática basada en reglas. La estrategia es altamente adaptable y determinista. Pero los parámetros y módulos adicionales deben introducirse cuidadosamente para evitar la complejidad. En general, esta es una idea de estrategia cuantitativa factible.


/*backtest
start: 2024-01-28 00:00:00
end: 2024-02-04 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Improved Custom Strategy", shorttitle="ICS", overlay=true)

// Volatility
volatility = ta.atr(14)
avg_volatility_sma = ta.sma(volatility, 100)
avg_volatility = na(avg_volatility_sma) ? 0 : avg_volatility_sma

// Market Phase detection
long_term_ma = ta.sma(close, 200)
distance_from_long_term_ma = close - long_term_ma
var bool isTrending = math.abs(distance_from_long_term_ma) > 1.5 * avg_volatility and not na(distance_from_long_term_ma)
var bool isVolatile = volatility > 1.5 * avg_volatility

// EMA/MA Crossover
fast_length = 10
slow_length = 30
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.sma(close, slow_length)
crossover_signal = ta.crossover(fast_ma, slow_ma)

// MACD
[macdLine, signalLine, macdHistogram] = ta.macd(close, 12, 26, 9)
macd_signal = crossover_signal or (macdHistogram > 0)

// Bollinger Bands
source = close
basis = ta.sma(source, 20)
upper = basis + 2 * ta.stdev(source, 20)
lower = basis - 2 * ta.stdev(source, 20)
isConsolidating = (upper - lower) < ta.sma(upper - lower, 20)

// StockRSI
length = 14
K = 100 * (close - ta.lowest(close, length)) / (ta.highest(close, length) - ta.lowest(close, length))
D = ta.sma(K, 3)
overbought = 75
oversold = 25

var float potential_SL = na
var float potential_TP = na
var bool buy_condition = na
var bool sell_condition = na

// Buy and Sell Control Variables
var bool hasBought = false
var bool hasSold = true

// Previous values tracking
prev_macdHistogram = macdHistogram[1]
prev_close = close[1]

// Modify sell_condition with the new criteria
if isVolatile
    buy_condition := not hasBought and crossover_signal or macd_signal and (close > lower) and (close < upper)
    sell_condition := hasBought and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
    potential_SL := close - 0.5 * volatility
    potential_TP := close + volatility

if isTrending
    buy_condition := not hasBought and crossover_signal or macd_signal
    sell_condition := hasBought and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
    potential_SL := close - volatility
    potential_TP := close + 2 * volatility

if isConsolidating
    buy_condition := not hasBought and crossover_signal and (close > lower)
    sell_condition := hasBought and (close < upper) and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
    potential_SL := close - 0.5 * volatility
    potential_TP := close + volatility

// Update the hasBought and hasSold flags
if buy_condition
    hasBought := true
    hasSold := false

if sell_condition
    hasBought := false
    hasSold := true

// Strategy Entry and Exit
if buy_condition
    strategy.entry("BUY", strategy.long, stop=potential_SL, limit=potential_TP)
    strategy.exit("SELL_TS", from_entry="BUY", trail_price=close, trail_offset=close * 0.05)

if sell_condition
    strategy.close("BUY")
    
// Visualization
plotshape(series=buy_condition, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small)
plotshape(series=sell_condition, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small)

plot(long_term_ma, color=color.gray, title="200-Day MA", linewidth=1)
plot(potential_SL, title="SL Level", color=color.red, linewidth=1, style=plot.style_linebr)
plot(potential_TP, title="TP Level", color=color.green, linewidth=1, style=plot.style_linebr)

bgcolor(isVolatile ? color.new(color.purple, 90) : isTrending ? color.new(color.blue, 90) : isConsolidating ? color.new(color.orange, 90) : na)


Más.