Разработка системы анализа профиля объема (Volume Profile)
Volume Profile — один из наиболее информативных инструментов технического анализа. В отличие от стандартного объёмного индикатора (объём per bar), Volume Profile показывает распределение торгового объёма по ценовым уровням. Это позволяет видеть не «когда» было много торгов, а «где» сосредоточена основная рыночная активность.
Ключевые концепции
POC (Point of Control) — ценовой уровень с максимальным объёмом за выбранный период. Цена имеет тенденцию возвращаться к POC, особенно в флэте. POC часто выступает как магнит и как ключевой уровень поддержки/сопротивления.
Value Area (VA) — диапазон цен, в котором было совершено 70% всего торгового объёма. Стандартное правило 70% пришло из Market Profile (TPO метод) Питера Стейдлмайера.
- VAH (Value Area High) — верхняя граница зоны стоимости
- VAL (Value Area Low) — нижняя граница зоны стоимости
HVN (High Volume Node) — ценовые зоны с высоким объёмом. Служат поддержкой/сопротивлением: цена проводит в них много времени, сложно пройти сквозь них.
LVN (Low Volume Node) — зоны с низким объёмом. Цена проходит их быстро — это «воздушные карманы», где движение может ускоряться.
Расчёт Volume Profile
Шаг 1: Определение диапазона
Выбираем период (сессия, неделя, месяц, произвольный диапазон) и диапазон цен [low, high].
Шаг 2: Создание price buckets
Разбиваем диапазон на N равных ценовых бинов (обычно 100–300):
def calculate_volume_profile(df, n_bins=200):
price_min = df['low'].min()
price_max = df['high'].max()
bin_size = (price_max - price_min) / n_bins
profile = np.zeros(n_bins)
for _, row in df.iterrows():
# Распределяем объём свечи по ценовым бинам
candle_low_bin = int((row['low'] - price_min) / bin_size)
candle_high_bin = int((row['high'] - price_min) / bin_size)
bins_covered = candle_high_bin - candle_low_bin + 1
vol_per_bin = row['volume'] / bins_covered
profile[candle_low_bin:candle_high_bin+1] += vol_per_bin
return profile, price_min, bin_size
Шаг 3: Расчёт POC и Value Area
def find_poc_and_va(profile, target_pct=0.7):
poc_idx = np.argmax(profile)
total_volume = np.sum(profile)
target_volume = total_volume * target_pct
# Расширяем VA от POC в обе стороны
va_volume = profile[poc_idx]
upper, lower = poc_idx, poc_idx
while va_volume < target_volume:
expand_up = profile[upper + 1] if upper + 1 < len(profile) else 0
expand_down = profile[lower - 1] if lower > 0 else 0
if expand_up >= expand_down:
upper += 1
va_volume += expand_up
else:
lower -= 1
va_volume += expand_down
return poc_idx, lower, upper
Типы Volume Profile
Session Volume Profile — профиль отдельной торговой сессии (24h для крипты). Показывает справедливую стоимость за день.
Composite Volume Profile — профиль за несколько сессий/недель. Долгосрочная структура рынка.
Anchored Volume Profile — профиль, начинающийся от конкретного события: ATH, крупный пробой, начало тренда. Наиболее гибкий инструмент.
Visible Range Volume Profile — профиль видимого диапазона графика. Автоматически пересчитывается при скролле.
Fixed Range — пользователь задаёт начальную и конечную свечу вручную.
Торговые применения
VA Rule (правило зоны стоимости):
- Цена входит в VA снизу (от VAL) → высокая вероятность движения к POC, затем к VAH
- Цена не может принять за пределами VA (открылась вне, не может удержаться) → возврат внутрь VA
- Пробой и закрытие вне VA с объёмом → трендовое движение
POC как магнит: цена тяготеет к POC при боковом движении. Торговый диапазон часто «гравитирует» вокруг POC.
LVN как скоростные зоны: вход в LVN в направлении тренда — цена пройдёт быстро до следующего HVN.
Интеграция с другими индикаторами
Volume Profile наиболее эффективен в связке с:
- VWAP — где находится VWAP относительно POC?
- Уровни поддержки/сопротивления — совпадают ли они с HVN/LVN?
- Order Flow — cumulative delta на уровне POC
Архитектура системы
Данные: полные тик-данные или агрегированные OHLCV + volume по барам. Для точного профиля нужен объём per price level — tick data или footprint данные от биржи.
Биржи с tick/footprint API: Binance (aggTrades), Coinbase Advanced Trade, Kraken (trades endpoint). Все сделки сохраняются в ClickHouse (оптимально для time-series с агрегациями).
Расчёт: Python/NumPy для быстрого расчёта профилей. Расчёт Composite VP за 30 дней на 1m данных занимает 2–5 секунд.
Визуализация: горизонтальная гистограмма рядом с ценовым графиком. POC — яркая горизонтальная линия, VA — полупрозрачный прямоугольник, HVN — тёмные бары, LVN — светлые.
Realtime обновление: профиль текущей сессии обновляется при каждой новой сделке. Кэш в Redis для быстрой отдачи клиентам.
Frontend: React + D3.js для кастомной гистограммы. TradingView кастомный indicator через Pine Script v5 для встроенного VP на платформе.
Разрабатываем полноценную систему Volume Profile с поддержкой Session/Composite/Anchored/Visible Range VP, realtime расчётом, экспортом в TradingView и web-дашборд.







