LootX

Ринкові дані: кластери, дельта, OI, біржовий стакан

нове Оновлено 30 вересня 2026 р. Ця сторінка у PDF

Що скрипт на LootScript читає крім свічок: кластери, дельта, відкритий інтерес, ставка фінансування, записана і жива історія біржового стакана, стрічка угод, скринер, інший таймфрейм і інструмент.

Окрім свічок, скрипт на LootScript читає дані потоку ордерів: кластери, дельту, відкритий інтерес, ставку фінансування, записану історію біржового стакана, живий біржовий стакан і стрічку угод, метрики скринера. Нічого вмикати не потрібно: щойно скрипт звертається, наприклад, до cluster.poc, термінал сам підписується на кластери інструмента і таймфрейма графіка — навіть якщо графік показує звичайні свічки. Коли скрипт знімають із графіка, підписка звільняється.

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

Головне правило: немає даних — це na, а не 0

Будь‑яке значення з цієї сторінки може виявитися na. Так відбувається, якщо майданчик не покритий сервером, таймфрейм не підтримується, історія ще завантажується або бар старший за доступну історію. Нуль означав би «торгів не було», а це інший факт: накопичена сума з підставленими нулями виглядає правдоподібно й водночас невірна.

У кожного простору є прапорець наявності — cluster.available, delta.available, oi.available тощо. Перевіряйте його або функцією na(x). Порівняння з na через == компілятор не пропустить.

Loot
indicator("Накопленная дельта без подмены нулём", overlay = false)
var float cvd = 0.0
if delta.available {
    cvd := cvd + delta.value
}
plot(delta.available ? cvd : na, "CVD", color = color.teal)

Чому даних немає, підказує легенда графіка поруч із назвою скрипта: «майданчик не покритий», «таймфрейм не підтримується», «дані завантажуються…», «немає відкритого стакана», «скринер недоступний».

Звідки що береться

Простір Що це Історія на графіку
cluster.* Кластери (футпринт) бара: об’єм по цінах Є, з сервера кластерів
delta.* Дельта агресивних покупок і продажів Є
oi.* Відкритий інтерес Є
funding.* Ставка фінансування і її розрахунки Є
depth.* Біржовий стакан, записаний сервером, по барах Є, обмеженої глибини
book.* Живий біржовий стакан Лише останній бар
tape.* Жива стрічка угод Лише останній бар
screener.* Метрики скринера по інструменту Лише останній бар

Кластери: cluster.*

Об’єм кожного цінового рівня всередині бару з розподілом на агресивні покупки і продажі — ті самі дані, що малює кластерний графік. Рівні нумеруються знизу вгору, від 0 до cluster.levels - 1.

Ім’я Що повертає
cluster.available Чи є кластери на цьому барі
cluster.levels Число цінових рівнів у барі
cluster.price(i) Ціна рівня i
cluster.bid(i) Агресивні покупки на рівні i
cluster.ask(i) Агресивні продажі на рівні i
cluster.total Весь об’єм бару
cluster.delta Покупки мінус продажі по всіх рівнях
cluster.poc, cluster.poc_index Ціна і номер рівня з найбільшим об’ємом
cluster.max_cell Об’єм найважчої клітинки бару
cluster.imbalance(i) Перекіс рівня: +1 покупки, -1 продажі, 0 немає
cluster.stacked_buy, cluster.stacked_sell Ціна, з якої починається найдовша серія рівнів із перекосом
cluster.stacked_buy_steps, cluster.stacked_sell_steps Довжина цієї серії в рівнях
cluster.value_area(pct) Нижня й верхня межі зони вартості; pct — частка об’єму, 0.7 = 70 %
cluster.grid_step Крок цінової сітки бару

Зверніть увагу на назви: cluster.bid(i) — це покупки, які «зняли» аск, а не заявки на покупку в біржовому стакані.

Кластери є на таймфреймах від 30 секунд до одного дня.

Loot
indicator("POC и зона стоимости", overlay = true)
[vaLow, vaHigh] = cluster.value_area(0.7)
plot(cluster.poc, "POC", color = color.orange, style = plot.style_circles)
plot(vaHigh, "Верх зоны", color = color.gray, style = plot.style_linebr)
plot(vaLow, "Низ зоны", color = color.gray, style = plot.style_linebr)

Дельта: delta.*

Різниця між агресивними покупками і продажами за бар. Об’єми — в монетах (базовій валюті).

