Pular para o conteúdo principal

Carteira cripto com base de custo no Beancount

Acompanhe um portfólio de criptomoedas no Beancount em várias exchanges, com base de custo, lotes e análise de desempenho em um único livro-razão.

Gerenciar uma carteira de criptomoedas em várias exchanges, carteiras e protocolos DeFi pode ser desafiador. Este guia abrangente mostra como configurar e manter um acompanhamento preciso de carteira de criptomoedas usando o poderoso sistema de contabilidade em texto simples do Beancount.io.

Explore um exemplo ao vivo de razão de criptomoedas:

Abrir Cryptocurrency Example Ledger em uma nova aba

Por que os Rastreadores de Portfólio Tradicionais São Insuficientes​

Problemas Comuns em Ferramentas de Portfólio de Cripto​

  • Suporte limitado a exchanges: Muitas ferramentas não suportam todas as exchanges ou protocolos DeFi
  • Base de custo imprecisa: Cálculos simplificados de FIFO/LIFO deixam de fora cenários complexos
  • Transações ausentes: Limitações de API e lacunas na entrada manual
  • Sem personalização: Categorias e estruturas de relatórios fixas
  • Preocupações com privacidade: Compartilhar chaves de API com serviços de terceiros
  • Aprisionamento a fornecedor: Formatos de dados proprietários e opções limitadas de exportação

Vantagens do Beancount.io​

  • Controle total: Seus dados em formato de texto simples
  • Personalização ilimitada: Crie qualquer estrutura de contas que precisar
  • Base de custo precisa: Rastreamento por lotes com identificação específica
  • Suporte multiprotocolo: Lide com qualquer exchange, carteira ou protocolo DeFi
  • Cálculos transparentes: Veja exatamente como os números são computados
  • À prova de futuro: O formato de texto simples garante acessibilidade a longo prazo

Configurando a Estrutura do Seu Portfólio Cripto​

Hierarquia Básica de Contas​

Comece com uma estrutura de contas abrangente que reflita seu ecossistema de criptomoedas:

; 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

Uma regra de nomenclatura incomoda aqui, e o parser a impõe em vez de ser apenas convenção: cada componente de conta, e cada símbolo de commodity, deve começar com uma letra maiúscula ou um dígito. A Compound escreve seu token de recibo cUSDC em toda a sua própria interface, mas Assets:DeFi:Compound:cUSDC e uma commodity cUSDC são ambos erros de lexer. Escreva-os como CUSDC e mantenha a grafia própria do protocolo nos metadados name: da commodity.

Definições de Commodity com Metadados​

Defina suas criptomoedas com metadados ricos para um melhor rastreamento:

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"

Rastreamento de Portfólio Multi-Exchange​

Registrando Compras Entre Exchanges​

Acompanhe a mesma criptomoeda em diferentes exchanges com base de custo precisa:

; 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

Transferências Entre Exchanges​

Acompanhe transferências entre exchanges mantendo a base de custo:

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}

Oportunidades de Arbitragem​

Uma arbitragem é um único evento econômico em dois locais, então registre-a como uma única transação. Este lançamento vende 10 ETH que você já possui na Coinbase a $2.580,00 e imediatamente restaura a posição na Binance a $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

Três coisas a copiar:

  • Nunca deixe uma linha em branco entre os lançamentos. Uma linha em branco encerra a transação, e o Beancount reporta um erro de sintaxe nos lançamentos seguintes. Use comentários ; indentados para rotular as pernas — que é o que as duas linhas de comentário acima estão fazendo.
  • O ganho é o ganho da alienação, $800,00, e é negativo porque contas de Income mantêm créditos. Os $55,00 de taxas são separados: é o que transforma $800,00 de spread bruto em $745,00 de lucro, e já está registrado em seus próprios dois lançamentos.
  • A perna de venda reduz um lote que você já deve possuir. Este lançamento pressupõe 10 ETH comprados anteriormente na Coinbase a $2.500,00; sem esse lote, a redução não tem contra o que ser lançada.

Gestão Avançada da Base de Custo​

Rastreamento Baseado em Lotes​

O sistema por lotes do Beancount.io fornece rastreamento preciso da base de custo:

; 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

A convenção de sinais para ganhos e perdas​

Contas de Income mantêm créditos, então o Beancount as armazena como números negativos. Cada ganho abaixo é, portanto, um lançamento negativo em uma conta de receita, e cada perda é um lançamento positivo em uma conta de despesa. A taxa é separada de ambos: é uma despesa por direito próprio, então subtraí-la do ganho também a deduziria duas vezes e deixaria a transação desbalanceada.

