Введение: зачем рынку нужна вероятностная модель
Большинство торговых систем работают детерминированно: “если RSI пересёк X — покупай”.
Но рынок — стохастическая система. Сигналы не бинарны, они вероятностны.
Это приводит к трём фундаментальным проблемам классических индикаторных систем:
Отсутствие нормализации
Индикаторы дают значения в разных единицах, не сопоставимы между собой.Нет учёта рыночных режимов
RSI=70 в тренде и RSI=70 в боковике — разные вещи по вероятности разворота.Нет вероятностной оценки результата
Трейдеру нужно не “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
Модули взаимодействуют так:
DataManager скачивает OHLCV через CCXT.
AdvancedTechnicalAnalyzer считает индикаторы.
MultiTimeframeAnalyzer рассчитывает согласованность трендов между HTF/LTF/Daily.
VolatilityRegimeEngine определяет волатильность.
IntelligentScoringEngine превращает все признаки в итоговый score.
Score → логистическая функция → вероятность направления цены.
Alt-Market Analyzer добавляет макрорынок (TOTAL/TOTAL2/TOTAL3, OTHERS.D).
Всё сохраняется в 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
Строятся индексы:
TOTAL — всё
TOTAL2 — без BTC
TOTAL3 — без BTC и ETH
OTHERS.MCAP — mcaps всех кроме топ N
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)

economist75
02.12.2025 17:30Классная идея и ясный код, спасибо. Тема от меня далековато, но возникла мысль подобным образом взглянуть на OHLCV-данные по небиржевым товарам - ценам на недвигу, железо, а может даже что-то локальное. Они также повинуются изменению напряжённости инфополя и разности в часовых поясах, плюс раскачка днём на осмысление менеджерами. К примеру, расход личного лимита скидки продажниками оказался очень необычно распределен по времени суток, по ЦА и по OHLCV-данных отдела за вчера. Что-то неладное происходит с мозгами ночью, и это уже можно измерить. Возможно идея выборочной суммаризации из статьи даст новый инструмент оценки "куда на самом деле ведут чёртов рынок эти дружные ребята".
wmlab
--- Вердикт, стажер?
--- Виновен с вероятностью 98 процентов!
--- Стажер, человека нельзя казнить на 98 процентов.
(c)