Торговая стратегия Momentum Optimized Price Statistics на основе сглаженного пересечения Z-оценок

Z-SCORE SMA stdev PNL Momentum Filter
Дата создания: 2025-06-03 10:44:56 Последнее изменение: 2025-06-03 10:44:56
Копировать: 0 Количество просмотров: 330
2
Подписаться
319
Подписчики

Торговая стратегия Momentum Optimized Price Statistics на основе сглаженного пересечения Z-оценок Торговая стратегия Momentum Optimized Price Statistics на основе сглаженного пересечения Z-оценок

Обзор

Эта стратегия основана на статистической концепции Z-Score, используемой для выявления статистических отклонений цены от ее локального среднего значения. Эта стратегия рассчитывает Z-Score для закрытия цены, а затем применяет краткосрочные и долгосрочные движущиеся средние для сглаживания Z-Score.

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

В основе этой стратегии лежит вычисление и применение Z-оценки. Z-оценка - это статистическая величина, используемая для измерения отклонения точки данных от среднего значения выборки в единицах стандартного отклонения. Z = (конечная цена - SMA ((конечная цена, N)) / STDEV ((конечная цена, N)) где N - базовый цикл, определяемый пользователем.

Процесс реализации стратегии выглядит следующим образом:

  1. Расчет первоначальной оценки Z по цене закрытия
  2. Краткосрочное сглаживание (SMA) при применении к исходному Z-рейтингу
  3. Применение долгосрочного сглаживания к исходному Z-рейтингу (SMA)
  4. При ношении долгосрочного плавного Z-рейтинга на краткосрочный плавный Z-рейтинг, если выполняются дополнительные условия, открываются позиции и делается больше
  5. При ношении долгосрочного сглаживающего Z-рейтинга под краткосрочным сглаживающим Z-рейтингом, если выполняются дополнительные условия, то позиция плавна

Дополнительные условия:

  • Промежуток сигнала: между двумя одинаковыми типами сигнала (входящий или исходящий) должно быть минимальное количество K-линий
  • Фильтрация мощности: запрещается играть, когда появляются три или более поднятых K-линий подряд; запрещается играть, когда появляются три или более сниженных K-линий подряд

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

  1. Базовая статистикаZ-оценка - это сложный статистический инструмент, который позволяет эффективно определить отклонение цен от их среднего значения, чтобы определить вероятность того, что цена вернется к среднему значению.
  2. Гладкая обработка: снижение шума и улучшение качества сигнала путем применения краткосрочной и долгосрочной сглаживания к исходному Z-рейтингу.
  3. Контроль интервала сигнала: эффективно снижает перепланировку и дублирование сигналов путем установки минимального интервала между сигналами
  4. Мощный фильтрНапример, в случае, если в течение дня у вас будет невысокий уровень дохода, вы можете использовать его в качестве инструмента для снижения риска.
  5. КраткостьСтратегия: использует только данные о цене закрытия, не зависит от сложных комбинаций индикаторов, легко понять и реализовать.
  6. Наблюдение за прибылью и убытком в реальном времениВключает в себя таблицы с реальными показателями неиспользованных прибылей, которые помогают трейдерам контролировать состояние своих позиций.
  7. Гибкость параметров: Пользователи могут корректировать базовый цикл Z-рейтинга и сглаживание параметров в зависимости от различных рынков и временных рамок, повышая адаптивность.

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

  1. Риски статистических гипотезZ-оценка предполагает, что распределение цен приблизительно нормальное, и может плохо работать в рыночной среде с неординарным распределением.
  2. Параметр ЧувствительностьZ-оценка: выбор базового цикла и скольжения параметров оказывает существенное влияние на эффективность стратегии. Неправильный выбор параметров может привести к перенастройке или задержке сигнала.
  3. Ограничение на один фактор: Стратегия основана на перекрестном генерировании сигнала только на Z-оценке, отсутствие других подтверждающих показателей может привести к ложному сигналу.
  4. Зависимость от рыночной средыПри этом, в случае, если рынок находится в сильной тенденции, стратегия, основанная на регрессии средней величины, может постоянно давать ошибочные сигналы.
  5. Задержка сигнала: Из-за использования скольжения скользящей средней, сигнал может задерживаться, пропуская лучшие точки входа или выхода.

Решение проблемы:

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

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

  1. Определение тенденций и интеграция: добавление компонента для распознавания тенденции, корректировка стратегического поведения на рынках с четким направлением тренда. Это может быть достигнуто с помощью долгосрочных скользящих средних или индикатора ADX, чтобы избежать ошибочного среднезначного обратного сигнала в сильных тенденциях.
  2. Корректировка волатильности: реализация адаптивной корректировки Z-оценочных параметров, автоматическая оптимизация базового цикла и сглаживания параметров в соответствии с волатильностью рынка. Это повысит устойчивость стратегии в различных рыночных условиях.
  3. Анализ нескольких временных рамокZ-оценочный сигнал для интеграции более высоких временных рамок в качестве подтверждения, торгуйте только при совпадении сигналов нескольких временных рамок, уменьшая ложные сигналы.
  4. Остановка убытков: реализация динамического стоп-лосса на основе диапазона колебаний Z-рейтинга, повышение способности к управлению рисками. Например, можно установить стоп-лосса в качестве определенного отклонения от коэффициента входного Z-рейтинга.
  5. Часть прибыли: реализация стратегии поэтапного получения прибыли, частичная ликвидация позиций при достижении определенного понижения Z-оценки, оптимизация управления капиталом.
  6. Подтверждение поставки: добавление анализа объема сделок в качестве подтверждения сделки, выполнение сделки только при поддержке Z-оценочного сигнала объема сделок, повышение качества сигнала.
  7. Портфель показателей: Сочетание Z-оценки с другими статистическими или техническими показателями, такими как RSI или Брин-Бенд, для создания многофакторной модели принятия решений и повышения надежности стратегии.

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

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

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

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

Исходный код стратегии
/*backtest
start: 2024-06-03 00:00:00
end: 2025-06-02 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Price Statistical Strategy-Z Score V 1.01", overlay=true)

// === Enable / Disable Z-Score Strategy Block ===
enableZScore = input.bool(true, title="Enable Smoothed Z-Score Strategy", tooltip="When enabled, this block calculates a smoothed Z-Score of the closing price and generates entry/exit signals based on crossover behavior between short-term and long-term smoothed Z-Scores.\n\nRecommended for quick and classic detection of price deviation from mean.\nSensitive to outliers. Best suited for relatively normal-distributed market conditions.")

// === Z-Score Parameters ===
zBaseLength = input.int(3, minval=1, title="Z-Score Base Period")
shortSmooth = input.int(3, title="Short-Term Smoothing")
longSmooth = input.int(5, title="Long-Term Smoothing")

// === Z-Score Calculation Function ===
f_zscore(src, length) =>
    mean = ta.sma(src, length)
    std_dev = ta.stdev(src, length)
    z = (src - mean) / std_dev
    z

// === Z-Score Logic ===
zRaw = f_zscore(close, zBaseLength)
zShort = ta.sma(zRaw, shortSmooth)
zLong = ta.sma(zRaw, longSmooth)


// === Minimum gap between identical signals ===
gapBars = input.int(5, minval=1, title="Bars gap between identical signals", tooltip="Minimum number of bars required between two identical signals (entry or exit). Helps reduce signal noise.")


// === Candle-based momentum filters ===
bullish_3bars = close > close[1] and close[1] > close[2] and close[2] > close[3] and close[3] > close[4]
bearish_3bars = close < close[1] and close[1] < close[2] and close[2] < close[3] and close[3] < close[4]

// === Entry and Exit Logic with minimum signal gap and candle momentum filter ===
var int lastEntryBar = na
var int lastExitBar  = na

if enableZScore
    longCondition = (zShort > zLong)
    exitCondition = (zShort < zLong)

    if longCondition and (na(lastEntryBar) or bar_index - lastEntryBar > gapBars) and not bullish_3bars
        strategy.entry("Z Score", strategy.long)
        lastEntryBar := bar_index

    if exitCondition and (na(lastExitBar) or bar_index - lastExitBar > gapBars) and not bearish_3bars
        strategy.close("Z Score", comment="Z Score")
        lastExitBar := bar_index

// === Real-time PnL Table for Last Open Position ===
var table positionTable = table.new(position.bottom_right, 2, 2, border_width=1)

// Header Labels
table.cell(positionTable, 0, 0, "Entry Price", text_color=color.white, bgcolor=color.gray)
table.cell(positionTable, 1, 0, "Unrealized PnL (%)", text_color=color.white, bgcolor=color.gray)

// Values (only when position is open)
isLong        = strategy.position_size > 0
entryPrice    = strategy.position_avg_price
unrealizedPnL = isLong ? (close - entryPrice) / entryPrice * 100 : na

// Define dynamic text color for PnL
pnlColor = unrealizedPnL > 0 ? color.green : unrealizedPnL < 0 ? color.red : color.gray

// Update Table Content
if isLong
    table.cell(positionTable, 0, 1, str.tostring(entryPrice, "#.####"), text_color=color.gray, bgcolor=color.new(color.gray, 90))
    table.cell(positionTable, 1, 1, str.tostring(unrealizedPnL, "#.##") + " %", text_color=pnlColor, bgcolor=color.new(pnlColor, 90))
else
    table.cell(positionTable, 0, 1, "—", text_color=color.gray, bgcolor=color.new(color.gray, 90))
    table.cell(positionTable, 1, 1, "—", text_color=color.gray, bgcolor=color.new(color.gray, 90))