Логарифмическая стратегия возврата к среднему значению цены. Динамическая стратегия стоп-лосса.

Z-SCORE MEAN REVERSION BOLLINGER BANDS SMA LOGARITHMIC PRICE DYNAMIC STOP-LOSS VOLATILITY ADJUSTMENT
Дата создания: 2025-03-14 09:39:36 Последнее изменение: 2025-03-14 09:39:36
Копировать: 0 Количество просмотров: 451
2
Подписаться
319
Подписчики

Логарифмическая стратегия возврата к среднему значению цены. Динамическая стратегия стоп-лосса. Логарифмическая стратегия возврата к среднему значению цены. Динамическая стратегия стоп-лосса.

Обзор

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

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

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

  1. Во-первых, стратегия преобразует конечную цену в арифметическую форму ((log_price = math.log(close)Это помогает преобразовывать изменения в умножении в изменения в сложении, что приводит к изменению цены в соответствии с нормальным распределением.

  2. Затем, на основе установленного прокрутки ((7 циклов по умолчанию)), вычисляется среднее значение цены в паре ((rolling_mean) и стандартные различияrolling_std)。

  3. Используя эти статистические данные, вычислите Z-коэффициент текущей цены:rolling_z_score = (log_price - rolling_mean) / rolling_std, это стандартное расхождение от среднего значения текущей цены.

  4. Условия приема:

    • Открытие позиции с множественным кодом, когда Z-оценка ниже установленного многоочередного входного порога (по умолчанию -1,825).
    • Открытие позиции с пустым кодом, когда Z-оценка превышает установленный порог входа в пустую позицию (по умолчанию 1,825).
  5. Стоп-стоп-цель устанавливается в виде показателя скользящего среднего значения цены параметра:take_profit_price = math.exp(rolling_mean)Это означает, что целью стратегии является возвращение цены к ее статистическому среднему значению.

  6. Ключевым нововведением в этой стратегии является динамический механизм остановки убытков:

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

    • Стоимость достигла остановки ((возвращение к среднему значению)).
    • Стоимость коснулась динамически скорректированной точки остановки.

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

  1. Базовая статистикаСтратегия, основанная на прочных статистических принципах, использует Z-оценку для измерения отклонения цены и предоставляет объективные сигналы входа и выхода.

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

  3. Динамическое управление рискамиСамым ярким моментом стратегии является ее динамический механизм остановки, который может автоматически корректировать уровень остановки в зависимости от изменений волатильности рынка, позволяя достаточное пространство для торговли, защищая при этом средства.

  4. Двусторонние сделкиСтратегия поддерживает одновременную торговлю с использованием множественных и пустых точек, позволяя искать возможности в различных рыночных условиях.

  5. Цель средней стоимости: Использование статистического среднего значения в качестве цели сдерживания соответствует теоретической основе среднего значения регрессии и повышает обоснованность сдерживания.

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

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

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

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

  3. Чувствительность длины окна: Политическая производительность очень чувствительна к параметрам длины прокрутки, неправильный выбор может привести к чрезмерной торговле или упущенным возможностям. Решение: можно найти оптимальные параметры, отслеживая разные длины окон, или использовать самостоятельную длину окон.

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

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

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

  1. Приспособить длину окна: текущая стратегия использует фиксированную длину прокручивающегося окна (по умолчанию 7 циклов) для вычисления статистических показателей. Можно рассмотреть возможность внедрения самостоятельной длины прокручивающегося окна, автоматически корректируя размер окна в соответствии с периодическими изменениями рынка. Таким образом, можно лучше захватить шансы на возвращение среднего значения в разных временных масштабах, повышая адаптивность стратегии.

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

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

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

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

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

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

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

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

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

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

//@version=5
strategy("Mean Reversion Z-Score Strategy with Dynamic SL", overlay=true)

// Input parameters
window = input.int(7, "Rolling Window", minval=1)
z_entry_long = input.float(-1.825, "Z-Score Long Entry", step=0.025)
z_entry_short = input.float(1.825, "Z-Score Short Entry", step=0.025)
z_stop_loss_long = input.float(-2.125, "Z-Score Stop Loss Long", step=0.025)
z_stop_loss_short = input.float(2.125, "Z-Score Stop Loss Short", step=0.025)

// Calculate log price, rolling mean, and rolling standard deviation
log_price = math.log(close)
rolling_mean = ta.sma(log_price, window)
rolling_std = ta.stdev(log_price, window)
rolling_z_score = (log_price - rolling_mean) / rolling_std

// Persistent variables to store entry conditions
var float entry_price = 0.0
var float entry_log_price = 0.0
var float entry_mean = 0.0
var float entry_std = 0.0
var float stop_loss_price = 0.0
var string position = "none"

// Calculate dynamic take-profit
take_profit_price = math.exp(rolling_mean)

// Entry logic
if (rolling_z_score <= z_entry_long and position == "none")
    entry_price := close
    entry_log_price := log_price
    entry_mean := rolling_mean
    entry_std := rolling_std
    stop_loss_price := math.exp(log_price + z_stop_loss_long * rolling_std)
    position := "long"
    strategy.entry("Long", strategy.long)

if (rolling_z_score >= z_entry_short and position == "none")
    entry_price := close
    entry_log_price := log_price
    entry_mean := rolling_mean
    entry_std := rolling_std
    stop_loss_price := math.exp(log_price - z_stop_loss_short * rolling_std)
    position := "short"
    strategy.entry("Short", strategy.short)

// Exit logic with dynamic adjustments
if (position != "none")
    // Calculate new stop-loss based on current volatility
    float new_stop_loss = na
    if (position == "long")
        new_stop_loss := math.exp(log_price + z_stop_loss_long * rolling_std)
        if (rolling_std > entry_std)
            stop_loss_price := math.min(stop_loss_price, new_stop_loss)
        else if (rolling_std < entry_std)
            stop_loss_price := math.max(stop_loss_price, new_stop_loss)
        if (close >= take_profit_price)
            strategy.close("Long", comment="TP")
            position := "none"
        else if (close <= stop_loss_price)
            strategy.close("Long", comment="SL")
            position := "none"
    else if (position == "short")
        new_stop_loss := math.exp(log_price - z_stop_loss_short * rolling_std)
        if (rolling_std > entry_std)
            stop_loss_price := math.max(stop_loss_price, new_stop_loss)
        else if (rolling_std < entry_std)
            stop_loss_price := math.min(stop_loss_price, new_stop_loss)
        if (close <= take_profit_price)
            strategy.close("Short", comment="TP")
            position := "none"
        else if (close >= stop_loss_price)
            strategy.close("Short", comment="SL")
            position := "none"

// Plots
plot(rolling_z_score, title="Z-Score", color=color.blue, linewidth=1)
plot(z_entry_short, title="Z-Score-upper", color=color.rgb(33, 243, 103), linewidth=1)
plot(z_entry_long, title="Z-Score-lower", color=color.rgb(243, 33, 61), linewidth=1)