Что на самом деле значит «капитал в одной валюте»
Если всё, чем вы владеете, в одной валюте, ваш капитал — это сложение. Если нет, это цепочка решений, меняющих ответ, и большинство приложений принимает их молча.
Решения Walleet стоит проговорить: число на дашборде осмысленно ровно настолько, насколько осмыслен метод за ним.
Это число — конвертация, а не сумма
Допустим, у вас 3 000 €, 1 400 £ и 4 200 $, а капитал вы смотрите в долларах. Эта цифра — не сумма того, что у вас есть. Это оценка того, сколько было бы, если бы вы всё перевели в доллары в определённый момент по курсу, который вам никто не предлагал.
Это всё равно самое полезное из доступных чисел. Но оно меняется по двум разным причинам — изменились ваши активы или изменился курс, — и хороший трекер их разделяет.
Каждый баланс хранится в своей валюте
Walleet записывает то, что вы ввели, в той валюте, в которой вы это ввели. На счёте в евро лежат евро. Конвертация происходит при отрисовке экрана и никогда — при сохранении.
Альтернатива — конвертировать на входе и хранить одну валюту — соблазнительна и неверна. Она навсегда вшивает курс дня в вашу историю. Исправьте курс позже — и все прошлые записи останутся ошибочными; смените валюту отображения — и вы конвертируете уже конвертированное, накапливая ошибку.
Хранить то, что было, и пересчитывать при чтении — значит иметь историю, отражающую реальные остатки, где валюта отображения лишь линза, а не свойство данных.
У курсов есть дата
Мартовский баланс пересчитывается по мартовскому курсу.
Звучит очевидно и часто делается иначе. Пересчитывать всё по сегодняшнему курсу проще — один запрос вместо одного на запись — и график начинает задним числом менять форму. Ваш капитал полтора года назад — исторический факт. Он не должен двигаться из-за того, что евро сдвинулся сегодня утром.
Walleet хранит датированный курс для каждого актива и берёт курс на дату самой записи. Прошлогодний график сегодня выглядит так же, как выглядел тогда.
Всё оценивается через одну опорную валюту
Курсы хранятся относительно одной опорной валюты, а не парами. Перевод из евро в иены — это евро → опорная, опорная → иены.
Хранить пары напрямую означало бы курс на каждое сочетание: при полусотне активов это больше тысячи пар в день, почти все из которых никогда не понадобятся, и каждая — возможность для двух путей между одними и теми же валютами разойтись. Через опорную валюту получается один курс на актив в день и ровно один ответ на любой пересчёт.
Цена — округление в середине, незаметное при любых суммах, которые человек реально держит.
Два поставщика, потому что активы бывают двух видов
Национальные валюты и криптовалюты оценивают разные источники, и в строке курса записано, какой именно.
Это не бухгалтерия. Валютный и криптовалютный поставщики по-разному понимают, что
такое актив, — и один код может быть и тем, и другим. MNT — это монгольский
тугрик и одновременно Mantle, криптотокен, и разница между ними примерно в три
порядка. Актив, опознаваемый только по коду, их не различит, и это не сообщение
об ошибке, а неверное число.
Walleet опознаёт актив по коду и типу. Два счёта могут оба показывать «MNT» и пересчитываться в совершенно разные суммы, потому что это два разных актива, случайно делящих три буквы.
Точность у каждого актива своя
Не у всех валют два знака после запятой. У иены их нет — в ¥610 000 нет копеек. У бахрейнского динара их три. У биткоина — восемь, и сатоши, отрисованный с двумя знаками, равен нулю.
Walleet пишет каждый актив с его собственной точностью: для национальных валют берётся стандартное число знаков, для монет — заявленное. Криптовалюты ограничены восемью знаками — этого достаточно для любого реального объёма, и это объявленный предел, а не незаметное отсечение для токенов с большей делимостью.
Разделение накопленного и курсового
Поскольку курс на каждую дату известен, изменение суммы можно разложить.
Если за месяц капитал упал на 400 $, Walleet может сказать, какая часть — это уменьшение балансов, а какая — укрепление доллара к валютам, которые вы держите. Это несвязанные события, и только одно из них про ваше поведение.
Без разделения хороший месяц в плохой валюте выглядит как плохой месяц, и вы делаете неверный вывод о собственных накоплениях.
Чем это число не является
Не оценкой стоимости. Никто не даст вам среднерыночный курс. Реальная конвертация стоит спреда, а часто и комиссии.
Не оценкой при продаже. Оно предполагает, что всё конвертируется одновременно по указанному курсу, что неверно для крупных сумм, неликвидных активов и всего, у чего есть срок расчётов.
Не точнее своих входных данных. Оно построено из балансов, которые вы ввели в выбранные вами дни. Если один месячной давности, то в этой части и сумма месячной давности.
Не имеет отношения к налогам. Это не прибыль, не база и не реализованный результат.
Чем оно является: последовательной, датированной, честно пересчитанной оценкой, которая в этом месяце значит то же, что и в прошлом. Именно эта последовательность делает тренд читаемым, а тренд и есть смысл.
