Стратегия кроссовера Momentum на основе скользящей средней индекса, взвешенной по ликвидности

LWMA EMA VOL stdev CROSS
Дата создания: 2025-01-17 15:45:55 Последнее изменение: 2025-01-17 15:45:55
Копировать: 0 Количество просмотров: 365
1
Подписаться
1617
Подписчики

Стратегия кроссовера Momentum на основе скользящей средней индекса, взвешенной по ликвидности

Обзор

Стратегия представляет собой торговую систему, основанную на скользящих средних, взвешенных по ликвидности. Она измеряет ликвидность рынка, отслеживая взаимосвязь между колебаниями цен и объемом торговли, и на этой основе строит быстрые и медленные скользящие средние. Сигнал на покупку генерируется, когда быстрая линия пересекает медленную линию снизу вверх, а сигнал на продажу генерируется, когда она пересекает ее снизу вверх. Стратегия уделяет особое внимание аномальным событиям ликвидности и регистрирует ключевые ценовые точки с помощью массивов, тем самым предоставляя более точные торговые возможности.

Стратегический принцип

Суть стратегии заключается в измерении ликвидности рынка посредством соотношения объема торгов к изменению цены. Конкретные шаги по внедрению следующие:

  1. Рассчитайте показатель ликвидности: используйте объем, деленный на абсолютное значение разницы между ценой закрытия и ценой открытия.
  2. Установление границ ликвидности: выявление аномальной ликвидности с помощью EMA и стандартного отклонения
  3. Поддержание ценового массива: запись цены при прорыве границы ликвидности
  4. Построение скользящих средних: расчет быстрых и медленных EMA на основе событий ликвидности
  5. Генерируйте торговые сигналы: определяйте точки покупки и продажи с помощью пересечений скользящих средних

Стратегические преимущества

  1. Восприятие ликвидности: Объединяя объем торговли с изменениями цен, можно более точно отразить рыночную активность.
  2. Отслеживание аномальных событий: запись ключевых ценовых точек с помощью массивов, чтобы не упустить важные рыночные возможности
  3. Динамическая адаптация: функция снижения веса EMA позволяет стратегии лучше адаптироваться к изменениям рынка.
  4. Контроль риска: предоставление четких сигналов входа и выхода посредством пересечения скользящих средних.
  5. Возможность настройки: множество параметров можно настроить для адаптации к различным рыночным условиям.

Стратегический риск

  1. Чувствительность параметров: эффект стратегии сильно зависит от настроек параметров и требует постоянной оптимизации.
  2. Задержка: Системы, основанные на скользящих средних, имеют неотъемлемую задержку.
  3. Зависимость от рынка: нестабильные показатели в определенные периоды времени и на определенных рынках
  4. Ложные прорывы: могут генерировать ложные сигналы в периоды высокой волатильности.
  5. Транзакционные издержки: частые транзакции могут привести к более высоким издержкам.

Направление оптимизации стратегии

  1. Представляем фильтр:
  • Добавьте индикаторы подтверждения тренда, такие как ADX
  • Использование индикаторов волатильности для фильтрации ложных сигналов
  1. Улучшенное время входа:
  • Объединение уровней поддержки и сопротивления
  • Рассмотрите подтверждение прорыва объема
  1. Выбор параметров оптимизации:
  • Реализация адаптивных параметров
  • Динамическая корректировка на основе рыночных условий
  1. Улучшенное управление рисками:
  • Добавить механизм стоп-лосса и тейк-профита
  • Внедрение системы управления складом

Подвести итог

Это инновационная стратегия, которая сочетает анализ ликвидности с техническими индикаторами, оптимизируя традиционную систему пересечения скользящих средних путем мониторинга аномалий ликвидности рынка. Хотя он хорошо работает в определенных рыночных условиях, ему все еще требуется дальнейшая оптимизация для повышения стабильности и применимости. Трейдерам рекомендуется провести достаточное тестирование перед использованием в реальном времени и объединить его с другими индикаторами для создания более полной торговой системы.

Исходный код стратегии
/*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))