Esta estrategia es un sistema de negociación basado en promedios móviles ponderados por liquidez, que mide la liquidez del mercado a través de la relación entre el movimiento de precios y el volumen de negociación. Construye promedios móviles rápidos y lentos para generar señales de compra cuando la línea rápida cruza por encima de la línea lenta y señales de venta cuando cruza por debajo. La estrategia se centra particularmente en eventos de liquidez anormales, registrando los niveles clave de precios en una matriz para oportunidades comerciales más precisas.
El mecanismo central se basa en la medición de la liquidez del mercado a través de la relación entre el volumen y el movimiento de los precios. Calcular el indicador de liquidez: volumen dividido por la diferencia absoluta entre los precios de cierre y de apertura 2. Establecer el límite de liquidez: Identificar la liquidez anormal utilizando la EMA y la desviación estándar 3. Mantener la matriz de precios: registrar precios cuando se viole el límite de liquidez 4. Construir promedios móviles: Calcular las EMA rápidas y lentas basadas en eventos de liquidez 5. Generar señales comerciales: Determinar los puntos de entrada y salida mediante cruces de promedios móviles
Esta estrategia innovadora combina el análisis de liquidez con indicadores técnicos, optimizando los sistemas tradicionales de cruce de promedios móviles mediante el monitoreo de anomalías de liquidez del mercado. Aunque muestra resultados prometedores en condiciones específicas de mercado, se necesita una mayor optimización para mejorar la estabilidad y la aplicabilidad. Los operadores deben probar a fondo antes de la implementación en vivo y considerar la combinación con otros indicadores para un sistema de negociación más robusto.
/*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))