Введение: зачем рынку нужна вероятностная модель

Большинство торговых систем работают детерминированно: “если RSI пересёк X — покупай”.
Но рынок — стохастическая система. Сигналы не бинарны, они вероятностны.

Это приводит к трём фундаментальным проблемам классических индикаторных систем:

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

  2. Нет учёта рыночных режимов
    RSI=70 в тренде и RSI=70 в боковике — разные вещи по вероятности разворота.

  3. Нет вероятностной оценки результата
    Трейдеру нужно не “Buy”, а «Вероятность роста 0.67 при уверенности 0.72». Это более объективная мера

И анализатор, который мы сегодня разберём, решает это, используя:

  • только OHLCV-данные

  • многовременной анализ (HTF/LTF)

  • оценку волатильности

  • нормализованные регрессионные признаки

  • рыночные режимы как скрытые состояния

  • логистическую функцию превращения score → probability

  • модель confidence для оценки качества сигналов

  • анализ альткоинов через TOTAL/TOTAL2/TOTAL3/OTHERS.D

Система превращает разрозненные технические признаки в унифицированную вероятностную модель рынка.

Чтобы не засорять статью безумным количеством кода, основной скрипт выложен на github

2. Архитектура проекта

Проект состоит из четырёх ключевых модулей:

DataManager               – загрузка данных OHLCV
MTF Analyzer              – анализ разных таймфреймов
Technical Indicators      – расчёт всех raw-метрик
Scoring Engine            – превращение сигналов в вероятность
Alt-Market Analyzer       – анализ TOTAL/TOTAL2/TOTAL3/OTHERS.D

Модули взаимодействуют так:

  1. DataManager скачивает OHLCV через CCXT.

  2. AdvancedTechnicalAnalyzer считает индикаторы.

  3. MultiTimeframeAnalyzer рассчитывает согласованность трендов между HTF/LTF/Daily.

  4. VolatilityRegimeEngine определяет волатильность.

  5. IntelligentScoringEngine превращает все признаки в итоговый score.

  6. Score → логистическая функция → вероятность направления цены.

  7. Alt-Market Analyzer добавляет макрорынок (TOTAL/TOTAL2/TOTAL3, OTHERS.D).

  8. Всё сохраняется в JSON/CSV и отображается в summary.

3. Математическая база модели

Разберём фундаментальные блоки, на которых построена модель.

3.1 ATR — оценка истинной волатильности

ATR = EMA(True Range), где True Range =
max(high - low, |high - close_prev|, |low - close_prev|)

Это даёт оценку амплитуды движения без направления.

Используется в модуле:

  • Volatility Indicators (atr_percent)

  • Volatility Regime Engine

  • Momentum Risk Adjustment

ATR позволяет системе учитывать:

  • низкую волатильность (аккумуляция)

  • высокую волатильность (паника, разворот, новости)

3.2 ADX — вычисление трендовости рынка

ADX — ядро определения рыночного режима.
Он показывает силу тренда, а не направление.

ADX = EMA(DX)
DX = |+DI − −DI| / (+DI + −DI)
+DI = EMA(high − prev_high)
−DI = EMA(prev_low − low)

Использование в модели:

  • market_regime_score (0–1)

  • режимы trending / consolidation / mixed

Важный момент: ADX вводит рыночные режимы как скрытые состояния.

3.3 Дисперсия & std доходностей

Историческая волатильность:

σ = std(close.pct_change().rolling(20))

Это используется:

  • для текущего режима волатильности

  • для Momentum Risk Adjusted Score

  • для Volatility Score

  • как фильтр всплесков волатильности

3.4 Линейная регрессия как модель тренда

Важнейшая идея:

slope = направление

r² = устойчивость тренда

Использование:

  • trend_strength

  • trend_consistency

  • оценка рыночной структуры

  • market_regime_score

  • согласованность по таймфреймам

Получаем намного лучшее представление тренда, чем просто EMA50/200.

3.5 Логистическая функция вероятности

Итоговый score переводится в вероятность через логистическую функцию:

Используется классическая сигмоидная модель.

P - итоговая вероятность, s - итоговый score (получен путём свёртки всех факторов), k - коэффициент крутизны кривой - чем выше k, тем резче будет логистическая кривая, т.е. реакция на изменение факторов. Она задаётся в конфиге. Там же задаётся и смещение середины для нашей функции x0. e - числа эйлера, оно обеспечивает нормализацию в диапазон и симметрию кривой.

Плюсы:

  • score превращается в интерпретируемое “0.73 вероятности роста”

  • небольшие изменения score вокруг x0 дают сильные изменения P

  • устойчивость к экстремальным значениям

3.6 Многовременные согласованные тренды (MTF)

Модель использует 3 TF:

  • HTF = 1 week

  • Daily = 1 day

  • LTF = 4h

Согласованность =
EMA20>EMA50 + slope >0 + RSI согласованность.

Выход:

  • htf_trend

  • ltf_trend

  • daily_trend

  • htf_alignment_score (0→1)

4. Основные функциональные блоки системы

На основе кода разберём ключевые вычислительные ядра.

4.1 Price Action Engine

Использует:

  • price_vs_sma20/sma50

  • позицию цены в канале (max20/min20)

  • расстояние до уровней S/R

  • близость к покупке/продажи

Экономический смысл:

  • цена ниже SMA20/SMA50 → вероятность роста выше

  • цена в нижней части канала → вероятный отскок

  • цена у поддержки/сопротивления → вероятностные паттерны разворота

4.2 Volume Engine

Содержит:

  • Volume Ratio (V / SMA20)

  • Volume Momentum

  • Price-Volume Correlation

  • OBV & OBV Trend

Сильный рыночный признак:
Если цена растёт + объём растёт → рост подтверждён.

