Эта стратегия представляет собой торговую систему, основанную на взвешенных по ликвидности скользящих средних, измеряющую ликвидность рынка через связь между движением цен и объемом торговли. Она строит быстрые и медленные скользящие средние для генерации сигналов покупки, когда быстрая линия пересекает над медленной линией, и сигналов продажи, когда она пересекает ниже. Стратегия особенно фокусируется на аномальных событиях ликвидности, записывая ключевые уровни цен в массиве для более точных торговых возможностей.
Основной механизм основан на измерении ликвидности рынка через соотношение объема к движению цен. 1. Вычислить показатель ликвидности: объем деленный на абсолютную разницу между ценой закрытия и ценой открытия Установка границы ликвидности: выявление ненормальной ликвидности с использованием EMA и стандартного отклонения 3. Сохранить ценовой массив: записывать цены при нарушении лимита ликвидности 4. Создание скользящих средних: Расчет быстрых и медленных EMA на основе событий ликвидности 5. Создание торговых сигналов: определение пунктов входа и выхода с помощью перекрестных скользящих средних
Эта инновационная стратегия сочетает в себе анализ ликвидности с техническими показателями, оптимизируя традиционные системы перекрестного перемещения скользящих средних путем мониторинга аномалий ликвидности рынка. Хотя она показывает многообещающие результаты в конкретных рыночных условиях, для улучшения стабильности и применимости необходима дальнейшая оптимизация. Трейдеры должны тщательно тестировать перед реализацией и рассматривать возможность сочетания с другими показателями для более надежной торговой системы.
/*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))