Ім’я Що повертає
delta.value Дельта бару: покупки мінус продажі
delta.buy, delta.sell Ці дві частини окремо
delta.cum Накопичена дельта від початку завантаженої історії
delta.min, delta.max Мінімум і максимум бігаючої дельти всередині бару
delta.open, delta.high, delta.low, delta.close Дельта бару у вигляді свічки
delta.trades Число угод у барі
delta.usd Дельта в валюті котирування, за сумами самих угод
delta.available Чи є дельта на цьому барі

delta.min і delta.max з кластерів не порахувати — це шлях дельти всередині бару, його рахує сервер. За ними видно, що покупці вели бар, а закрили його продавці. delta.usd точніша, ніж delta.value * close: на різкому барі ціна угод сильно відрізняється від ціни закриття.

delta.cum починається з нуля на першому завантаженому барі, тому її рівень залежить від глибини завантаженої історії. Порівнюйте зміни, а не абсолютні значення.

Дельта є на таймфреймах від 30 секунд.

Loot
indicator("Дельта и разворот внутри бара", overlay = false)
d = delta.value
reversed = delta.available and d < 0 and delta.max > -d
plot(d, "Дельта", style = plot.style_columns, color = d >= 0 ? color.teal : color.red)
plotshape(reversed, "Разворот", style = shape.xcross, location = location.top, color = color.orange, size = size.tiny)

Відкритий інтерес: oi.*

Ім’я Що повертає
oi.open, oi.high, oi.low, oi.close Відкритий інтерес за бар у одиницях, які публікує майданчик
oi.coins Відкритий інтерес в монетах
oi.usd Відкритий інтерес у валюті котирування
oi.change Зміна oi.close до попереднього бару
oi.available Чи є дані на цьому барі

Одиниці oi.open…oi.close у майданчиків різні, тому для порівняння майданчиків беріть oi.coins або oi.usd. Відкритий інтерес надходить з хвилинною сіткою: на секундних таймфреймах всі значення — na.

Loot
indicator("Цена и открытый интерес", overlay = false)
dp = ta.change(close)
build = oi.available and dp > 0 and oi.change > 0
plot(oi.change, "Изменение OI", style = plot.style_columns, color = build ? color.teal : color.gray)

Ставка фінансування: funding.*

Ім’я Що повертає
funding.rate Прогноз ставки на найближчий розрахунок
funding.interval_hours Годин між розрахунками
funding.settled true на барі, де пройшов розрахунок
funding.settled_rate Ставка, реально списана на цьому барі; якщо розрахунків у барі кілька — їх сума
funding.cum Сума списаних ставок за завантажену історію
funding.available Чи є ставка фінансування у інструмента

Ставка — частка, а не відсотки: 0.0001 — це 0,01 %. Графік показує відсотки, мова нічого не перераховує. Для перевірки гіпотез на історії беріть funding.settled_rate: funding.rate — це прогноз, він змінюється до самого розрахунку. У спота ставки фінансування немає, на секундних таймфреймах значення — na.

Loot
indicator("Фандинг за расчёт, %", overlay = false)
plot(funding.rate * 100, "Прогноз ставки", style = plot.style_area, color = funding.rate >= 0 ? color.teal : color.red)
plotshape(funding.settled, "Расчёт", style = shape.circle, location = location.bottom, color = color.orange, size = size.tiny)

Історія біржового стакана: depth.*

Біржовий стакан у тому вигляді, в якому його записав сервер, — ті самі дані, що малює теплова карта, — розкладений по барах. На відміну від живого book.*, ці значення є на кожному записаному барі. Ціни згруповані в корзини, об’єм корзини — найбільший за бар, у монетах.

Ім’я Що повертає
depth.available Чи записаний стакан для цього бару
depth.levels Число непорожніх корзин у барі
depth.price(i) Нижня межа корзини i, за зростанням
depth.qty(i) Найбільший об’єм, що стояв у корзині за бар
depth.side(i) +1 біди, -1 аски, 0 корзина була по обох боках
depth.at(price) Об’єм у корзині, куди потрапляє ціна
depth.grid_step Розмір корзини в одиницях ціни
depth.best_bid, depth.best_ask Найкращі ціни на кінець бару
depth.max_cell Об’єм найважчої корзини
depth.bid_sum(pct), depth.ask_sum(pct) Об’єм сторони в межах pct % від середини
depth.imbalance(pct) Перекіс у тій же смузі: від -1 до +1
depth.max_bid(pct), depth.max_ask(pct) Ціна й об’єм найважчої корзини сторони в смузі

