Estrategia de cruce de impulso basada en el promedio móvil del índice ponderado por liquidez

LWMA EMA VOL stdev CROSS
Fecha de creación: 2025-01-17 15:45:55 Última modificación: 2025-01-17 15:45:55
Copiar: 0 Número de Visitas: 365
1
Seguir
1617
Seguidores

Estrategia de cruce de impulso basada en el promedio móvil del índice ponderado por liquidez

Descripción general

Esta estrategia es un sistema de negociación basado en promedios móviles ponderados por liquidez. Mide la liquidez del mercado monitoreando la relación entre las fluctuaciones de precios y el volumen de negociación y construye promedios móviles rápidos y lentos sobre esta base. Se genera una señal de compra cuando la línea rápida cruza por encima de la línea lenta, y se genera una señal de venta cuando cruza por debajo. La estrategia presta especial atención a los eventos de liquidez anormales y registra puntos de precios clave a través de matrices, proporcionando así oportunidades comerciales más precisas.

Principio de estrategia

El núcleo de la estrategia es medir la liquidez del mercado a través de la relación entre el volumen de operaciones y el cambio de precios. Los pasos de implementación específicos son los siguientes:

  1. Calcular el indicador de liquidez: Utilice el volumen dividido por el valor absoluto de la diferencia entre el precio de cierre y el precio de apertura.
  2. Establecimiento de límites de liquidez: identificación de liquidez anormal con EMA y desviación estándar
  3. Mantener la matriz de precios: registrar el precio al superar el límite de liquidez
  4. Construcción de medias móviles: cálculo de medias móviles exponenciales rápidas y lentas en función de eventos de liquidez
  5. Generar señales comerciales: determinar puntos de compra y venta a través de cruces de medias móviles

Ventajas estratégicas

  1. Percepción de liquidez: al combinar el volumen de operaciones con los cambios de precios, puede capturar con mayor precisión la actividad del mercado.
  2. Seguimiento de eventos anormales: registre puntos de precio clave a través de matrices para evitar perder oportunidades de mercado importantes
  3. Adaptación dinámica: la característica de reducción de peso de la EMA permite que la estrategia se adapte mejor a los cambios del mercado.
  4. Control de riesgos: Proporcionar señales claras de entrada y salida a través del cruce de medias móviles
  5. Personalización: Se pueden ajustar múltiples parámetros para adaptarse a diferentes entornos de mercado.

Riesgo estratégico

  1. Sensibilidad de los parámetros: el efecto de la estrategia depende en gran medida de la configuración de los parámetros y debe optimizarse continuamente.
  2. Retraso: Los sistemas basados ​​en promedios móviles tienen un retraso inherente
  3. Dependencia del mercado: rendimiento volátil en determinados períodos de tiempo y mercados
  4. Falsas rupturas: pueden generar señales falsas durante períodos de alta volatilidad.
  5. Costos de transacción: Las transacciones frecuentes pueden resultar en costos más altos.

Dirección de optimización de la estrategia

  1. Introducir el filtro:
  • Agregue indicadores de confirmación de tendencia como ADX
  • Uso de indicadores de volatilidad para filtrar señales falsas
  1. Tiempo de entrada mejorado:
  • Combinando niveles de soporte y resistencia
  • Considere la confirmación de la ruptura del volumen
  1. Selección de parámetros de optimización:
  • Implementación de parámetros adaptativos
  • Ajuste dinámico en función de las condiciones del mercado
  1. Gestión de riesgos mejorada:
  • Añadir mecanismo de stop loss y take profit
  • Implementación de un sistema de gestión de almacenes

Resumir

Se trata de una estrategia innovadora que combina el análisis de liquidez con indicadores técnicos, optimizando el tradicional sistema de cruce de medias móviles mediante el seguimiento de anomalías de liquidez del mercado. Si bien funciona bien en entornos de mercado específicos, aún necesita mayor optimización para mejorar la estabilidad y la aplicabilidad. Se recomienda que los traders realicen pruebas suficientes antes del uso real y lo combinen con otros indicadores para construir un sistema de trading más completo.

Código Fuente de la Estrategia
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//Liquidity ignoring price location

//@version=6
strategy("Liquidity Weighted Moving Averages [AlgoAlpha]", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3)

// Inputs
outlierThreshold = input.int(10, "Outlier Threshold Length")
fastMovingAverageLength = input.int(50, "Fast MA Length")
slowMovingAverageLength = input.int(100, "Slow MA Length")
start_date = input(timestamp("2018-01-01 00:00"), title="Start Date")
end_date = input(timestamp("2069-12-31 23:59"), title="End Date")

// Define liquidity based on volume and price movement
priceMovementLiquidity = volume / math.abs(close - open)

// Calculate the boundary for liquidity to identify outliers
liquidityBoundary = ta.ema(priceMovementLiquidity, outlierThreshold) + ta.stdev(priceMovementLiquidity, outlierThreshold)

// Initialize an array to store liquidity values when they cross the boundary
var liquidityValues = array.new_float(5)

// Check if the liquidity crosses above the boundary and update the array
if ta.crossover(priceMovementLiquidity, liquidityBoundary)
    array.insert(liquidityValues, 0, close)
    if array.size(liquidityValues) > 5
        array.pop(liquidityValues)

// Calculate the Exponential Moving Averages for the close price at the last liquidity crossover
fastEMA = ta.ema(array.size(liquidityValues) > 0 ? array.get(liquidityValues, 0) : na, fastMovingAverageLength)
slowEMA = ta.ema(array.size(liquidityValues) > 0 ? array.get(liquidityValues, 0) : na, slowMovingAverageLength)

// Trading Logic
in_date_range = true
buy_signal = ta.crossover(fastEMA, slowEMA) and in_date_range
sell_signal = ta.crossunder(fastEMA, slowEMA) and in_date_range

// Strategy Entry and Exit
if (buy_signal)
    strategy.entry("Buy", strategy.long)

if (sell_signal)
    strategy.close("Buy")

// Plotting
fastPlot = plot(fastEMA, color=fastEMA > slowEMA ? color.new(#00ffbb, 50) : color.new(#ff1100, 50), title="Fast EMA")
slowPlot = plot(slowEMA, color=fastEMA > slowEMA ? color.new(#00ffbb, 50) : color.new(#ff1100, 50), title="Slow EMA")

// Create a fill between the fast and slow EMA plots with appropriate color based on crossover
fill(fastPlot, slowPlot, fastEMA > slowEMA ? color.new(#00ffbb, 50) : color.new(#ff1100, 50))