Para uma alienação, a aritmética é sempre:

gain (or loss) = gross proceeds - cost basis of the lots removed
net cash       = gross proceeds - fees

Método de Identificação Específica​

Venda lotes específicos para gestão fiscal ideal. Nomear o custo do lote no lançamento de redução é o que significa "identificação específica" no Beancount, e funciona sob o booking padrão 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

Vendendo o lote mais antigo ou o mais recente​

Nomear um custo diferente seleciona um lote diferente. Estas duas vendas pegam o lote de $40.000,00 e depois o lote de $45.000,00 — os dois ainda existentes depois que o de $50.000,00 entrou no exemplo acima — que é a mesma seleção que FIFO e LIFO fariam automaticamente, escrita à mão:

; 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

Mesmo preço de venda, lote diferente, $2.500,00 de diferença no ganho realizado. Se você preferir que o Beancount escolha o lote por você, defina um método de booking na conta em vez de nomear um custo — "FIFO", "LIFO" ou "HIFO" na diretiva open, descrita em Gerenciamento de Inventário.

Análise de Desempenho do Portfólio​

Configuração de Acompanhamento de Preços​

Configure feeds de preços automatizados para uma avaliação precisa:

Para livros hospedados, o Live Prices fornece pares suportados automaticamente. As diretivas estáticas abaixo mostram os dados que uma avaliação usa e continuam úteis para exemplos locais reproduzíveis.

; 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

Acompanhamento da Alocação do Portfólio​

Use os recursos de relatórios do Beancount.io para analisar a alocação:

-- 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

Métricas de Desempenho​

Acompanhe indicadores-chave de desempenho:

-- 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"

Integração de Staking e DeFi​

Acompanhamento de Recompensas de Staking​

Registre recompensas de staking com reconhecimento adequado de receita. As unidades que chegam e a receita reconhecida são o mesmo evento visto de dois lados, então seus pesos devem se cancelar: [unidades] × [preço] do ativo entrando, o mesmo número de dólares de receita saindo — e receita é um crédito, então é negativa.

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

Os {2,500.00 USD} e {0.50 USD} são avaliações externas. O Beancount armazena o que você escrever; ele não busca um preço nem decide qual cotação é a correta. Escolha uma fonte — a exchange em que você realmente venderia, ou um índice publicado — e use-a consistentemente, porque esse número é tanto sua receita quanto sua futura base de custo.

A base da recompensa é reconhecida uma vez​

Os $200,00 reconhecidos acima tornam-se a base de custo dos 0,08 ETH. Vendê-los depois realiza apenas a variação desde a data da recompensa:

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 de ganho de capital, não $240,00 — os primeiros $200,00 já foram receita em janeiro. Lançar os $240,00 inteiros como ganho é a forma mais comum de a receita de recompensa ser contada duas vezes. Quando a recompensa se torna tributável, e a que alíquota, varia por jurisdição; o razão registra recebimento e alienação separadamente para que qualquer tratamento possa ser reportado a partir dele.

Acompanhamento de Rendimento DeFi​

Acompanhe posições DeFi complexas:

Fornecer liquidez troca duas commodities por uma terceira, então cada perna tem que pesar na mesma moeda antes que a transação possa balancear. As pernas de ETH e LP já o fazem, porque carregam um custo; a perna da stablecoin precisa de um @ 1.00 USD explícito, caso contrário o Beancount vê 25.000 unidades de USDC saindo e $25.000,00 de valor chegando, que são commodities diferentes e não se cancelam.

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

Gestão Automatizada do Portfólio​

Importação de dados de exchange​

O Beancount não inclui nenhum cliente de API de exchange, e não há arquivo de configuração que o faça conversar com a Coinbase ou a Binance. O caminho suportado é um importer: você baixa a exportação CSV da exchange (ou a busca com seu próprio script) e a converte em transações Beancount com beangulp, o framework de importer que sucedeu o beancount.ingest embutido do Beancount 2. O beancount.ingest não existe no Beancount 3.

Se você realmente escrever um script de busca, seu arquivo de credenciais é só seu — nada na cadeia de ferramentas do Beancount o lê:

# 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"

Reconciliação Automatizada​

Configure verificação automatizada de saldos:

; 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