Обмеження:

  • Дані є там же, де серверна теплова карта, і на таймфреймах від секунди.
  • Сервер зберігає смугу приблизно ±4 % від ціни. Поза нею depth.at повертає na, всередині смуги порожня корзина — 0.
  • Глибина історії обмежена: найстаріші бари довгої історії дають na.
  • Значення формуючогося бару змінюються, доки надходять дані.
Loot
indicator("Перекос записанного стакана", overlay = false)
band = input.float(1.0, "Полоса, % от цены", minval = 0.1, maxval = 4.0, step = 0.1)
imb = depth.imbalance(band)
plot(imb, "Перекос", style = plot.style_columns, color = imb >= 0 ? color.teal : color.red)

Щоб намалювати записаний біржовий стакан під свічками, достатньо одного рядка heatmap.depth() в скрипті з overlay = true. Кольори й пороги поля — на сторінці Налаштування і відображення.

Loot
indicator("Записанный стакан теплом", overlay = true)
heatmap.config(palette = heatmap.inferno, low = 25)
heatmap.depth()

Живий біржовий стакан і стрічка угод: book.* і tape.*

Живий біржовий стакан і стрічку ніхто не записує, тому значення є тільки на останньому барі, а в історії — завжди na. Для них потрібна відкрита панель біржового стакана того ж інструмента: інакше book.available і tape.available хибні, а в легенді — «немає відкритого стакана». У режимі реплея ці дані недоступні.

Ім’я Що повертає
book.bid(i), book.ask(i) Ціна рівня i; 0 — найкраща ціна
book.bid_qty(i), book.ask_qty(i) Об’єм на рівні, в монетах
book.spread Найкращий аск мінус найкращий бид
book.mid Середина між найкращими цінами
book.imbalance(n) Перекіс об’єму по n верхнім рівням кожної сторони: від -1 до +1
book.available Чи є знімок стакана
tape.last_price, tape.last_qty Ціна й об’єм останньої угоди
tape.last_side +1 покупець‑агресор, -1 продавець, 0 — угод ще не було
tape.count(ms) Число угод за останні ms мілісекунд
tape.buy_volume(ms), tape.sell_volume(ms) Об’єм агресивних покупок і продажів за вікно
tape.max_print(ms) Найбільша угода за вікно
tape.available Підключена чи стрічка

Вікно стрічки і глибину book.imbalance задають числом у коді або налаштуванням input.int. Вікно відлічується від часу останньої угоди на майданчику, а не від годинника комп’ютера. Скрипту доступний лише хвіст стрічки — близько двох тисяч останніх угод, тому на активному ринку довге вікно покаже не весь інтервал.

Коли таке значення потрапляє в plot, редактор попереджає: «Дані є тільки в реальному часі — в історії ряд порожній». Це очікувано: ліворуч від останнього бару ряд порожній. Стратегії ці дані читати не можуть — див. Стратегії і тестер.

Loot
indicator("Перекос стакана", overlay = false)
levels = input.int(20, "Уровней с каждой стороны", minval = 1, maxval = 200)
imb = book.available ? book.imbalance(levels) : na
plot(imb, "Перекос", style = plot.style_area, color = imb >= 0 ? color.teal : color.red)
hline(0, "Ноль", color = color.gray)

Скринер: screener.*

Метрики скринера для інструмента графіка — ті самі числа, що в його колонках. Історії в них немає: значення є тільки на останньому барі. Вікно задається рядком, і не в кожної метрики є кожне вікно.

Функція Що показує Вікна
screener.change(w) Зміна ціни "1m" "5m" "15m" "1h" "24h"
screener.vol(w) Оборот "1m" "5m" "15m" "1h" "24h"
screener.avg_vol(w) Середній оборот "1m" "5m" "15m" "1h"
screener.rvol(w) Відносний об’єм "1h" "24h"
screener.natr(w) NATR "1m" "5m"
screener.oi_delta(w) Зміна відкритого інтересу "1m" "5m" "1h" "24h"
screener.btc_corr(w) Кореляція з BTC "1m" "5m"
screener.available Чи покритий інструмент скринером —

Вікно, якого немає в таблиці, дає na. Метрика, яка не входить у вашу підписку на скринер, — теж na. Редактор помічає вивід цих значень тим самим попередженням, що й у стакана: в історії ряд порожній.

