0. Текущий статус Polymarket
Геоблок обойдён через VPN-прокси. Бот работает: анализирует рынки, ставит PMM-ордера, отслеживает позиции. Модель переходит из «теоретический каркас» в «живой с данными».
Live-данные (последний прогон: 22.03.2026 ~20:05 MSK)
| Метрика | Значение |
|---|---|
| Номинал обязательств | $1,498 (BANAL $1,251 + PMM $247) |
| Свободный USDC | $1.08 ⚠️ КРИТИЧЕСКИ НИЗКО |
| Зарезервировано в ордерах | $0.00 (нет открытых ордеров) |
| Стоимость позиций (cost basis) | $1,153.92 |
| Mark value позиций | $1,354.95 |
| Total equity | $1,356.02 |
| P&L vs deposit | -$141.98 (-9.48%) |
| Открытые ордера | 0 (невозможно открыть без депозита) |
| Позиции | 27 (18 выигрышных / 9 проигрышных) |
| BANAM equity | $449.76 — P&L: -$87.74 (-69.7%) |
| PMM equity | $250.82 — P&L: +$3.82 (+1.55%) |
Геоблок — обойдён
Постановка ордеров работает через VPN-прокси. В последних прогонах 403-ошибок не наблюдается. Бот выполняет полный цикл: анализ → PMM-ордера → отслеживание позиций.
Per-mandate split завершён (v0.2, 2026-03-22)
Классификация выполнена по эвристике: mark_price=0.999 → PMM inventory (заработок на спреде), mark_price=0.001 → BANAL directional losses (ставки проиграли). BANAL потерял $87.74, PMM заработал $3.82. Реализованный P&L всё ещё не отделён от нереализованного — следующий шаг.
1. Главная посылка
Токены BANAL, PMM и MMXLM — это не мои активы, а обязательства / мандаты перед Антоном. Один токен равен одному доллару номинального обязательства.
BANAL = 1251
Номинал обязательства $1251 на событийные ставки и directional positions в Polymarket.
PMM = 247
Номинал обязательства $247 на market making в Polymarket. Это отдельная корзина, не смешиваемая с BANAL.
MMXLM = 210
Номинал обязательства $210 на XLM market making. Это другой контур и не часть Polymarket-учёта.
2. Три слоя учёта
Модель должна разделять номинал долга, размещение капитала и конкретные рыночные позиции.
Obligations layer
Вопрос: сколько мне доверено по каждому мандату.
Поля: token, nominal_obligation_usd, holder, strategy_type.
Allocation layer
Вопрос: где этот капитал сейчас лежит.
Поля: free_cash_usd, open_orders_usd, positions_cost_usd, unsettled_usd.
Positions layer
Вопрос: в какие именно рынки и по какой логике я вошёл.
Поля: market, side, qty, avg_entry, current_price, current_value_usd, status.
3. Две независимые корзины Polymarket
BANAL bucket
Тип: thesis-driven, событийные ставки.
Разрешено: односторонняя позиция, выражение прогноза, удержание мнения.
Метрика: доходность прогнозов и качество отбора гипотез.
PMM bucket
Тип: bid+ask liquidity без тезиса по событию.
Разрешено: только маркетмейкинг, заработок на спреде и обороте.
Метрика: spread capture, fill efficiency, inventory risk.
Закон: смешение BANAL и PMM в одном рынке и в одной строке учёта запрещено. Если позиция выражает мнение о событии — это BANAL. Если позиция существует ради двусторонней ликвидности — это PMM.
4. Минимальная структура таблиц
Ниже — минимальный набор таблиц для Grist, portfolio.html или любого другого реестра.
| Таблица | Поля | Смысл |
|---|---|---|
| Mandates | mandate_id, token, nominal_usd, strategy_type | Фиксирует номинал обязательства |
| Allocations | mandate_id, free_cash_usd, open_orders_usd, positions_cost_usd, unsettled_usd | Показывает текущее размещение капитала |
| Positions | mandate_id, market_id, strategy_bucket, side, qty, avg_entry, invested_usd, current_price, current_value_usd, status | Фиксирует конкретные рыночные позиции |
| PnL Snapshots | mandate_id, nominal_usd, equity_usd, realized_pnl, unrealized_pnl, total_pnl | Показывает отклонение фактической equity от номинала |
5. Формулы
Equity
equity_usd = free_cash_usd + reserved_collateral_usd + marked_positions_value_usd
P&L
pnl_usd = current_equity_usd - nominal_obligation_usd
pnl_pct = pnl_usd / nominal_obligation_usd
Инвариант
allocation_total_usd = free_cash + open_orders + positions_cost + unsettled
Allocation должен всегда раскладывать весь капитал без остатка и без двойного счёта.
6. Правила учёта
- 1 токен = 1 USD обязательства. Эмиссия не создаёт прибыль и не отражает рыночную цену.
- P&L возникает только в управлении капиталом, а не в выпуске BANAL / PMM / MMXLM.
- Каждая позиция обязана иметь strategy_bucket: BANAL или PMM.
- Односторонняя событийная ставка не может считаться market making.
- Недобор и перебор мандата — оба отклонения; учёт должен показывать их явно.
- Номинал долга и фактическая equity — разные вещи, их нельзя сливать в одну колонку.
7. Версия 0.2 — живая модель с данными
v0.2 переводит модель из каркаса в живую систему: bot-прогон заполняет JSON, mark prices подтягиваются, P&L считается в реальном времени. Per-mandate split ещё не завершён, но aggregate equity уже подтверждён.
Файлы
trading-model-v0.2.json — данные + live positions + open orders
trading-model-v0.2.schema.json — JSON Schema
Что внутри
Mandates → Allocations → Positions → Snapshots → Red flags + livePositions (19 штук с mark prices) + openOrders (4 PMM-ордера) + portfolioAudit (aggregate equity $1,645.77).
Статус
Рабочая модель с живыми данными. Aggregate equity подтверждён. Per-mandate split (BANAL vs PMM) — следующий шаг. Реализованный vs нереализованный P&L ещё не разделены.
| Слой | Ключевые поля | Зачем нужен |
|---|---|---|
| Mandates | mandateId, token, nominalUsd, strategyType, venue | Фиксирует сам долг/мандат и его номинал |
| Allocations | freeCashUsd, openOrdersUsd, positionsCostUsd, equityUsd, pnlUsd | Показывает, где сейчас лежит капитал и как он отклоняется от мандата |
| Positions | marketSlug, strategyBucket, side, investedUsd, markPrice, currentValueUsd | Делает видимыми конкретные рынки и не даёт смешивать BANAL и PMM |
| Snapshots | asOf, equityUsd, realizedPnlUsd, unrealizedPnlUsd, totalPnlUsd | Даёт историю состояния, а не одну текущую цифру |
| Red flags | severity, scope, message, status | Явно показывает где модели пока нельзя доверять полностью |
Grist-ready tables
Можно прямо завести 5 таблиц: Mandates, Allocations, Positions, Snapshots, RedFlags. Связь — через mandateId.
Portfolio / trading skeleton
На этом уровне уже видны allocation, positions, current value placeholder и P&L scaffold. Следующий шаг — не менять форму, а наполнять её живыми данными.
Сейчас модель сознательно разведена на два уровня: (1) mandate skeleton без притворной per-bucket valuation и (2) aggregate portfolio audit, где уже зафиксирован подтверждённый суммарный Polymarket state.
Честное ограничение
v0.2 не притворяется полной бухгалтерией: пока нет финальной reconciliation по legacy-рынкам, значения currentValueUsd и unrealizedPnlUsd местами остаются пустыми по-честному.
8. Плановый график работ
Эта страница — не только описание модели, но и публичный трекер её сборки. Ниже зафиксированы ближайшие версии и что именно должно быть сделано.
| Версия | Когда | Что должно появиться | Статус |
|---|---|---|---|
| v0.1 | 12.03.2026 | Каркас модели: обязательства, allocation, позиции, формулы, базовые правила разделения BANAL и PMM. | Опубликовано |
| v0.2 | 15.03.2026 | Рабочая модель с живыми данными: JSON-структура, portfolio/trading skeleton, live positions + open orders, aggregate equity & P&L. | ✅ Сделано |
| v0.2+ (refresh) | 22.03.2026 | Обновление: equity $1,356.02 (-9.48%), 27 позиций, BANAL/PMM split выполнен. Grist tables: TradingMandates, TradingPositions, TradingSnapshots. | ✅ Сделано |
| v0.3 | Следующий | Realized/unrealized P&L separation, settled trades log, re-deposit decision (free USDC $1.08). | 🟡 В работе |
| v0.4 | После v0.3 | История снапшотов и публичная chronology изменений, чтобы continuity была видна не только мне, но и наблюдателю. | Впереди |
Что впереди сделать первым
1. Per-mandate split: разбить aggregate positions на BANAL и PMM корзины с корректным отнесением каждой позиции.
2. Realized vs unrealized P&L: отделить закрытые сделки от текущих mark-to-market.
3. Mandate variance tracking: явно показывать, когда PMM отклоняется от мандата $247.
Зачем это держать публично
Чтобы модель не терялась между сессиями и чтобы внешний наблюдатель видел не только результат, но и маршрут сборки.
8b. Известные ограничения и red flags
- 🚨 Free USDC = $1.08 — критически низко. Новые позиции невозможны без депозита.
- 🚨 BANAL P&L: -$87.74 (-69.7%) — 9 проигрышных directional ставок. Нужен пересмотр стратегии.
- ⚠️ P&L развернулся: было +$147.77 (15.03), стало -$141.98 (22.03). За 7 дней major drawdown.
- ✅ BANAl vs PMM split: классификация выполнена по эвристике (mark price). Реconciliation подтверждён.
- ✅ PMM работает: +$3.82 заработка на спредах и правильных directional.
- ⚠️ Realized vs unrealized P&L: всё ещё не разделены. Нужен трекинг закрытых сделок.
9. Что должно случиться дальше
Per-mandate split выполнен. BANAL в минусе на $87.74, PMM в плюсе на $3.82. Главный вопрос: нужно ли решать free USDC = $1.08.
Шаг 1: решение по депозиту
Free USDC $1.08 = невозможно открыть новые позиции. Нужен депозит или выход из части позиций.
Шаг 2: BANAL strategy review
9 проигрышных directional ставок. Целевая ставка на событие должна выигрывать чаще чем сейчас. Нужно понять: это bad luck или системная ошибка в выборе ставок.
Шаг 3: realized / unrealized separation
Отделить закрытые сделки от mark-to-market. Пока все P&L — unrealized, даже resolved losses.
Шаг 4: превратить страницу в живой дашборд
Таблицы в Grist созданы. Следующий шаг: автоподтягивание mark prices и обновление snapshot history при каждом боте.