Esses três números vêm das suas telas de exchange, não desta página, então o bloco acima não verificará contra nada até que suas próprias transações estejam no razão. Duas regras decidem se ele verifica sequer. Uma diretiva balance afirma o saldo no início do dia nomeado, então uma afirmação datada de 2024-01-31 não vê nada lançado em 2024-01-31 — date-a o dia seguinte ao período que você está encerrando. E toda conta afirmada deve estar aberta, que é por que Assets:Crypto:Kraken:ADA aparece na seção Hierarquia básica de contas acima.

Preços gerenciados em um razão hospedado​

Use o Live Prices para escolher uma moeda de avaliação e ativos cripto suportados, depois cole os includes gerados no seu razão hospedado. Os símbolos dos ativos devem corresponder às suas participações. Os feeds fornecem preços de avaliação datados; eles não definem o valor da receita nem o custo de aquisição de recompensas de staking e airdrops.

Seu próprio preço tem precedência para a mesma data e par, incluindo o par recíproco. Uma cotação em cache pode estar desatualizada durante uma interrupção, então verifique seu horário de observação. O fluxo de trabalho de busca local abaixo continua útil para o Beancount upstream e o Fava.

Mantendo preços atualizados​

Os preços ficam no razão como diretivas price. O Beancount 3.2.3 upstream não os busca por conta própria; os includes gerenciados hospedados usam a extensão do loader do Beancount.io descrita acima. Não existe nenhuma diretiva custom "price-source" — um símbolo de commodity puro não é sequer um valor custom válido, então essa linha é um erro de sintaxe — e nenhum módulo beancount.plugins.forecast; o loader para com um erro de importação se você nomeá-lo.

Ative o beanprice dentro do motor gerenciado com bea engine enable beanprice, depois busque cotações com bea price main.beancount. Ele lê um campo de metadados price: em cada diretiva commodity, na forma "<moeda de cotação>:<módulo de origem>/<ticker>", e escreve diretivas price que você anexa ao seu razão:

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

Qualquer outro metadado que você anexe a uma commodity — sector, website, ou o campo price-source usado anteriormente neste guia — é documentação de forma livre para seu próprio benefício. O loader o armazena e nenhuma ferramenta age sobre ele.

Estratégias de Otimização Fiscal​

Colheita sistemática de prejuízos fiscais​

Implemente colheita sistemática de perdas fiscais:

; 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

Ganhos de longo prazo vs curto prazo​

Acompanhe períodos de manutenção para otimização fiscal:

; 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

O link ^long-term-btc em ambos os lançamentos é o que permite puxar a compra e a venda juntas depois; o Beancount não acompanha períodos de manutenção por conta própria.

Relatórios e Análises​

Relatórios resumidos de portfólio​

Calcule a participação de cada criptomoeda no portfólio em uma única moeda de avaliação. Este exemplo usa preços em USD disponíveis em 31 de março de 2024, e posições antes de 1º de abril. Altere ambas as datas juntas para uma data de relatório diferente. Execute a instrução SELECT abaixo na sua ferramenta de consulta BQL local.

-- Alocação do portfólio por criptomoeda
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;

Verifique que todo allocation_value diferente de zero está em USD antes de calcular percentuais. A conversão usa preços registrados disponíveis na data de avaliação ou antes. Uma conversão ausente pode deixar um valor em sua moeda original. Se qualquer quantia em BTC, ETH ou outra que não seja USD permanecer, a avaliação está incompleta. Adicione os preços datados ausentes e execute novamente; não trate ativos sem preço como zero nem adicione unidades de moeda não relacionadas.

Some os valores em USD para obter o total do portfólio. Então calcule a alocação de cada ativo como valor em USD do ativo / valor total em USD * 100. Mantenha a precisão total até exibir o percentual. Por exemplo, posições de 1 BTC e 3 ETH, com preços de 200 USD por BTC e 20 USD por ETH, dão:

AtivoValor em USDCálculo da alocaçãoParticipação exibida
BTC200200 / 260 * 10076,92%
ETH6060 / 260 * 10023,08%
Total260260 / 260 * 100100,00%

Arredondar participações individuais para duas casas decimais pode fazer sua soma exibida diferir ligeiramente de 100%. Um inventário com valor zero pode aparecer em branco. Para um portfólio vazio ou um total em USD zero, reporte as alocações como indisponíveis e não divida por zero. Este exemplo descreve posições positivas de ativos; saldos negativos exigem interpretar exposições com sinal em vez de participações comuns de portfólio.

Análise de desempenho​

Reporte o valor de fechamento do portfólio de cada mês usando todas as posições antes do mês seguinte. Defina a data de avaliação como o fim do mês para que preços posteriores não possam alterar o snapshot. Estes exemplos reportam em USD. Execute cada SELECT separadamente na sua ferramenta de consulta BQL local.

