Фьючерсы
Доступ к сотням фьючерсов
TradFi
Золото
Одна платформа мировых активов
Опционы
Hot
Торги опционами Vanilla в европейском стиле
Единый счет
Увеличьте эффективность вашего капитала
Демо-торговля
Введение в торговлю фьючерсами
Подготовьтесь к торговле фьючерсами
Фьючерсные события
Получайте награды в событиях
Демо-торговля
Используйте виртуальные средства для торговли без риска
Запуск
CandyDrop
Собирайте конфеты, чтобы заработать аирдропы
Launchpool
Быстрый стейкинг, заработайте потенциальные новые токены
HODLer Airdrop
Удерживайте GT и получайте огромные аирдропы бесплатно
Pre-IPOs
Откройте полный доступ к глобальным IPO акций
Alpha Points
Торгуйте и получайте аирдропы
Фьючерсные баллы
Зарабатывайте баллы и получайте награды аирдропа
Инвестиции
Simple Earn
Зарабатывайте проценты с помощью неиспользуемых токенов
Автоинвест.
Автоинвестиции на регулярной основе.
Бивалютные инвестиции
Доход от волатильности рынка
Мягкий стейкинг
Получайте вознаграждения с помощью гибкого стейкинга
Криптозаймы
0 Fees
Заложите одну криптовалюту, чтобы занять другую
Центр кредитования
Единый центр кредитования
Рекламные акции
AI
Gate AI
Ваш универсальный AI-ассистент для любых задач
Gate AI Bot
Используйте Gate AI прямо в вашем социальном приложении
GateClaw
Gate Синий Лобстер — готов к использованию
Gate for AI Agent
AI-инфраструктура: Gate MCP, Skills и CLI
Gate Skills Hub
Более 10 тыс навыков
От офиса до трейдинга: единая база навыков для эффективного использования ИИ
GateRouter
Умный выбор из более чем 40 моделей ИИ, без дополнительных затрат (0%)
Polymarket PnL точный расчет: почему ваш расчет прибыли и убытков может быть неправильным?
Я полгода занимаюсь автоматической торговлей на Polymarket, и самая большая ошибка, которую я совершил, — это не сбой стратегии, а то, что я неправильно посчитал, сколько именно заработал или потерял.
Это не из-за моей некомпетентности. Само вычисление PnL в PM — это минное поле. Официальный API даёт неверные цифры, сторонние аналитические сайты показывают неправильные рейтинги. Вы пишете скрипт для подсчёта? Скорее всего, тоже ошибаетесь.
Насколько большие расхождения? Третье место в рейтинге, kch123, по ошибочной методике посчитал убыток в 3,5 миллиона долларов, а фактическая прибыль — 11,4 миллиона долларов. Это не просто несколько процентов — даже знак прибыли и убытка перепутан.
В этой статье я подробно разберу каждую ошибку, которую я совершил. Трейдерам, разработчикам инструментов, следящим за рейтингами — рано или поздно столкнутся.
Ошибка 1: cashPnl не включает уже закрытую прибыль
Самый очевидный способ: взять API /positions, сложить поля cashPnl (наличные прибыль и убытки).
На практике проверка трёх адресов из топ-15 показала:
swisstony: сумма cashPnl +$35 000, реальный рейтинг +$5,6 миллиона, разница в 158 раз
kch123: сумма cashPnl —$3,52 миллиона, реальный рейтинг +$11,4 миллиона, знак перепутан
gmanas: сумма cashPnl —$2,64 миллиона, реальный рейтинг +$5,02 миллиона, знак перепутан
Три адреса, два случая, когда знак прибыли и убытка был просто перепутан.
Причина: API /positions возвращает cashPnl без учёта уже закрытых/выкупленных реализованных PnL. Если позиция выиграла и была автоматически выкуплена в USDC, она исчезает из ответа API. Остаются только незакрытые позиции — зачастую с убытками.
Вы думаете, что считаете всю прибыль и убытки? На самом деле — только незакрытые части.
Ошибка 2: поле makerPnl не совпадает с денежными потоками на блокчейне
В JSONL с данными о сделках есть поле makerPnl (прибыль/убыток маркетмейкера), по названию — для подсчёта PnL. Не верьте.
Я заметил, что сумма makerPnl по сценарию не совпадает с результатами учёта денежных потоков на блокчейне — разница в порядке величины. Конкретное соотношение зависит от ситуации, но направление одинаковое: внутренняя логика makerPnl не совпадает с реальными USDC-движениями.
Независимо от размера расхождения: не используйте это поле для подсчёта PnL.
Ошибка 3: нельзя считать по txHash отдельно для устранения дублирующих записей
Это самое противоречивое.
Один и тот же txHash (хеш транзакции) может встречаться несколько раз. Обычно — реакция: дубли, нужно удалять.
Но так делать нельзя. В CLOB Polymarket (он же on-chain order book) в одной транзакции могут быть выполнены несколько ордеров маркетмейкеров, и все эти записи — реальные отдельные сделки.
Раньше я удалял дубли по txHash + активу, и из-за этого недосчитался 133 долларов на стороне BUY. Проверка на Polygon показала: один txHash действительно содержит несколько отдельных USDC Transfer событий, каждое — реальная сделка.
Вывод: нельзя удалять дубли только по txHash. Для подсчёта PnL нужно просто суммировать исходные данные /activity.
Ошибка 4: лимит по offset при пагинации
При использовании API /activity для пагинации через offset — при превышении 3000 записей возникает ошибка 400. В документации об этом не написано.
Все три проверенных адреса подтвердили: запрос GET /activity?offset=3100 возвращает HTTP 400 с сообщением, что превышен лимит — max historical activity offset of 3000 exceeded. У крупных игроков часто более 10 000 сделок, 3000 — недостаточно.
Использование параметра end (указание времени последней записи предыдущей страницы минус 1) в качестве курсора не имеет ограничений.
Ошибка 5: различия в методиках подсчёта PnL в рейтинге
После подсчёта PnL одного адреса и сравнения с рейтингом — есть расхождения.
В большинстве случаев разница не превышает $10 (из-за колебаний стоимости позиций). Но если разница заметно больше, возможные причины: разные окна агрегации в рейтинге, задержки обновления кеша или привязка нескольких прокси-кошельков к одному аккаунту.
На практике, результаты по cash flow очень точно совпадают с API lb-api.polymarket.com/profit?window=all&address=X. Если есть большие расхождения — сначала проверьте, не пропущена ли страница (ошибка 4), не использовались ли неправильные поля (ошибки 1-2).
Правильный подход
После экспериментов я пришёл к выводу, что самый надёжный способ — использовать Data API для подсчёта денежных потоков. Без предварительных вычислений, просто исходя из исходных сделок.
Формула:
PnL = SUM(TRADE, где side=SELL) + SUM(REDEEM) + SUM(MERGE) + SUM(MAKER_REBATE) + SUM(REWARD) - SUM(TRADE, где side=BUY) - SUM(SPLIT) + рыночная стоимость позиций
· TRADE BUY: покупка токена за USDC (расход)
· TRADE SELL: продажа токена и получение USDC (доход)
· REDEEM: выкуп выигранной позиции за USDC (доход)
· SPLIT: создание токена из USDC (расход)
· MERGE: объединение токенов обратно в USDC (доход)
· MAKER_REBATE: вознаграждение маркетмейкера (доход)
· REWARD: награды/аирдропы (доход)
· Источник данных:
GET /activity?user=
&limit=500, постранично с end, затем суммировать по типам.· Рыночная стоимость позиций:
GET /positions?user=
, size × текущая цена.· Верификация:
Сравнить полученные результаты с API рейтинга Polymarket (lb-api.polymarket.com/profit?window=all&address=X). Разница менее $10 — считается точным. Расхождения вызваны колебаниями стоимости позиций.
Проверка: топ-15 адресов — реальные результаты
После подсчёта по cash flow, сверка с API рейтинга:
swisstony: +$5,6 миллиона по методу cash flow, +$5,6 миллиона в рейтинге, разница < $10
kch123: +$11,4 миллиона по методу cash flow, +$11,4 миллиона в рейтинге, разница < $10
gmanas: +$5,02 миллиона по методу cash flow, +$5,02 миллиона в рейтинге, разница < $10
Все три адреса показывают расхождения менее $10, вызванные колебаниями стоимости позиций.
После внедрения этого метода я проанализировал сотни топовых адресов — и результаты оказались совсем другими.
Итог
SUM(cashPnl) из /positions — не подходит, не включает реализованную прибыль, знак может быть перепутан.
Суммирование по makerPnl — не подходит, не совпадает с денежными потоками.
Подсчёт по дублирующим txHash — не подходит, теряются реальные сделки.
Пагинация с offset + суммирование — не подходит, данные обрезаются, при >3000 — ошибка.
Метод cash flow через Data API — самый надёжный, разница менее $10.
Первый шаг в квантовой торговле — не искать альфу. А убедиться, что ваши расчёты правильные.
Все вышеописанные ошибки — из реальной практики, а не теоретические рассуждения. API Polymarket может меняться в любой момент, поэтому рекомендуется регулярно сверять результаты с API рейтинга.
Нажмите, чтобы узнать о вакансиях в BlockBeats
Присоединяйтесь к официальному сообществу BlockBeats:
Telegram подписка: https://t.me/theblockbeats
Telegram группа: https://t.me/BlockBeats_App
Twitter официальный аккаунт: https://twitter.com/BlockBeatsAsia