Если цена падает + объёмы падают → падение ослабевает.

4.3 Market Structure Engine

Использует:

  • Higher Highs / Lower Lows

  • trend_strength (регрессия)

  • trend_consistency (r²)

  • breakout_potential

Смысл:
Система понимает, находится ли инструмент в:

  • импульсном тренде

  • устойчивой консолидации

  • предбрейк-аут состоянии

4.4 Momentum Engine

Модуль использует:

  • RSI

  • Stochastic

  • Momentum (5d, 10d, 20d)

  • ROC

  • Risk-adjusted momentum (momentum / volatility)

Это позволяет системе определять состояние:

  • перекупленности/перепроданности

  • истинной силы импульса

  • согласованности краткосрочного и среднесрочного импульса

4.5 Volatility Engine

Содержит:

  • volatility_20d

  • ATR %

  • Bollinger Bands position (bb_position)

Логика:

  • низкая волатильность → вероятность выхода растёт

  • высокая волатильность → сигнал хуже для входа

  • цена у нижней полосы → вероятное восстановление

  • цена у верхней → вероятная коррекция

4.6 Liquidity Engine

На основе:

  • volume_ma20 * price

  • логарифмической нормализации

  • тренда ликвидности (vol_ma5 / vol_ma20)

Смысл:

  • низкая ликвидность → модель снижает уверенность сигнала

  • высокая ликвидность → рынок более предсказуем

4.7 Market Regime Engine

Режимы:

  • trending - трендовые волатильные движения

  • consolidation - консолидация, диапазон

  • mixed - смешанные режимы

Построен на:

  • ADX

  • trend_strength - силе тренда

  • волатильности

Сигналы усиливаются/ослабляются в зависимости от режима:

Режим

Поведение модели

Тренд

Усиливает momentum & alignment

Боковик

Уменьшает momentum, market structure

Mixed

Нейтрально

5. Итоговый Final Score

Система объединяет:

  • Price Action

  • Volume

  • Market Structure

  • Momentum

  • Volatility

  • Market Sentiment

  • HTF alignment

  • Volatility regime

  • Market regime

  • Liquidity score

С двумя наборами весов:

  • base (weights)

  • v2 (weights_v2)

Итоговая формула:

FinalScore = Σ(score_i * weight_i) / Σ(weight_i)

6. Преобразование в вероятность

Используется логистическая функция:

ProbLong = 1 / (1 + exp(-k(score - x0)))

Где:

  • score > 0 → рост

  • score < 0 → падение

  • k регулирует кривизну

7. Модель Confidence

Confidence учитывает:

  • отклонение RSI от 50

  • объемную активность

  • силу тренда

  • magnitude final score

Формула — усреднение нормализованных факторов.

Confidence помогает различать:

  • сильные вероятностные сигналы

  • неуверенные сигналы

8. Alt-Market Analyzer: TOTAL/TOTAL2/TOTAL3/OTHERS.D

Используются данные CoinGecko:

  • market_cap

  • price

  • volume

Строятся индексы:

  1. TOTAL — всё

  2. TOTAL2 — без BTC

  3. TOTAL3 — без BTC и ETH

  4. OTHERS.MCAP — mcaps всех кроме топ N

  5. OTHERS.D = OTHERS / TOTAL

Модель позволяет:

  • оценивать сезонность альтов

  • сравнивать силу альтов против BTC/ETH

  • искать корреляции TOTAL2/TOTAL3

  • определять ускорение или замедление рынка

Также рассчитываются:

  • vol7/vol30 - соотношение обьемов

  • vol-adjusted returns - возврат ценовых значений, скорректированный на объём

  • относительная сила против BTC/ETH

9. Как интерпретировать результаты

Каждый инструмент получает следующие данные: symbol, price, final_score, prob_long, confidence, category_scores, indicators - тоесть все те фильтры и значения которые мы ранее описали. Вернее, основные из них.

Пример:

  • ProbLong = 0.78 → высокая вероятность роста

  • Confidence = 0.65 → уверенность средняя

  • В ключевых факторах dominate momentum & market_structure

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

Заключение

Мой анализатор — это попытка построить универсальный вероятностный движок для анализа рынка, используя только OHLCV-данные, но объединяя:

  • многовременной анализ

  • рыночные режимы

  • регрессионную статистику

  • волатильность и объёмы

  • соотношение силы альтов

  • нормализованную оценку признаков

  • вероятностные функции

Это не торговый бот, а исследовательская модель, похожая на действительно качественные аналитические движки.

Она даёт:

  • вероятность роста

  • уверенность в сигнале

  • ключевые факторы

  • устойчивые результаты в разных режимах рынка

Эту систему можно легко интегрировать в алгоритмическую торговлю, Telegram-ботов, дашборды трейдинга или даже как часть ML-модели.

Комментарии (2)


  1. wmlab
    02.12.2025 17:30

    --- Вердикт, стажер?
    --- Виновен с вероятностью 98 процентов!
    --- Стажер, человека нельзя казнить на 98 процентов.
    (c)


  1. economist75
    02.12.2025 17:30

    Классная идея и ясный код, спасибо. Тема от меня далековато, но возникла мысль подобным образом взглянуть на OHLCV-данные по небиржевым товарам - ценам на недвигу, железо, а может даже что-то локальное. Они также повинуются изменению напряжённости инфополя и разности в часовых поясах, плюс раскачка днём на осмысление менеджерами. К примеру, расход личного лимита скидки продажниками оказался очень необычно распределен по времени суток, по ЦА и по OHLCV-данных отдела за вчера. Что-то неладное происходит с мозгами ночью, и это уже можно измерить. Возможно идея выборочной суммаризации из статьи даст новый инструмент оценки "куда на самом деле ведут чёртов рынок эти дружные ребята".