Количественная торговая стратегия с использованием динамического пересечения скользящих средних Z-Score

Z-SCORE SMA MA ALERT trading
Дата создания: 2025-06-27 11:37:40 Последнее изменение: 2025-06-27 11:37:40
Копировать: 0 Количество просмотров: 356
2
Подписаться
319
Подписчики

Количественная торговая стратегия с использованием динамического пересечения скользящих средних Z-Score Количественная торговая стратегия с использованием динамического пересечения скользящих средних Z-Score

Обзор

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

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

В основе этой стратегии лежит принятие торговых решений на основе статистических показателей Z-Score. Z-Score - это статистическая величина, измеряющая, на сколько стандартных отклонений от среднего отклонения в одной точке данных, рассчитанная по формуле: Z = (X - μ) / σ, где X - текущая цена, μ - среднее значение, σ - стандартное отклонение.

Реализация стратегии включает в себя следующие шаги:

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

В то же время, стратегия также предоставляет традиционные скользящие средние ((MA) в качестве вспомогательных ссылок, включая три средних линии: краткосрочную ((5 циклов), среднесрочную ((21 циклов) и долгосрочную ((60 циклов). Эти средние линии помогают трейдерам более интуитивно наблюдать за изменениями в ценовых тенденциях.

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

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

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

  3. Гибкая параметровая настройкаПользователь может настроить Z-Score на циклы вычисления, сглаживание параметров и интервалы сигналов в зависимости от особенностей различных рынков и торговых видов, чтобы реализовать индивидуальную конфигурацию стратегии.

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

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

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

  1. Параметр ЧувствительностьВычисление Z-Score и сглаживание параметров оказывают значительное влияние на эффективность стратегии. Неправильная настройка параметров может привести к чрезмерному трейдингу или пропуску важных сигналов. Рекомендуется найти наиболее подходящую комбинацию параметров для конкретного рынка с помощью исторической ретроспекции.

  2. Слабость рынка: В рыночных волатильность поперечного, Z-Score может часто пересекать средние значения, создавая избыточные торговые сигналы, увеличение стоимости торговли и может привести к постоянным убыткам. Можно рассмотреть возможность добавления в стратегии условия фильтрации тенденции, или приостановить торговлю при выявлении волатильность рынка.

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

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

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

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

  1. Добавить фильтр тренда: можно вводить дополнительные трендовые индикаторы (например, ADX или пропускную способность Бринга) для идентификации состояния рынка, применять различные стратегические параметры или логику торговли в сильно трендовых и волатильных рынках.

  2. Добавление параметров адаптации: адаптировать циклы Z-Score и интервалы сигналов в зависимости от динамики рыночной волатильности, чтобы стратегия могла лучше адаптироваться к различным рыночным условиям

  3. Управление рискамиВнедрение механизмов по устранению убытков на основе ATR или фиксированной процентной ставки и разработка разумных правил управления позициями для контроля риска одноразовой сделки.

  4. Многоциклический анализ: Комплексный учет сигналов Z-Score с различными временными периодами, совершение сделок только при совпадении сигналов с несколькими временными периодами, повышение надежности сигнала.

  5. В сочетании с другими показателямиМожно рассмотреть возможность объединения Z-Score с другими техническими показателями, такими как объем торговли, относительно сильный индикатор (RSI) или бринговые полосы, чтобы создать более полные условия торговли.

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

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

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

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

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

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

//@version=6
strategy("Z Score 主图策略 — v1.02", overlay=true)

// 参数
enableZScore = input.bool(true, title="启用Z分数策略")
zBaseLength  = input.int(3, minval=1, title="Z分数基础周期")
shortSmooth  = input.int(3, title="短期平滑")
longSmooth   = input.int(5, title="长期平滑")
gapBars      = input.int(5, minval=1, title="相同信号间隔K线数")

// Z 分数
f_zscore(src, len) =>
    mean = ta.sma(src, len)
    std = ta.stdev(src, len)
    (src - mean) / std

zRaw   = f_zscore(close, zBaseLength)
zShort = ta.sma(zRaw, shortSmooth)
zLong  = ta.sma(zRaw, longSmooth)

baseLongCond = zShort > zLong
baseExitCond = zShort < zLong

// 信号间隔
var int lastEntryBar = na
var int lastExitBar  = na

// 策略逻辑
if enableZScore
    if baseLongCond and (na(lastEntryBar) or bar_index - lastEntryBar > gapBars)
        strategy.entry("Z Score", strategy.long)
        lastEntryBar := bar_index
        alert("Z分数策略触发买入信号,建议开多仓", alert.freq_once_per_bar)

    if baseExitCond and (na(lastExitBar) or bar_index - lastExitBar > gapBars)
        strategy.close("Z Score", comment="Z Score")
        lastExitBar := bar_index
        alert("Z分数策略触发卖出信号,建议平仓离场", alert.freq_once_per_bar)

// 买卖图标
plotshape(baseLongCond and (na(lastEntryBar) or bar_index - lastEntryBar > gapBars),
     title="买入信号", location=location.belowbar, color=color.green, style=shape.labelup, text="买")

plotshape(baseExitCond and (na(lastExitBar) or bar_index - lastExitBar > gapBars),
     title="卖出信号", location=location.abovebar, color=color.red, style=shape.labeldown, text="卖")

// 盈亏表格
var table positionTable = table.new(position.bottom_right, 2, 2, border_width=1)
table.cell(positionTable, 0, 0, "开仓价", text_color=color.white, bgcolor=color.gray)
table.cell(positionTable, 1, 0, "未实现盈亏 (%)", text_color=color.white, bgcolor=color.gray)

isLong        = strategy.position_size > 0
entryPrice    = strategy.position_avg_price
unrealizedPnL = isLong ? (close - entryPrice) / entryPrice * 100 : na
pnlColor      = unrealizedPnL > 0 ? color.green : unrealizedPnL < 0 ? color.red : color.gray

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))
    // === 显示 MA 均线 ===
showMA        = input.bool(true, title="显示 MA 均线")
maShortPeriod = input.int(5, title="短期 MA 周期")
maMidPeriod   = input.int(21, title="中期 MA 周期")
maLongPeriod  = input.int(60, title="长期 MA 周期")

maShort = ta.sma(close, maShortPeriod)
maMid   = ta.sma(close, maMidPeriod)
maLong  = ta.sma(close, maLongPeriod)

plot(showMA ? maShort : na, title="MA 短期", color=color.rgb(0, 9, 11, 1), linewidth=1)
plot(showMA ? maMid   : na, title="MA 中期", color=color.orange, linewidth=1)
plot(showMA ? maLong  : na, title="MA 长期", color=color.blue, linewidth=1)