Para 31 de janeiro:

SELECT convert(sum(position), 'USD', 2024-01-31) AS portfolio_value
FROM close ON 2024-02-01
WHERE account ~ '^Assets:Crypto:';

Para 29 de fevereiro:

SELECT convert(sum(position), 'USD', 2024-02-29) AS portfolio_value
FROM close ON 2024-03-01
WHERE account ~ '^Assets:Crypto:';

Para 31 de março:

SELECT convert(sum(position), 'USD', 2024-03-31) AS portfolio_value
FROM close ON 2024-04-01
WHERE account ~ '^Assets:Crypto:';

FROM close ON exclui lançamentos datados no seu corte ou depois dele. A data dentro de convert seleciona preços disponíveis na data de relatório ou antes. Para outro mês, altere ambas as datas juntas. Solicite cada mês que deseja reportar, incluindo meses sem transações. Verifique moedas não convertidas como descrito acima antes de tratar o resultado como um total em USD.

Por exemplo, suponha que janeiro termine com 2 BTC com preço de 100 USD cada e 3 ETH a 10 USD cada. Vender 1 BTC em fevereiro deixa 1 BTC e 3 ETH. Se março não tiver negociações mas os preços registrados subirem para 200 USD por BTC e 20 USD por ETH, os snapshots são:

Fim do mêsValor cripto de fechamento
31 de janeiro2 * 100 + 3 * 10 = 230 USD
29 de fevereiro1 * 100 + 3 * 10 = 130 USD
31 de março1 * 200 + 3 * 20 = 260 USD

O valor de fevereiro assume nenhuma nova diretiva de preço naquele mês. O preço @ de uma venda registra sua receita; ele não cria uma diretiva de preço de mercado. Estas consultas cobrem apenas contas Assets:Crypto:, então receitas em caixa mantidas em outros lugares são excluídas.

Agrupar lançamentos por mês de transação mede os movimentos de cada mês, não as posições cumulativas de fechamento. Também omite meses sem transações. Mudanças entre valores de fechamento incluem compras, vendas, transferências e variações de preço. Não são retornos de investimento ajustados por fluxos de caixa.

Análise de renda​

Analise fontes de receita:

-- Income breakdown by source
SELECT
  account,
  sum(position) as total_income
WHERE account ~ "Income:Crypto"
GROUP BY account
ORDER BY total_income DESC;

Melhores Práticas e Dicas​

1. Registro consistente​

  • Registre transações imediatamente após a execução
  • Use descrições padronizadas de transações
  • Inclua hashes de transação nos metadados

2. Reconciliação regular​

  • Verifique saldos semanalmente em todas as plataformas
  • Use afirmações de saldo para detectar discrepâncias
  • Monitore transações ausentes

3. Backup e Segurança​

  • Faça backup regularmente dos seus arquivos Beancount
  • Use controle de versão (Git) para rastreamento de mudanças
  • Criptografe dados sensíveis

4. Documentação​

  • Documente suas decisões de estrutura de contas
  • Mantenha notas sobre transações complexas
  • Guarde registros de configurações de API

5. Preparação Fiscal​

  • Gere relatórios trimestralmente para planejamento fiscal
  • Mantenha registros detalhados para fins de auditoria
  • Consulte profissionais de tributos para situações complexas

Conclusão​

O acompanhamento eficaz de carteiras de criptomoedas exige precisão, consistência e as ferramentas certas. O Beancount.io oferece a flexibilidade e o poder necessários para gerenciar carteiras cripto complexas em várias exchanges, carteiras e protocolos DeFi.

Principais benefícios de usar o Beancount.io para acompanhamento de carteira cripto:

  • Propriedade completa dos dados: Seus dados em formato de texto simples
  • Base de custo precisa: Rastreamento por lotes com identificação específica
  • Flexibilidade ilimitada: Estruturas de contas e relatórios personalizados
  • Otimização fiscal: Estratégias avançadas para minimizar a carga tributária
  • À prova de futuro: Formato aberto garante acessibilidade a longo prazo

Comece com uma configuração básica e expanda gradualmente seu acompanhamento conforme sua carteira cresce em complexidade. O investimento em uma configuração adequada renderá dividendos em relatórios precisos, otimização fiscal e insights de carteira.

Pronto para assumir o controle da sua carteira de criptomoedas? Comece com o Beancount.io hoje.

Fonte: https://beancount.io/pt/docs/Solutions/cryptocurrency-portfolio-tracking