Как получается каждая цифра
Каждую цифру на этом сайте считает обычный код по индексированным данным пула и по самой сети, и перед показом она проверяется; языковая модель лишь описывает цифры после этого. Эта страница по разделам рассказывает, как получается каждая и что она оставляет за кадром. Это пересказ кода, а не обещание о каком-либо пуле.
Предложенный диапазон
Исходная точка — собственные дневные цены закрытия пула, как их публикует его subgraph: последние 31 завершённых дней по UTC, без сегодняшнего, потому что он ещё не закрылся. Из них получается 30 дневных доходностей, каждая — разность логарифмов двух соседних закрытий. День, которого нет в источнике, пропускается — никогда не заполняется, не переносится с предыдущего и не интерполируется, — и страница говорит, если в окне были пропуски.
Волатильность — это выборочное стандартное отклонение этих доходностей, приведённое к году умножением на квадратный корень из 365. Затем она масштабируется на выбранный горизонт (7, 30 или 90 дней; без выбора — 30) квадратным корнем из доли горизонта в году и умножается на выбранную ширину (в стандартных отклонениях: 1σ, 1,5σ, 2σ или 3σ; без выбора — 1σ). Горизонт говорит лишь, насколько далеко вперёд раскладывается измеренное движение: само движение всегда измеряется по тем же последним 30 дням.
Полоса откладывается вокруг сегодняшней цены симметрично в логарифмах, без дрейфа: падение вдвое и рост вдвое — одно и то же расстояние, поэтому проценты по обе стороны различаются. Затем её края сдвигаются на сетку tick’ов пула наружу, никогда внутрь, так что диапазон всегда покрывает полосу как минимум целиком. Её охраняют две проверки: текущая цена пула должна переводиться в тот tick, который сообщает сам пул, и она должна быть взята из блока, отстающего от сети не более чем на 15 минут.
Это не прогноз: диапазон говорит, насколько цена уже двигалась, а не куда она пойдёт. И ширина — не доверительный уровень: чтобы превратить «два стандартных отклонения» в «95% времени», нужно допущение о распределении цен, которое не установлено. Он не определяет размер позиции и не говорит, сколько какого токена вносить.
Проверено на днях, которых он не видел
Сайт читает 121 дней закрытий — больше, чем нужно для волатильности, — чтобы метод можно было проверить на днях, по которым он не подгонялся. Метод сдвигается на один горизонт назад, заново подгоняется только по 31 закрытиям до этой точки и ничему после, центрируется на закрытии в этой точке и накладывается на последующие дни; затем то же самое дальше в прошлое, пока хватает истории. Каждый день считается целиком внутри, целиком снаружи или пересекающим край: дневные максимум и минимум не говорят, где внутри дня была цена, поэтому день, пересёкший край, никогда не делится наугад.
Это несколько отрезков одного пула, а не мера того, как часто метод срабатывает. Соседние подгонки перекрываются, так что отрезки не независимы друг от друга, и никто на самом деле не держал эти полосы.
«Если бы открыли тридцать дней назад» воспроизводит диапазон, который метод нарисовал бы в начале последних тридцати дней — по 31 закрытиям до этого и ничему после, — на каждом из этих дней. Получаются две цифры. Стоимость в сравнении с хранением, на каждом дневном закрытии, берётся из точных количеств концентрированной ликвидности и не требует цены в долларах. Комиссии берутся из собственных дневных комиссий пула в те дни, когда цена целиком оставалась внутри, и делятся так же, как в расчёте вклада; вклад пересчитывается по сегодняшнему курсу доллара, потому что дневного курса в истории нет.
«Попробуйте свой диапазон» воспроизводит две введённые цены на тех же тридцати днях, от того же закрытия открытия, с тем же делением комиссий и тем же курсом доллара, так что две колонки отличаются только диапазоном. Диапазон, не содержащий цену открытия, начинает лишь с одним из двух токенов и не получает комиссий, пока цена до него не дойдёт. Диапазон, который хорошо показал себя в эти дни, ничего не говорит о следующих.
Комиссии и непостоянные потери
Сколько брал пул, берётся из комиссий и объёма, которые его subgraph публикует за каждый из последних тридцати дней. Комиссии дня, делённые на его объём, дают ставку, которую участники свопов действительно заплатили, — типичный день, самый низкий и самый высокий, и всё окно как сумма комиссий на сумму объёма, — и она сопоставляется с заявленной комиссией пула. День без объёма не считается нулём, а исключается.
Сколько взял бы вклад: в каждый день, когда цена целиком оставалась внутри диапазона, долю L / (A + L) комиссий этого дня, где L — ликвидность, которую вклад покупает в диапазоне, а A — ликвидность, которую источник сообщает активной в тот день. «+ L» — это вклад, разбавляющий сам себя, поэтому больший вклад собирает не пропорционально больше. Дни, пересёкшие край, не считаются, а день внутри, для которого источник не опубликовал комиссий или активной ликвидности, так и помечается, а не записывается нулём.
Чтобы перевести доллары в ликвидность пула, нужна цена в долларах, и сайт берёт собственную цену subgraph’а, выведенную из того, что пул держит в каждом токене и в долларах, — тот самый курс, в котором выражены его комиссии. Это сегодняшний курс, применённый к прошлым дням, и страница так и говорит. Результат — только комиссии за уже прошедшие дни: не годовая ставка и не то, что заплатит следующий месяц.
Непостоянные потери — позиция в сравнении с простым хранением двух токенов — это точная арифметика кривой протокола между краями диапазона, от сегодняшней цены до каждой показанной. Им не нужны ни рыночные данные, ни размер вклада, потому что ликвидность сокращается в отношении. Непостоянны они только если цена вернётся. Они учитывают движение цены и ничего больше, а комиссии — это именно то, что поставщику платят за то, что он их несёт, поэтому читать их нужно вместе.
Hook’и v4
Пул v4 может назвать hook — контракт, который протокол вызывает в определённые моменты. Его разрешения читаются из его адреса: hook развёртывается по адресу, младшие четырнадцать бит которого говорят, какие обратные вызовы сделает PoolManager, и PoolManager проверяет эти биты, а не спрашивает контракт. Значит, сайт читает правило, которое обеспечивает протокол, — не реестр, не ярлык и не описание контракта самим собой — и говорит, что hook’у разрешено, но никогда не то, что он делает.
Hook, которому разрешено вмешиваться до свопа, может переписать его комиссию; тот, которому разрешено возвращать delta из свопа, может забрать часть самого свопа. Если у hook’а пула есть любое из этих разрешений, скрывается каждая цифра комиссий, привязанная к диапазону или вкладу, — комиссии, пока цена внутри, доля вклада, комиссии в тридцатидневном воспроизведении, доходность на странице пары, — потому что ничто в источнике не отделяет долю hook’а от доли поставщиков. То, что пул взял, по-прежнему показывается как факт о пуле, а панели, показывающие стоимость свопа, несут пометку. Пул, чей ключ не фиксирует комиссию, так и показывается, а ставка, которую он реально брал, измеряется по его дням.
Умная ликвидность
В каждой сети, где позиции можно перечислить (Ethereum, Base, Arbitrum One, OP Mainnet и Polygon), страница смотрит в 12 самых торгуемых v3-пулов недели, берёт позиции, находящиеся в диапазоне прямо сейчас, и спрашивает сеть о не более чем 100 на пул, начиная с крупнейших, каждая стоимостью не меньше 10 000 $. Измерение повторяется каждые шесть часов.
Комиссии позиции — это то, что она заработала с последнего изменения: её ликвидность, умноженная на рост комиссий внутри её диапазона с тех пор, как менеджер позиций последний раз записал свой снимок, прочитанная из сети. Пара, комиссия и tick’и каждой позиции должны вести к тому пулу, в котором она была указана. Эти комиссии, делённые на нынешнюю стоимость позиции и на дни с того изменения и приведённые к году, — её доходность. Позиции меньше 10 000 $ или изменённые менее 3 дней назад отбрасываются как слишком маленькие или слишком новые, чтобы о чём-то говорить; 20 % с наибольшей доходностью и есть умные.
Subgraph перечисляет позиции и датирует последнее изменение каждой — и только. Его поля комиссий не используются: при проверке 2026-09-30 они сообщали о двух миллиардах долларов, собранных позицией, внёсшей тридцать два миллиона. Суммы к выплате в менеджере позиций тоже не учитываются, потому что после вывода в них лежит выведенный основной капитал, пока его не заберут.
Чего доходность не учитывает: это только комиссии, и то, чем позиция поступилась по сравнению с хранением двух токенов, в неё не входит. Она охватывает одно окно на позицию, читает только позиции, находящиеся в диапазоне сейчас, и ничего не говорит о том, сколько любая из них заработает дальше или кто ею владеет.
Каждое измерение сохраняется, чтобы страница могла сказать, как всё сдвинулось за последнюю неделю, как только накопится день измерений. Диапазон пары сравнивается в ценах, а не в расстояниях от текущей цены, потому что эти расстояния меняются при каждом движении цены, даже если никто не трогал позицию. «Держатели, которые появляются снова и снова» — это адреса, бывшие в верхних 20 % как минимум в половине измерений, когда их 8 или больше. Каждый помечается как кошелёк или контракт по тому, хранит ли сеть код по его адресу: контракт — это хранилище, бот или другая программа, и его доходность — доходность этой программы.
Одна пара, все пулы
Страница пары перечисляет каждый пул v3 и v4, два символа которого в точности совпадают с введённой парой, во всех сетях, которые читает сайт. Каждый ранжируется по комиссиям за последнюю неделю, делённым на то, что в нём сейчас, и приведённым к году, — простой ставкой, без капитализации. Это прошлые комиссии к нынешней ликвидности: не прогноз и не то, что заработала бы позиция, ведь позиция зарабатывает, только пока цена внутри её диапазона, делит комиссии со всеми остальными там и кое-чем поступается в сравнении с хранением.
То, что лежит в пуле, в двух протоколах измеряется по-разному, поэтому они ранжируются отдельно: в v3 — то, что токен-контракты пула держат для него; в v4, где все токены лежат в одном PoolManager, — его глубина при текущей цене. Ранжируются только пулы стоимостью не меньше 100 000 $: ниже этого торговля одного дня слишком сильно двигает цифру, а токен-подделка вероятнее; остальные перечислены ниже по размеру, без доходности. Пул v4, чей hook может менять то, что платят свопы, показывает свои комиссии с пометкой и без доходности. Сеть, которую не удалось прочитать, так и указывается.
Письменное пояснение
На странице пула, после того как каждая цифра посчитана и проверена, языковая модель пишет четыре коротких абзаца: что покрывает диапазон, что происходит, когда цена из него выходит, что измеряет волатильность и чего не измеряет, и что анализ оставляет за кадром. Ей дают цифры так, как их показывает страница, на языке читателя, с направлениями, уже записанными готовыми предложениями. Ничего из написанного посетителем до неё не доходит — кроме адреса пула, прошедшего строгую проверку формата; ни описания токена, ни свободного текста, — а tick’и не доходят до неё вовсе.
Ей велено никогда не называть чисел, никогда не советовать и никогда не предсказывать. Это не только просьба, это обеспечивается: каждый абзац проверяется перед показом. Абзац с цифрой в любой письменности — включая арабские, деванагари и полноширинные цифры, дроби и надстрочные знаки, — кроме как в названиях v3 и v4, или с числом от одиннадцати и выше, записанным словами на любом из десяти языков, отклоняется, как и слишком короткий или слишком длинный. Если не проходит хотя бы один абзац, отбрасывается всё пояснение, и цифры остаются сами по себе.
Чего проверка обеспечить не может, так это тона; это оставлено инструкции, и страница не делает вид, что это не так. Страница называет модель, написавшую текст, так, как её сообщает провайдер, и одно и то же пояснение используется повторно не дольше часа для того же пула, тех же настроек и того же языка.
Источники данных и ограничения
Пулы читаются из subgraph’ов Uniswap v3 и v4 в The Graph, в сетях Ethereum, Base, Arbitrum One, Unichain, OP Mainnet и Polygon; Unichain читается только для v4. Там, где subgraph ошибается или молчит, сеть спрашивают напрямую, только на чтение: шаг tick’ов пула v3 и то, что держат его токен-контракты, ликвидность и цену пула v4 у PoolManager, доход и держателя позиции у менеджера позиций, и есть ли код по адресу. Каждый subgraph проверяется ежечасно.
Текущее состояние пула должно быть взято из блока, отстающего от сети не более чем на 15 минут, иначе оно отклоняется. Дневные истории хранятся в течение дня по UTC, самые торгуемые пулы недели — полчаса, поиски и чтения пар — десять минут, пояснение — час; измерение умной ликвидности обновляется каждые шесть часов.
Когда источник отказывает, страница говорит, какую часть не удалось получить, и показывает остальное; отсутствующая цифра показывается как отсутствующая, никогда как ноль, и никогда не подменяется догадкой. На странице умной ликвидности непрочитанный пул стоит только самого себя, а неудачное обновление оставляет последнее измерение в силе до истечения его срока; на странице пары непрочитанная сеть так и указывается. Пояснение — единственная часть, которой разрешено отсутствовать.
О том, кто читает сайт, ничего не хранится. Визит считается строкой, где названы страница, пул, если он есть (публичный контракт), язык и было ли это похоже на бота, — без IP-адреса, без данных браузера, без текста поиска и никогда — адреса, введённого, чтобы посмотреть его позиции. Единственное, что хранится о читателе, — оповещение в Telegram, которое он настраивает сам: введённый им адрес, его язык, числовой id чата и была ли каждая позиция в диапазоне в прошлый раз. /stop удаляет его сразу, а из резервных копий оно исчезает в течение семи дней.
Ничто на этой странице и нигде на сайте не является финансовой рекомендацией. Каждая цифра описывает уже прошедшие дни или собственную арифметику протокола; ни одна не говорит, что делать или что будет дальше.