Estrategia de cruce de medias móviles dinámicas


Fecha de creación: 2024-02-05 10:23:10 Última modificación: 2024-02-05 10:23:10
Copiar: 0 Número de Visitas: 536
1
Seguir
1617
Seguidores

Estrategia de cruce de medias móviles dinámicas

Descripción general

La estrategia de cruce de promedio móvil dinámico (Dynamic Moving Average Crossover Combo Strategy) es una estrategia de composición de operaciones que integra varios indicadores técnicos y detección de fases de mercado. Calcula dinámicamente la volatilidad del mercado, juzga la volatilidad del mercado en función de la distancia y la volatilidad de los precios con respecto a las medias móviles a largo plazo en las tres fases del mercado: oscilación, tendencia y ordenamiento.

Principio de estrategia

Cálculo de la volatilidad del mercado

El indicador ATR calcula la volatilidad intradiaria del mercado en los últimos 14 días. Luego se filtra la volatilidad promedio con una media móvil simple de 100 días.

Las etapas del mercado

Calcula la distancia entre el precio y la media móvil simple de 200 días. Si la distancia es más de 1,5 veces la volatilidad promedio y la dirección es clara, se considera una situación de tendencia. Si la volatilidad actual es más de 1,5 veces la volatilidad promedio, se considera una situación de choque.

EMA/SMA cruzado

El EMA rápido tiene un ciclo de 10 días y el SMA lento tiene un ciclo de 30 días. Cuando el EMA rápido atraviesa el SMA lento, genera una señal de compra.

MACD

Calcula el MACD de los parámetros 12, 26 y 9. La señal de compra se genera cuando la columna MACD se vuelve positiva.

Bollinger Bands

Calcula el canal de diferencia estándar de 20 días. Si el ancho del canal es menor que su propia SMA de 20 días, se juzga como período de ordenamiento.

Reglas de ingreso

Periodo de oscilación: la línea cruza lentamente o la columna MACD se corrige, y el precio de cierre está dentro de las Bandas de Bollinger.

La fase de tendencia: el cruce rápido y lento de líneas o el cambio de la columna MACD en la entrada regular hace más.

El precio de venta es más alto que el precio de venta de la banda baja.

Reglas de juego

Si se cumplen las siguientes condiciones, se inicia una posición cerrada: el MACD tiene dos líneas K consecutivas negativas, y el precio de cierre ha bajado dos días consecutivos.

El StockRSI también está en la zona de sobrecompra.

En la temporada de clasificación, los jugadores se presentan cuando el precio está por debajo de la banda superior.

Análisis de las ventajas

Se trata de una estrategia de negociación inteligente, combinada con el juicio de las circunstancias del mercado, que tiene las siguientes ventajas:

  1. Las operaciones se sistematizan y reducen las intervenciones subjetivas.

  2. La combinación de los parámetros de la estrategia de ajuste al entorno del mercado es más adaptable.

  3. La combinación de múltiples indicadores aumenta la certeza de la señal.

  4. Las Bandas de Bollinger se detienen automáticamente para reducir el riesgo.

  5. En la actualidad, la mayoría de los países de la Unión Europea tienen un sistema de filtración de señales falsas.

  6. El objetivo es que los usuarios de la plataforma de criptomonedas de la plataforma de criptomonedas de la plataforma de criptomonedas de la plataforma de criptomonedas de la plataforma de criptomonedas.

Análisis de riesgos

Los principales riesgos son:

  1. La configuración incorrecta de los parámetros puede causar que la estrategia falle. Se recomienda optimizar la combinación de parámetros.

  2. Se recomienda actualizar la lógica de la estrategia a tiempo.

  3. Se recomienda optar por un corredor de bajo costo.

  4. La combinación de varios indicadores aumenta la complejidad de la estrategia. Se recomienda elegir un indicador central.

Dirección de optimización

Se puede seguir optimizando desde las siguientes dimensiones:

  1. Optimizar los criterios de evaluación del entorno de mercado y mejorar la precisión.

  2. Se añade un módulo de aprendizaje automático para la adaptación de parámetros.

  3. En combinación con el procesamiento de textos, se puede evaluar el riesgo de eventos importantes.

  4. El análisis de mercados múltiples para encontrar la mejor combinación de parámetros

  5. La estrategia de trailing stop para aumentar la velocidad de las paradas.

Resumir

La estrategia de combinación cruzada de promedios móviles es una estrategia de comercio inteligente de múltiples indicadores. Es capaz de combinar parámetros de ajuste al entorno del mercado para lograr una negociación sistematizada de acuerdo con las condiciones. Tiene una mayor adaptabilidad y determinación.

Código Fuente de la Estrategia
/*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)