Два трекери можуть дивитися на той самий гаманець і показувати різний профіт. Жоден не бреше — вони користуються різними визначеннями. Ось сама арифметика і те, звідки беруться розбіжності.
Реалізований і нереалізований — це два різні числа
Реалізований P&L — це зафіксований прибуток: він виникає лише тоді, коли ви позбуваєтеся активу. Продали 1 ETH за USDT — різниця між отриманим і тим, скільки цей ETH вам коштував, зафіксована назавжди, що б не робила ціна далі.
Нереалізований P&L — це прибуток, який дала б відкрита позиція, якби ви закрили її зараз. Це поточна ціна того, що ви тримаєте, мінус те, що ви за це заплатили. Він рухається щохвилини і не є грошима, поки ви не продали.
Сума двох дає загальний P&L. Показ лише одного з них — найчастіша причина, чому число в трекері вас дивує.
Собівартість: середньозважена, а не FIFO
Щоб знати, скільки щось вам коштувало, потрібна собівартість. Якщо купівля була одна — це ціна купівлі. Якщо їх було сім за сімома цінами — це вибір методу, і вибір змінює відповідь.
- Середньозважена ціна — кожна купівля вливається в одну поточну середню ціну всієї позиції. Crypto Stats використовує саме її, як і більшість трекерів.
- FIFO — вважається, що продаються монети, куплені найраніше. Поширений у податковій звітності, і з тих самих трейдів дає інший реалізований результат.
Абстрактно правильнішого методу немає; важливо, щоб один метод застосовувався до всіх трейдів. Трекер, який їх змішує, не зійдеться сам із собою.
Що вважається вибуттям
Реалізований P&L створює лише трейд — купівля, продаж або своп. Саме тут ламається наївний облік: переміщення монет — це не торгівля ними.
- Купівля, продаж, своп — вибуття. Своп — це дві ноги одночасно: ви позбуваєтеся одного активу і отримуєте інший, тому P&L реалізується на тій нозі, яку ви віддали.
- Відправлення й отримання — не вибуття. Переказ 1 BTC із біржі на власний гаманець змінює, де лежить монета, а не скільки вона вам коштувала. Якщо це порахувати продажем, трекер вигадає прибуток, якого не було — дуже поширене джерело безглуздих чисел.
Приклад із числами
Три купівлі й один продаж, собівартість за середньозваженою:
- Купівля 1 SOL по $80 → позиція 1 SOL, середня $80
- Купівля 2 SOL по $110 → позиція 3 SOL, середня (80 + 220) / 3 = $100
- Купівля 1 SOL по $140 → позиція 4 SOL, середня (300 + 140) / 4 = $110
- Продаж 2 SOL по $160 → реалізований P&L = 2 × (160 − 110) = +$100
Решта 2 SOL зберігають середню $110 — продаж її не змінює. За поточної ціни $150 нереалізований P&L на залишку = 2 × (150 − 110) = +$80, отже загальний P&L = $180.
Чому трекер і біржа не сходяться
Навіть з однаковою арифметикою дві системи розійдуться, якщо бачать різні трейди. Звичні причини:
- Неповна історія. Більшість API бірж віддають трейди по символу, а не по акаунту. Пара, про яку не спитали, — це пара, чиї трейди відсутні.
- Філи проти ордерів. Один маркет-ордер може виконатися десятком філів за десятком цін. Якщо звести їх до одного рядка з однією ціною, середня собівартість поїде.
- Комісії. Комісія, сплачена третім активом, сама є вибуттям. Проігноровані комісії роблять кращими всі числа у звіті.
- Залишки до початку історії. Якщо монета була у вас раніше за найранішу видиму транзакцію, її собівартість із даних невідома. Чесна поведінка — сказати про це, а не підставити нуль: нуль означає, що весь баланс — це прибуток.
Практична перевірка трекера — не в тому, чи він вміє множити. А в тому, чи кількість, яку він вам показує, збігається з реальним балансом у мережі, і чи він попереджає, коли ні.