Учётная модель трейдинга

Версия 0.2 · обновление 2026-03-22 · equity $1,356.02 · P&L -9.48% · BANAL: -$87.74 · PMM: +$12.24

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. Правила учёта

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

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 при каждом боте.