Loot
indicator("Скринер: RVOL и NATR", overlay = false)
plot(screener.rvol("1h"), "RVOL 1h", color = color.orange)
plot(screener.natr("5m"), "NATR 5m", color = color.teal)

Покриття майданчиків

Майданчик Кластери і дельта Відкритий інтерес і ставка фінансування
Binance, Bybit, OKX, Bitget, Gate.io, MEXC, KuCoin, BingX, AsterDEX Спот і ф’ючерси Ф’ючерси
Hyperliquid Ф’ючерси; спот — ні Ф’ючерси
Binance Alpha Ні: майданчик не публікує сторону агресора Ні
Upbit Ні Ні
Дані Таймфрейми
Кластери Від 30 секунд до 1 дня
Дельта Від 30 секунд
Відкритий інтерес, ставка фінансування Від 1 хвилини
Історія біржового стакана Від 1 секунди, там же, де серверна теплова карта
Живий біржовий стакан, стрічка угод Будь‑які, за умови відкритої панелі біржового стакана
Скринер Будь‑які, для інструментів, які бачить скринер

Покриття визначає сервер даних, і воно може змінюватися. Надійніше за все опиратися на прапорець .available і підпис у легенді.

Інший таймфрейм і інший інструмент

request.security рахує вираз на іншій серії — старшому таймфреймі або іншій монеті — і зіставляє результат з барами графіка.

TEXT
request.security(symbol, timeframe, expression, gaps = false, lookahead = false, ignore_invalid_symbol = false)
  • symbol — у форматі «МАЙДАНЧИК:ТИКЕР», як у TradingView: "BINANCE:BTCUSDT.P", де .P — безстроковий ф’ючерс. Інструмент графіка — sym.ticker.
  • timeframe — рядок виду "5", "60", "4h", "1D", "1W". Таймфрейм графіка — tf.period.
  • expression — число або кілька чисел у квадратних дужках: [high, low].

Без зазірнення вперед. За замовчуванням бар графіка бачить значення останній закритий бар старшого таймфрейма. Тому годинна EMA на п’ятихвилинках — це сходинка, яка зсувається лише на закритті години. Так результат на історії співпадає з тим, що ви б побачили наживо.

  • gaps = true — значення лише на першому барі графіка, де з’явився новий старший бар, далі na.
  • ignore_invalid_symbol = true — невідомий символ дає na. Без цього скрипт зупиняється з помилкою «Символ … невідомий».

Всередині виразу доступні свічки іншої серії й розрахунки по них. Передати туди змінну графіка не можна — лише значення налаштувань input.*. Біржовий стакан, стрічка й скринер всередині запиту не компілюються, а кластери, дельта, відкритий інтерес і ставка фінансування іншої серії дають na. У скрипта може бути до 8 різних пар «інструмент + таймфрейм» і до 32 викликів request.security.

Loot
indicator("EMA старшего таймфрейма", overlay = true)
len = input.int(20, "Длина EMA", minval = 2, maxval = 500)
tfHigh = input.timeframe("60", "Старший таймфрейм")
emaHigh = request.security(sym.ticker, tfHigh, ta.ema(close, len))
plot(emaHigh, "EMA", color = color.orange, style = plot.style_stepline)
Loot
indicator("Спред к другой бирже", overlay = false)
other = input.symbol("BYBIT:BTCUSDT.P", "Сравнить с")
px = request.security(other, tf.period, close, ignore_invalid_symbol = true)
plot(close - px, "Разница", color = color.orange)

Далі

FAQ

Чому скрипт показує порожні значення дельти або кластерів?
Даних немає: біржа не покрита сервером, таймфрейм не підтримується або історія ще завантажується. Такі значення — na, а не нуль; причину вказує легенда графіка поруч із назвою скрипта.
Чи можна читати біржовий стакан на історії?
Живий стакан book.* доступний лише на останньому барі й вимагає відкритої панелі біржового стакана. Історію стакана по барах дає depth.* — там, де сервер записує теплову карту.
Чи перерисовується request.security зі старшого таймфрейму?
За замовчуванням — ні: бар графіка бачить останній закритий бар старшого таймфрейму. Заглядання наперед вмикається лише явно, параметром lookahead = true, і редактор про це попереджає.
На яких біржах є відкритий інтерес і ставка фінансування?
На ф'ючерсах Binance, Bybit, OKX, Bitget, Gate.io, MEXC, KuCoin, BingX, AsterDEX і Hyperliquid, на таймфреймах від хвилини.