Керування криптовалютним портфелем через кілька бірж, гаманців і DeFi-протоколів може бути складним завданням. Цей вичерпний посібник показує, як налаштувати й підтримувати точне відстеження криптовалютного портфеля за допомогою потужної системи бухгалтерії у простому тексті від Beancount.io.
Ознайомтеся з робочим прикладом леджера для криптовалют:
Чому традиційні трекери портфеля не справляються
Поширені проблеми з інструментами для крипто портфеля
- Обмежена підтримка бірж: багато інструментів не підтримують усі біржі чи DeFi-протоколи
- Неточна база витрат: спрощені розрахунки FIFO/LIFO не враховують складні сценарії
- Пропущені транзакції: обмеження API та прогалини в ручному введенні
- Відсутність налаштування: фіксовані категорії та структури звітності
- Проблеми з приватністю: передача API-ключів стороннім сервісам
- Прив'язка до постачальника: пропрієтарні формати даних та обмежені можливості експорту
Переваги Beancount.io
- Повний контроль: володійте своїми даними у форматі простого тексту
- Необмежене налаштування: створюйте будь-яку структуру рахунків, яка вам потрібна
- Точна база витрат: відстеження на основі лотів з конкретною ідентифікацією
- Підтримка багатьох протоколів: працюйте з будь-якою біржею, гаманцем чи DeFi-протоколом
- Прозорі розрахунки: бачте точно, як обчислюються числа
- Стійкість до майбутнього: формат простого тексту забезпечує довгострокову доступність
Налаштування структури крипто портфеля
Базова ієрархія рахунків
Почніть з вичерпної структури рахунків, яка відображає вашу криптоекосистему:
; Exchange Accounts - Organized by Platform
1970-01-01 open Assets:Crypto:Coinbase:USD
1970-01-01 open Assets:Crypto:Coinbase:BTC
1970-01-01 open Assets:Crypto:Coinbase:ETH
1970-01-01 open Assets:Crypto:Coinbase:ADA
1970-01-01 open Assets:Crypto:Binance:USD
1970-01-01 open Assets:Crypto:Binance:BTC
1970-01-01 open Assets:Crypto:Binance:ETH
1970-01-01 open Assets:Crypto:Binance:BNB
1970-01-01 open Assets:Crypto:Kraken:USD
1970-01-01 open Assets:Crypto:Kraken:BTC
1970-01-01 open Assets:Crypto:Kraken:ETH
1970-01-01 open Assets:Crypto:Kraken:ADA
1970-01-01 open Assets:Crypto:Binance:ADA
; Wallet Accounts - Organized by Type
1970-01-01 open Assets:Crypto:Wallet:Ledger:BTC
1970-01-01 open Assets:Crypto:Wallet:Ledger:ETH
1970-01-01 open Assets:Crypto:Wallet:MetaMask:ETH
1970-01-01 open Assets:Crypto:Wallet:MetaMask:USDC
1970-01-01 open Assets:Crypto:Wallet:MetaMask:UNI
1970-01-01 open Assets:Crypto:Wallet:TrustWallet:BNB
; DeFi Protocol Accounts
1970-01-01 open Assets:DeFi:Uniswap:ETH-USDC-LP
1970-01-01 open Assets:DeFi:Compound:CUSDC
1970-01-01 open Assets:Staking:Ethereum:ETH
1970-01-01 open Assets:Staking:Cardano:ADA
; Income Tracking
1970-01-01 open Income:Crypto:Staking:ETH
1970-01-01 open Income:Crypto:Staking:ADA
1970-01-01 open Income:Crypto:Mining:BTC
1970-01-01 open Income:Crypto:Airdrops
1970-01-01 open Income:Crypto:DeFi:Yield
1970-01-01 open Income:Crypto:Arbitrage
1970-01-01 open Income:CapitalGains:Crypto
1970-01-01 open Income:CapitalGains:LongTerm
; Expense Tracking
1970-01-01 open Expenses:Crypto:Fees:Trading
1970-01-01 open Expenses:Crypto:Fees:Network
1970-01-01 open Expenses:Crypto:Fees:Withdrawal
1970-01-01 open Expenses:CapitalLoss:CryptoТут спрацьовує одне правило найменування, і парсер забезпечує його виконання, а не угода: кожен компонент рахунку та кожен символ товару мають починатися з великої літери або цифри. Compound у своєму власному інтерфейсі всюди пише свій токен-розписку cUSDC, але і Assets:DeFi:Compound:cUSDC, і товар cUSDC є помилками лексера. Записуйте їх як CUSDC і зберігайте власне написання протоколу в метаданих name: товару.
Визначення комодіті з метаданими
Визначте свої криптовалюти з насиченими метаданими для кращого відстеження:
1970-01-01 commodity BTC
name: "Bitcoin"
asset-class: "cryptocurrency"
sector: "digital-currency"
price-source: "coinbase"
website: "https://bitcoin.org"
1970-01-01 commodity ETH
name: "Ethereum"
asset-class: "cryptocurrency"
sector: "smart-contract-platform"
price-source: "coinbase"
website: "https://ethereum.org"
1970-01-01 commodity ADA
name: "Cardano"
asset-class: "cryptocurrency"
sector: "smart-contract-platform"
price-source: "binance"
website: "https://cardano.org"
1970-01-01 commodity DOT
name: "Polkadot"
asset-class: "cryptocurrency"
sector: "interoperability"
price-source: "kraken"
website: "https://polkadot.network"Відстеження портфеля на кількох біржах
Запис покупок на різних біржах
Відстежуйте ту саму криптовалюту на різних біржах з точною базою витрат:
; Bitcoin purchases on different exchanges
2024-01-15 * "Buy BTC on Coinbase"
Assets:Crypto:Coinbase:BTC 1.0 BTC {45000.00 USD}
Assets:Crypto:Coinbase:USD -45000.00 USD
Expenses:Crypto:Fees:Trading 50.00 USD
Assets:Crypto:Coinbase:USD -50.00 USD
2024-01-20 * "Buy BTC on Binance"
Assets:Crypto:Binance:BTC 0.5 BTC {46000.00 USD}
Assets:Crypto:Binance:USD -23000.00 USD
Expenses:Crypto:Fees:Trading 25.00 USD
Assets:Crypto:Binance:USD -25.00 USD
2024-01-25 * "Buy BTC on Kraken"
Assets:Crypto:Kraken:BTC 0.8 BTC {44000.00 USD}
Assets:Crypto:Kraken:USD -35200.00 USD
Expenses:Crypto:Fees:Trading 30.00 USD
Assets:Crypto:Kraken:USD -30.00 USDТрансфери між біржами
Відстежуйте перекази між біржами, зберігаючи базу витрат:
2024-02-01 * "Transfer BTC from Coinbase to Ledger"
Assets:Crypto:Coinbase:BTC -0.5 BTC {45000.00 USD}
Assets:Crypto:Wallet:Ledger:BTC 0.5 BTC {45000.00 USD}
Expenses:Crypto:Fees:Withdrawal 0.0005 BTC {45000.00 USD}
Assets:Crypto:Coinbase:BTC -0.0005 BTC {45000.00 USD}Можливості арбітражу
Арбітраж — це одна економічна подія на двох майданчиках, тож записуйте його як одну транзакцію. Цей запис продає 10 ETH, які ви вже тримаєте на Coinbase, за $2,580.00 і негайно відновлює позицію на Binance за $2,500.00:
2024-02-10 * "Arbitrage: Buy ETH on Binance, Sell on Coinbase"
; Buy leg on Binance
Assets:Crypto:Binance:ETH 10 ETH {2500.00 USD}
Assets:Crypto:Binance:USD -25000.00 USD
Expenses:Crypto:Fees:Trading 25.00 USD
Assets:Crypto:Binance:USD -25.00 USD
; Sell leg on Coinbase, at the higher price
Assets:Crypto:Coinbase:ETH -10 ETH {2500.00 USD} @ 2580.00 USD
Assets:Crypto:Coinbase:USD 25800.00 USD
Expenses:Crypto:Fees:Trading 30.00 USD
Assets:Crypto:Coinbase:USD -30.00 USD
Income:Crypto:Arbitrage -800.00 USD ; 25,800.00 proceeds - 25,000.00 basisТри речі, які варто запам'ятати:
- Ніколи не залишайте порожній рядок між проведеннями. Порожній рядок завершує транзакцію, і Beancount повідомляє про синтаксичну помилку в проведеннях після нього. Використовуйте відступлені коментарі
;, щоб позначити сторони — саме це роблять два рядки коментарів вище. - Прибуток — це прибуток від вибуття, $800.00, і він від'ємний, бо рахунки
Incomeмістять кредити. $55.00 комісій — це окремо: саме вони перетворюють $800.00 валового спреду на $745.00 прибутку, і вони вже записані у двох власних проведеннях. - Сторона продажу зменшує лот, який ви вже маєте тримати. Цей запис припускає 10 ETH, куплених раніше на Coinbase за $2,500.00; без цього лота зменшенню немає проти чого проводитися.
Розширене управління собівартістю
Відстеження за лотами
Система на основі лотів Beancount.io забезпечує точне відстеження бази витрат:
; Multiple purchases at different prices
2024-01-01 * "BTC Purchase Lot 1"
Assets:Crypto:Coinbase:BTC 1.0 BTC {40000.00 USD}
Assets:Crypto:Coinbase:USD -40000.00 USD
2024-02-01 * "BTC Purchase Lot 2"
Assets:Crypto:Coinbase:BTC 1.0 BTC {45000.00 USD}
Assets:Crypto:Coinbase:USD -45000.00 USD
2024-03-01 * "BTC Purchase Lot 3"
Assets:Crypto:Coinbase:BTC 1.0 BTC {50000.00 USD}
Assets:Crypto:Coinbase:USD -50000.00 USDЗнак для прибутків і збитків
Рахунки Income містять кредити, тож Beancount зберігає їх як від'ємні числа. Тому кожен прибуток нижче — це від'ємне проведення на рахунок доходу, а кожен збиток — додатне проведення на рахунок витрат. Комісія окрема від обох: вона сама по собі є витратою, тож віднімання її також від прибутку зарахувало б її двічі й залишило б транзакцію незбалансованою.
Для одного вибуття арифметика завжди така:
gain (or loss) = gross proceeds - cost basis of the lots removed
net cash = gross proceeds - feesМетод точного визначення лоту
Продавайте конкретні лоти для оптимального управління податками. Назвати витрату лота у проведенні зменшення — це і є "конкретна ідентифікація" в Beancount, і вона працює за стандартного бронювання STRICT:
; Sell the most expensive lot: 1.0 BTC bought at $50,000.00
2024-04-01 * "Sell BTC Lot 3 for tax optimization"
Assets:Crypto:Coinbase:BTC -1.0 BTC {50000.00 USD} @ 48000.00 USD
Assets:Crypto:Coinbase:USD 48000.00 USD ; gross proceeds
Expenses:Crypto:Fees:Trading 50.00 USD
Assets:Crypto:Coinbase:USD -50.00 USD
Expenses:CapitalLoss:Crypto 2000.00 USD ; 50,000.00 basis - 48,000.00 proceedsПродаж найдавнішого або найновішого лоту
Називання іншої витрати вибирає інший лот. Ці два продажі беруть лот за $40,000.00, а потім лот за $45,000.00 — два, що ще залишилися після того, як у прикладі вище пішов лот за $50,000.00 — це той самий вибір, який автоматично зробили б FIFO і LIFO, записаний вручну:
; Sell the oldest lot (bought 2024-01-01 at $40,000.00)
2024-05-01 * "Sell 0.5 BTC from the oldest lot"
Assets:Crypto:Coinbase:BTC -0.5 BTC {40000.00 USD} @ 52000.00 USD
Assets:Crypto:Coinbase:USD 26000.00 USD ; gross proceeds, 0.5 * 52,000.00
Expenses:Crypto:Fees:Trading 30.00 USD
Assets:Crypto:Coinbase:USD -30.00 USD
Income:CapitalGains:Crypto -6000.00 USD ; 26,000.00 proceeds - 20,000.00 basis
; Sell the newest remaining lot (bought 2024-02-01 at $45,000.00)
2024-05-02 * "Sell 0.5 BTC from the newest lot"
Assets:Crypto:Coinbase:BTC -0.5 BTC {45000.00 USD} @ 52000.00 USD
Assets:Crypto:Coinbase:USD 26000.00 USD
Expenses:Crypto:Fees:Trading 30.00 USD
Assets:Crypto:Coinbase:USD -30.00 USD
Income:CapitalGains:Crypto -3500.00 USD ; 26,000.00 proceeds - 22,500.00 basisТа сама ціна продажу, інший лот, різниця $2,500.00 у реалізованому прибутку. Якщо ви віддаєте перевагу тому, щоб Beancount сам вибрав лот, установіть метод бронювання на рахунку замість називання витрати — "FIFO", "LIFO" або "HIFO" у директиві open, описано в Управлінні запасами.
Аналіз ефективності портфеля
Налаштування відстеження цін
Налаштуйте автоматичні джерела цін для точної оцінки:
Для розміщених книг Live Prices автоматично надає підтримувані пари. Статичні директиви нижче показують дані, які використовує оцінка, і залишаються корисними для відтворюваних локальних прикладів.
; Daily price updates
2024-01-15 price BTC 45000.00 USD
2024-01-15 price ETH 2500.00 USD
2024-01-15 price ADA 0.50 USD
2024-01-16 price BTC 46000.00 USD
2024-01-16 price ETH 2550.00 USD
2024-01-16 price ADA 0.52 USDВідстеження розподілу портфеля
Використовуйте функції звітності Beancount.io для аналізу розподілу:
-- Query for portfolio allocation by asset
SELECT
account,
sum(position) as balance,
value(sum(position)) as market_value
WHERE account ~ "Assets:Crypto"
GROUP BY 1
ORDER BY market_value DESCМетрики ефективності
Відстежуйте ключові показники продуктивності:
-- Total portfolio value query
SELECT
sum(value(position)) as total_portfolio_value
WHERE account ~ "Assets:Crypto"
-- Realized gains/losses
SELECT
sum(position) as realized_gains
WHERE account ~ "Income:CapitalGains:Crypto"Стейкінг та інтеграція DeFi
Відстеження винагород за стейкінг
Записуйте винагороди за стейкінг з належним визнанням доходу. Одиниці, що надходять, і визнаний дохід — це та сама подія, побачена з двох сторін, тож їхні ваги мають взаємно знищитися: [одиниці] × [ціна] активу надходить, стільки ж доларів доходу виходить — а дохід є кредитом, тож він від'ємний.
2024-01-31 * "ETH Staking Rewards - January"
Assets:Staking:Ethereum:ETH 0.08 ETH {2500.00 USD}
Income:Crypto:Staking:ETH -200.00 USD ; 0.08 * 2,500.00
2024-01-31 * "ADA Staking Rewards - January"
Assets:Staking:Cardano:ADA 25 ADA {0.50 USD}
Income:Crypto:Staking:ADA -12.50 USD ; 25 * 0.50{2,500.00 USD} і {0.50 USD} — це зовнішні оцінки. Beancount зберігає те, що ви напишете; він не отримує ціну й не вирішує, яка котировка правильна. Виберіть джерело — біржу, на якій ви справді продавали б, або опублікований індекс — і використовуйте його послідовно, бо це число і вашим доходом, і вашою майбутньою базою витрат.
Основу винагороди визнають один раз
$200.00, визнані вище, стають базою витрат 0.08 ETH. Продаж його пізніше реалізує лише зміну від дати винагороди:
2024-06-30 * "Sell the January ETH staking reward"
Assets:Staking:Ethereum:ETH -0.08 ETH {2500.00 USD} @ 3000.00 USD
Assets:Crypto:Coinbase:USD 240.00 USD ; gross proceeds, 0.08 * 3,000.00
Income:CapitalGains:Crypto -40.00 USD ; 240.00 proceeds - 200.00 basis$40.00 приросту капіталу, а не $240.00 — перші $200.00 вже були доходом у січні. Зарахування всіх $240.00 як прибутку — найпоширеніший спосіб, у який дохід від винагород зараховується двічі. Коли винагорода стає оподатковуваною і за якою ставкою, залежить від юрисдикції; леджер записує отримання й вибуття окремо, тож будь-який підхід можна звітувати з нього.
Відстеження доходу DeFi
Відстежуйте складні позиції DeFi:
Надання ліквідності обмінює два товари на третій, тож кожна сторона має зважуватися в тій самій валюті, перш ніж транзакція зможе збалансуватися. Сторони ETH і LP вже це роблять, бо вони несуть витрату; стороні стейблкойна потрібен явний @ 1.00 USD, інакше Beancount бачить 25,000 одиниць USDC, що виходять, і $25,000.00 вартості, що надходить, а це різні товари, і вони не взаємно знищуються.
2024-02-01 * "Uniswap LP Position"
Assets:Crypto:Wallet:MetaMask:ETH -10 ETH {2500.00 USD}
Assets:Crypto:Wallet:MetaMask:USDC -25000 USDC @ 1.00 USD
Assets:DeFi:Uniswap:ETH-USDC-LP 100 UNI-V2-ETH-USDC {500.00 USD}
2024-02-28 * "Uniswap LP Rewards - February"
Assets:Crypto:Wallet:MetaMask:UNI 50 UNI {8.00 USD}
Income:Crypto:DeFi:Yield -400.00 USD ; 50 * 8.00Автоматичне управління портфелем
Імпорт даних біржі
Beancount не постачається з клієнтом API бірж, і немає файлу конфігурації, який змусив би його спілкуватися з Coinbase чи Binance. Підтримуваний шлях — це імпортер: ви завантажуєте CSV-експорт біржі (або отримуєте його власним скриптом) і перетворюєте його в транзакції Beancount за допомогою beangulp, фреймворку імпортерів, що прийшов на зміну вбудованому beancount.ingest з Beancount 2. beancount.ingest не існує в Beancount 3.
Якщо ви таки напишете скрипт отримання, його файл облікових даних належить лише вам — ніщо в набір інструментів Beancount його не читає:
# Configuration for YOUR OWN fetch script. No Beancount tool reads this file.
exchanges:
coinbase:
api_key: "your_api_key"
api_secret: "your_api_secret"
passphrase: "your_passphrase"
binance:
api_key: "your_api_key"
api_secret: "your_api_secret"Автоматизоване звіряння
Налаштуйте автоматичну перевірку балансу:
; Balance assertions for automated verification
2024-01-31 balance Assets:Crypto:Coinbase:BTC 2.5 BTC
2024-01-31 balance Assets:Crypto:Binance:ETH 15.0 ETH
2024-01-31 balance Assets:Crypto:Kraken:ADA 1000.0 ADAЦі три числа походять з ваших екранів біржі, а не з цієї сторінки, тож блок вище не звіриться ні з чим, доки ваші власні транзакції не будуть у леджері. Два правила вирішують, чи звіриться він узагалі. Директива balance стверджує баланс на початок вказаного дня, тож твердження, датоване 2024-01-31, не бачить нічого, проведеного 2024-01-31 — датуйте його днем після періоду, який закриваєте. І кожен рахунок, щодо якого є твердження, має бути відкритим, саме тому Assets:Crypto:Kraken:ADA з'являється в розділі Базова ієрархія рахунків вище.
Керовані ціни в розміщеному леджері
Використовуйте Live Prices, щоб вибрати валюту оцінки та підтримувані криптоактиви, а потім вставте згенеровані включення у свій розміщений леджер. Символи активів мають відповідати вашим активам. Джерела надають датовані ціни оцінки; вони не встановлюють суму доходу чи вартість придбання винагород за стейкінг і аірдропів.
Ваша власна ціна має пріоритет для тієї самої дати й пари, включно з оберненою парою. Кешована котировка може бути застарілою під час збою, тож перевіряйте час її спостереження. Робочий процес локального отримання нижче залишається корисним для upstream Beancount і Fava.
Підтримка актуальності цін
Ціни живуть у леджері як директиви price. Upstream Beancount 3.2.3 не отримує їх сам; розміщені керовані включення використовують розширення завантажувача Beancount.io, описане вище. Немає директиви custom "price-source" — голий символ товару навіть не є допустимим значенням custom, тож цей рядок синтаксичною помилкою — і немає модуля beancount.plugins.forecast; завантажувач зупиняється з помилкою імпорту, якщо ви його назвете.
Увімкніть beanprice усередині керованого рушія за допомогою bea engine enable beanprice, а потім отримайте котировки командою bea price main.beancount. Він читає поле метаданих price: у кожній директиві commodity, у формі "<валюта котировки>:<модуль джерела>/<тікер>", і записує директиви price, які ви додаєте до свого леджера:
1970-01-01 commodity BTC
name: "Bitcoin"
asset-class: "cryptocurrency"
price: "USD:beanprice.sources.coinbase/BTC-USD"
1970-01-01 commodity ETH
name: "Ethereum"
asset-class: "cryptocurrency"
price: "USD:beanprice.sources.coinbase/ETH-USD"
; Example quotes to append after reviewing the output of bea price - and what you would otherwise type by hand
2024-01-15 price BTC 45000.00 USD
2024-01-15 price ETH 2500.00 USDБудь-які інші метадані, які ви прикріпите до товару — sector, website або поле price-source, використане раніше в цьому посібнику — це довільна документація для вашої власної користі. Завантажувач зберігає х, і жоден інструмент на них не реагує.
Стратегії оптимізації оподаткування
Стягнення податкових збитків
Упроваджуйте систематичне стягування податкових збитків:
; The lot being harvested, so this block stands on its own
2024-03-01 * "Buy ADA on Binance"
Assets:Crypto:Binance:ADA 1000 ADA {0.60 USD}
Assets:Crypto:Binance:USD -600.00 USD
; Identify positions with unrealized losses
2024-12-15 * "Tax loss harvesting - Sell ADA at loss"
Assets:Crypto:Binance:ADA -1000 ADA {0.60 USD} @ 0.45 USD
Assets:Crypto:Binance:USD 450.00 USD ; gross proceeds
Expenses:Crypto:Fees:Trading 5.00 USD
Assets:Crypto:Binance:USD -5.00 USD
Expenses:CapitalLoss:Crypto 150.00 USD ; 600.00 basis - 450.00 proceeds
; Repurchase after wash sale period (31 days)
2025-01-16 * "Repurchase ADA after wash sale period"
Assets:Crypto:Binance:ADA 1000 ADA {0.45 USD}
Assets:Crypto:Binance:USD -450.00 USD
Expenses:Crypto:Fees:Trading 5.00 USD
Assets:Crypto:Binance:USD -5.00 USDДовгострокові проти короткострокових прибутків
Відстежуйте періоди утримання для оптимізації податків:
; Use metadata to track purchase dates
2024-01-01 * "BTC Purchase - Long-term hold" ^long-term-btc
Assets:Crypto:Coinbase:BTC 1.0 BTC {40000.00 USD}
Assets:Crypto:Coinbase:USD -40000.00 USD
; Sell after one year for long-term capital gains treatment
2025-01-02 * "BTC Sale - Long-term capital gains" ^long-term-btc
Assets:Crypto:Coinbase:BTC -1.0 BTC {40000.00 USD} @ 55000.00 USD
Assets:Crypto:Coinbase:USD 55000.00 USD
Income:CapitalGains:LongTerm -15000.00 USD ; 55,000.00 proceeds - 40,000.00 basisПосилання ^long-term-btc в обох записах — це те, що дозволяє вам пізніше підняти покупку й продаж разом; Beancount сам не відстежує періоди утримання.
Звітування та аналітика
Звіти по портфелю
Обчисліть частку кожної криптовалюти в портфелі в одній валюті оцінки. Цей приклад використовує ціни в USD, доступні на 31 березня 2024 року, та активи до 1 квітня. Змініть обидві дати разом для іншої звітної дати. Виконайте наведений нижче оператор SELECT у вашому локальному інструменті запитів BQL.
-- Portfolio allocation by cryptocurrency
SELECT
currency,
units(sum(position)) AS total_units,
convert(sum(position), 'USD', 2024-03-31) AS allocation_value
FROM close ON 2024-04-01
WHERE account ~ '^Assets:Crypto:'
GROUP BY currency
ORDER BY currency;Перевірте, що кожне ненульове allocation_value у USD, перш ніж обчислювати відсотки. Конвертація використовує записані ціни, доступні на дату оцінки або раніше. Відсутня конвертація може залишити суму в її початковій валюті. Якщо залишається будь-яка сума в BTC, ETH чи іншій не-USD валюті, оцінка неповна. Додайте відсутні датовані ціни й повторіть; не вважайте активи без ціни нулем і не додавайте одиниці неспоріднених валют.
Додайте суми в USD, щоб отримати підсумок портфеля. Потім обчисліть розподіл кожного активу як вартість активу в USD / загальна вартість у USD * 100. Зберігайте повну точність до моменту відображення відсотка. Наприклад, активи 1 BTC і 3 ETH, оцінені в 200 USD за BTC і 20 USD за ETH, дають:
| Актив | Вартість у USD | Розрахунок частки | Відображена частка |
|---|---|---|---|
| BTC | 200 | 200 / 260 * 100 | 76.92% |
| ETH | 60 | 60 / 260 * 100 | 23.08% |
| Разом | 260 | 260 / 260 * 100 | 100.00% |
Округлення окремих часток до двох знаків після коми може призвести до того, що їхня відображувана сума трохи відрізнятиметься від 100%. Інвентар із нульовою вартістю може відображатися як порожній. Для порожнього портфеля або нульового підсумку в USD вказуйте розподіли як недоступні й не діліть на нуль. Цей приклад описує додатні активи; від'ємні баланси вимагають інтерпретації знакових експозицій, а не звичайних часток портфеля.
Аналітика продуктивності
Звітуйте про вартість портфеля на кінець кожного місяця, використовуючи всі активи до наступного місяця. Встановіть дату оцінки на кінець місяця, щоб пізніші ціни не могли змінити знімок. Ці приклади звітують у USD. Виконуйте кожен SELECT окремо у вашому локальному інструменті запитів BQL.
Для 31 січня:
SELECT convert(sum(position), 'USD', 2024-01-31) AS portfolio_value
FROM close ON 2024-02-01
WHERE account ~ '^Assets:Crypto:';Для 29 лютого:
SELECT convert(sum(position), 'USD', 2024-02-29) AS portfolio_value
FROM close ON 2024-03-01
WHERE account ~ '^Assets:Crypto:';Для 31 березня:
SELECT convert(sum(position), 'USD', 2024-03-31) AS portfolio_value
FROM close ON 2024-04-01
WHERE account ~ '^Assets:Crypto:';FROM close ON виключає проведення, датовані на його межу або пізніше. Дата всередині convert вибирає ціни, доступні на звітну дату або раніше. Для іншого місяця змініть обидві дати разом. Запитуйте кожен місяць, який хочете відзвітувати, включно з місяцями без транзакцій. Перевірте на наявність неконвертованих валют, як описано вище, перш ніж вважати результат підсумком у USD.
Наприклад, припустімо, що січень закінчується 2 BTC за ціною 100 USD кожен і 3 ETH за 10 USD кожен. Продаж 1 BTC у лютому залишає 1 BTC і 3 ETH. Якщо в березні немає угод, але записані ціни зростають до 200 USD за BTC і 20 USD за ETH, знімки такі:
| Кінець місяця | Вартість криптоактивів на кінець місяця |
|---|---|
| 31 січня | 2 * 100 + 3 * 10 = 230 USD |
| 29 лютого | 1 * 100 + 3 * 10 = 130 USD |
| 31 березня | 1 * 200 + 3 * 20 = 260 USD |
Значення за лютий припускає відсутність нових директив цін того місяця. Ціна @ продажу записує його виручку; вона не створює директиви ринкової ціни. Ці запити охоплюють лише рахунки Assets:Crypto:, тому грошова виручка, що зберігається в іншому місці, виключається.
Групування проведень за місяцем транзакції вимірює рухи кожного місяця, а не сукупні закриті активи. Воно також пропускає місяці без транзакцій. Зміни між значеннями закриття включають покупки, продажі, перекази та зміни цін. Вони не є інвестиційною дохідністю, скоригованою на грошові потоки.
Аналіз доходів
Аналізуйте джерела доходу:
-- Income breakdown by source
SELECT
account,
sum(position) as total_income
WHERE account ~ "Income:Crypto"
GROUP BY account
ORDER BY total_income DESC;Кращі практики та поради
1. Послідовне записування
- Записуйте транзакції одразу після виконання
- Використовуйте стандартизовані описи транзакцій
- Включайте хеші транзакцій у метадані
2. Регулярне звірення
- Перевіряйте баланси щотижня на всіх платформах
- Використовуйте твердження про баланс, щоб виявляти розбіжності
- Слідкуйте за пропущеними транзакціями
3. Резервне копіювання та безпека
- Регулярно робіть резервні копії ваших файлів Beancount
- Використовуйте контроль версій (Git) для відстеження змін
- Шифруйте чутливі дані
4. Документування
- Документуйте ваші рішення щодо структури рахунків
- Ведуть нотатки про складні транзакції
- Зберігайте записи про конфігурації API
5. Підготовка до податків
- Генеруйте звіти щоквартально для податкового планування
- Зберігайте детальні записи для цілей аудиту
- Консультуйтеся з податковими фахівцями щодо складних ситуацій
Висновок
Ефективне відстеження криптовалютного портфеля вимагає точності, послідовності та правильних інструментів. Beancount.io забезпечує гнучкість і потужність, потрібні для управління складними криптопортфелями через кілька бірж, гаманців і DeFi-протоколів.
Ключові переваги використання Beancount.io для відстеження криптопортфеля:
- Повне володіння даними: ваші дані у форматі простого тексту
- Точна база витрат: відстеження на основі лотів з конкретною ідентифікацією
- Необмежена гнучкість: власні структури рахунків і звітність
- Оптимізація податків: передові стратегії для мінімізації податкових зобов'язань
- Стійкість до майбутнього: відкритий формат забезпечує довгострокову доступність
Почніть з базового налаштування й поступово розширюйте відстеження в міру зростання складності вашого портфеля. Інвестиція в належне налаштування окупиться точною звітністю, оптимізацією податків та інсайтами щодо портфеля.
Готові взяти під контроль свій криптовалютний портфель? Почніть роботу з Beancount.io вже сьогодні.