Esta guía ofrece plantillas prácticas de Beancount y ejemplos reales para escenarios comunes con criptomonedas. Copia y adapta estas plantillas para tus propias necesidades de contabilidad de criptomonedas.
Cómo leer estos bloques
Cada bloque delimitado a continuación es una de tres cosas, y no son intercambiables:
- Las plantillas contienen marcadores
[ENTRE_CORCHETES]y fechasYYYY-MM-DD. No se cargarán hasta que sustituyas valores reales — los corchetes no son sintaxis de Beancount. - Los ejemplos aparecen directamente debajo de su plantilla, llevan fechas e importes reales y están escritos para cargarse. Cada uno sigue necesitando que las cuentas que toca estén abiertas, que es para lo que sirve la Plantilla de estructura de cuentas de abajo. La única excepción es el bloque de conciliación, que declara saldos que solo tu propio libro mayor puede satisfacer.
- El bloque de Arbitraje con préstamo flash es pseudocódigo, y está etiquetado como tal donde aparece.
Dos convenciones recorren todos ellos:
- Las cuentas de ingresos contienen créditos, por lo que son negativas. Una ganancia realizada es un apunte negativo a
Income:CapitalGains:…; una pérdida realizada es un apunte positivo aExpenses:CapitalLoss:…. Invertir esto es la forma más común de que un asiento cripto no cuadre. - Una comisión se registra una vez como gasto y otra como reducción del efectivo. El importe bruto de la venta va a la cuenta de efectivo, la comisión sale de ella, y la diferencia es lo que realmente llega a tu cuenta.
Explora un libro mayor de ejemplo de criptomonedas en vivo:
Plantilla de Configuración Básica
Plantilla de Estructura de Cuentas
; =============================================================================
; CRYPTOCURRENCY ACCOUNT SETUP TEMPLATE
; =============================================================================
; Bank Accounts
1970-01-01 open Assets:Checking
; Exchange Accounts
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: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:Binance:ADA
; On-Chain and Mining Accounts
1970-01-01 open Assets:Crypto:Ethereum:ETH
1970-01-01 open Assets:Crypto:Polygon:ETH
1970-01-01 open Assets:Crypto:Mining:BTC
; Wallet Accounts
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
; 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
; Income Accounts
1970-01-01 open Income:Crypto:Staking:ETH
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:CapitalGains:Crypto
1970-01-01 open Income:CapitalGains:LongTerm
; Expense Accounts
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:Crypto:Bridge:Fees
1970-01-01 open Expenses:Crypto:Mining:Electricity
1970-01-01 open Expenses:CapitalLoss:Crypto
; Commodity Definitions
1970-01-01 commodity BTC
name: "Bitcoin"
asset-class: "cryptocurrency"
1970-01-01 commodity ETH
name: "Ethereum"
asset-class: "cryptocurrency"
1970-01-01 commodity USDC
name: "USD Coin"
asset-class: "stablecoin"
; Compound writes this receipt token "cUSDC", but a Beancount commodity
; and every account component must start with a capital letter or a digit,
; so the ledger spells it CUSDC and keeps the display name in metadata.
1970-01-01 commodity CUSDC
name: "cUSDC (Compound USD Coin)"
asset-class: "defi-receipt"Plantillas de Trading
Compra Básica de Criptomoneda
; Template: Buy cryptocurrency on exchange
YYYY-MM-DD * "Buy [AMOUNT] [CRYPTO] on [EXCHANGE]"
Assets:Crypto:[EXCHANGE]:[CRYPTO] [AMOUNT] [CRYPTO] {[PRICE] USD}
Assets:Crypto:[EXCHANGE]:USD -[TOTAL_COST] USD
Expenses:Crypto:Fees:Trading [FEE] USD
Assets:Crypto:[EXCHANGE]:USD -[FEE] USD
; Example: Buy 1 BTC on Coinbase
2024-01-15 * "Buy 1 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 USDVenta de Criptomoneda
; Template: Sell cryptocurrency on exchange
YYYY-MM-DD * "Sell [AMOUNT] [CRYPTO] on [EXCHANGE]"
Assets:Crypto:[EXCHANGE]:[CRYPTO] -[AMOUNT] [CRYPTO] {[COST_BASIS] USD} @ [SALE_PRICE] USD
Assets:Crypto:[EXCHANGE]:USD [GROSS_PROCEEDS] USD
Expenses:Crypto:Fees:Trading [FEE] USD
Assets:Crypto:[EXCHANGE]:USD -[FEE] USD
Income:CapitalGains:Crypto -[GAIN] USD ; a loss is a positive Expenses:CapitalLoss:Crypto instead
; Example: Sell 0.5 BTC with a gain
2024-03-20 * "Sell 0.5 BTC on Coinbase"
Assets:Crypto:Coinbase:BTC -0.5 BTC {45000.00 USD} @ 48000.00 USD
Assets:Crypto:Coinbase:USD 24000.00 USD ; gross proceeds, 0.5 * 48,000.00
Expenses:Crypto:Fees:Trading 30.00 USD
Assets:Crypto:Coinbase:USD -30.00 USD ; the fee leaves the same cash account
Income:CapitalGains:Crypto -1500.00 USD ; 24,000.00 proceeds - 22,500.00 basisEl lote dispuesto vale 22.500,00 $ a coste, la venta genera 24.000,00 $ brutos, y 30,00 $ de eso van al exchange — así que llegan 23.970,00 $ de efectivo y se realiza una ganancia de 1.500,00 $. No compenses la comisión con la ganancia: la comisión ya es un gasto, y restarla una segunda vez es lo que deja la transacción descuadrada.
Intercambio Cripto a Cripto
; Template: Trade one crypto for another
YYYY-MM-DD * "Trade [AMOUNT1] [CRYPTO1] for [AMOUNT2] [CRYPTO2]"
Assets:Crypto:[EXCHANGE]:[CRYPTO1] -[AMOUNT1] [CRYPTO1] {[COST_BASIS] USD}
Assets:Crypto:[EXCHANGE]:[CRYPTO2] [AMOUNT2] [CRYPTO2] {[NEW_PRICE] USD}
Income:CapitalGains:Crypto -[GAIN] USD ; taxable event; a loss is a positive Expenses:CapitalLoss:Crypto
Expenses:Crypto:Fees:Trading [FEE] USD
Assets:Crypto:[EXCHANGE]:USD -[FEE] USD
; Example: Trade BTC for ETH
2024-02-10 * "Trade 1 BTC for 20 ETH on Binance"
Assets:Crypto:Binance:BTC -1.0 BTC {46000.00 USD}
Assets:Crypto:Binance:ETH 20 ETH {2400.00 USD}
Income:CapitalGains:Crypto -2000.00 USD ; 48,000.00 received - 46,000.00 basis
Expenses:Crypto:Fees:Trading 40.00 USD
Assets:Crypto:Binance:USD -40.00 USDUn intercambio cripto a cripto dispone del primer activo, por lo que realiza ganancia exactamente igual que una venta por efectivo: 20 ETH adquiridos a 2.400,00 $ son 48.000,00 $ de valor recibido frente a 46.000,00 $ de base del BTC. La comisión de 40,00 $ se paga en efectivo y no cambia la ganancia.
Plantillas de Transferencia
Transferencia de Exchange a Wallet
; Template: Transfer crypto from exchange to wallet
YYYY-MM-DD * "Transfer [AMOUNT] [CRYPTO] from [EXCHANGE] to [WALLET]"
Assets:Crypto:[EXCHANGE]:[CRYPTO] -[AMOUNT] [CRYPTO] {[COST_BASIS] USD}
Assets:Crypto:Wallet:[WALLET]:[CRYPTO] [AMOUNT] [CRYPTO] {[COST_BASIS] USD}
Expenses:Crypto:Fees:Withdrawal [FEE] [CRYPTO] {[COST_BASIS] USD}
Assets:Crypto:[EXCHANGE]:[CRYPTO] -[FEE] [CRYPTO] {[COST_BASIS] USD}
; Example: Transfer BTC to Ledger
2024-01-20 * "Transfer 1 BTC from Coinbase to Ledger"
Assets:Crypto:Coinbase:BTC -1.0 BTC {45000.00 USD}
Assets:Crypto:Wallet:Ledger:BTC 1.0 BTC {45000.00 USD}
Expenses:Crypto:Fees:Withdrawal 0.0005 BTC {45000.00 USD}
Assets:Crypto:Coinbase:BTC -0.0005 BTC {45000.00 USD}Una transferencia no es una disposición, por lo que no realiza nada: el mismo coste {45000.00 USD} viaja con las monedas y la cuenta receptora hereda la base. Se derivan dos consecuencias. La comisión de retirada se paga en BTC y se registra como gasto a ese mismo coste, por lo que tampoco realiza ganancia — si tu tratamiento dice lo contrario, valora la comisión con @ y añade un apunte de ganancia. Y la cuenta emisora ya debe tener 1,0005 BTC a ese coste exacto, no 1,0, porque la comisión sale del mismo lote. Una reducción sin un lote correspondiente no se registra por muy bien que cuadren los totales.
Transferencia entre Exchanges
; Template: Transfer between exchanges
YYYY-MM-DD * "Transfer [AMOUNT] [CRYPTO] from [EXCHANGE1] to [EXCHANGE2]"
Assets:Crypto:[EXCHANGE1]:[CRYPTO] -[AMOUNT] [CRYPTO] {[COST_BASIS] USD}
Assets:Crypto:[EXCHANGE2]:[CRYPTO] [AMOUNT] [CRYPTO] {[COST_BASIS] USD}
Expenses:Crypto:Fees:Network [FEE] [CRYPTO] {[COST_BASIS] USD}
Assets:Crypto:[EXCHANGE1]:[CRYPTO] -[FEE] [CRYPTO] {[COST_BASIS] USD}
; Example: Transfer ETH from Coinbase to Binance
2024-02-05 * "Transfer 10 ETH from Coinbase to Binance"
Assets:Crypto:Coinbase:ETH -10 ETH {2500.00 USD}
Assets:Crypto:Binance:ETH 10 ETH {2500.00 USD}
Expenses:Crypto:Fees:Network 0.01 ETH {2500.00 USD}
Assets:Crypto:Coinbase:ETH -0.01 ETH {2500.00 USD}Plantillas de Staking
Staking de Ethereum
; Template: Stake ETH
YYYY-MM-DD * "Stake [AMOUNT] ETH"
Assets:Crypto:Wallet:MetaMask:ETH -[AMOUNT] ETH {[PRICE] USD}
Assets:Staking:Ethereum:ETH [AMOUNT] ETH {[PRICE] USD}
Expenses:Crypto:Fees:Network [FEE] ETH {[PRICE] USD}
Assets:Crypto:Wallet:MetaMask:ETH -[FEE] ETH {[PRICE] USD}
; Example: Stake 32 ETH
2024-01-10 * "Stake 32 ETH on Ethereum 2.0"
Assets:Crypto:Wallet:MetaMask:ETH -32 ETH {2500.00 USD}
Assets:Staking:Ethereum:ETH 32 ETH {2500.00 USD}
Expenses:Crypto:Fees:Network 0.01 ETH {2500.00 USD}
Assets:Crypto:Wallet:MetaMask:ETH -0.01 ETH {2500.00 USD}Recompensas de Staking
; Template: Receive staking rewards
YYYY-MM-DD * "[CRYPTO] Staking Rewards - [PERIOD]"
Assets:Staking:[PROTOCOL]:[CRYPTO] [AMOUNT] [CRYPTO] {[PRICE] USD}
Income:Crypto:Staking:[CRYPTO] -[VALUE] USD ; [VALUE] = [AMOUNT] * [PRICE]
; Example: ETH staking rewards
2024-02-01 * "ETH Staking Rewards - January"
Assets:Staking:Ethereum:ETH 0.08 ETH {2600.00 USD}
Income:Crypto:Staking:ETH -208.00 USD ; 0.08 * 2,600.00Una recompensa es un ingreso recibido en especie, por lo que los dos apuntes describen el mismo evento desde ambos lados: llegan 0,08 ETH con una base de 2.600,00 $ por unidad, y los 208,00 $ de ingreso correspondientes son un crédito — negativo. El {2,600.00 USD} es un precio externo que debes obtener tú mismo; Beancount lo registra, no lo busca. Tómalo del exchange o índice que realmente uses, y mantén la misma fuente durante todo el año.
Esos 208,00 $ son también la base de coste de la recompensa a partir de aquí. Cuando finalmente vendas los 0,08 ETH, solo el movimiento desde esta fecha es una ganancia — los 208,00 $ ya se han gravado como ingreso y no deben reconocerse dos veces. Si el ingreso tributa al recibirlo o al disponer de él difiere según la jurisdicción; el libro mayor registra los hechos en cualquier caso.
Plantillas DeFi
Provisión de Liquidez en Uniswap
; Template: Add liquidity to Uniswap pool
YYYY-MM-DD * "Add liquidity to [TOKEN1]-[TOKEN2] pool"
Assets:Crypto:Wallet:MetaMask:[TOKEN1] -[AMOUNT1] [TOKEN1] {[PRICE1] USD}
Assets:Crypto:Wallet:MetaMask:[TOKEN2] -[AMOUNT2] [TOKEN2] {[PRICE2] USD}
Assets:DeFi:Uniswap:[TOKEN1]-[TOKEN2]-LP [LP_AMOUNT] [LP_TOKEN] {[LP_PRICE] USD}
Expenses:Crypto:Fees:Network [FEE] ETH {[ETH_PRICE] USD}
Assets:Crypto:Wallet:MetaMask:ETH -[FEE] ETH {[ETH_PRICE] USD}
; Example: Add ETH-USDC liquidity
2024-01-15 * "Add liquidity to ETH-USDC pool"
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-V3-ETH-USDC {500.00 USD}
Expenses:Crypto:Fees:Network 0.02 ETH {2500.00 USD}
Assets:Crypto:Wallet:MetaMask:ETH -0.02 ETH {2500.00 USD}Concilia esto activo por activo: salen 25.000,00 $ de ETH más 25.000,00 $ de USDC, llegan 50.000,00 $ de token LP, y la comisión de gas mueve 50,00 $ de ETH desde el monedero a un gasto. La parte de stablecoin lleva @ 1.00 USD porque se mantiene sin base de coste — sin la anotación de precio su peso es 25.000 USDC, que no puede cancelar dólares. En muchas jurisdicciones depositar en un pool es en sí mismo una disposición de ambos tokens; este asiento deliberadamente traslada la base, así que añade los apuntes de ganancia si tu tratamiento los requiere.
Préstamo en Compound
; Template: Supply assets to Compound
YYYY-MM-DD * "Supply [AMOUNT] [TOKEN] to Compound"
Assets:Crypto:Wallet:MetaMask:[TOKEN] -[AMOUNT] [TOKEN] @ [TOKEN_PRICE] USD
Assets:DeFi:Compound:C[TOKEN] [C_AMOUNT] C[TOKEN] {[C_PRICE] USD}
Expenses:Crypto:Fees:Network [FEE] ETH {[ETH_PRICE] USD}
Assets:Crypto:Wallet:MetaMask:ETH -[FEE] ETH {[ETH_PRICE] USD}
; Example: Supply USDC to Compound
2024-01-20 * "Supply 10000 USDC to Compound"
Assets:Crypto:Wallet:MetaMask:USDC -10000 USDC @ 1.00 USD
Assets:DeFi:Compound:CUSDC 500 CUSDC {20.00 USD}
Expenses:Crypto:Fees:Network 0.008 ETH {2500.00 USD}
Assets:Crypto:Wallet:MetaMask:ETH -0.008 ETH {2500.00 USD}Dos cosas hacen que este se cargue. La parte de USDC lleva @ 1.00 USD para que ambos lados del swap pesen en la misma moneda — sin ello Beancount ve 10.000,00 $ de CUSDC apareciendo frente a 10.000 unidades de USDC desapareciendo, que son activos distintos y no se cancelan. Y el token de recibo es CUSDC, no cUSDC: una primera letra minúscula es un error del analizador léxico tanto en un componente de cuenta como en un símbolo de activo, independientemente de cómo lo escriba el protocolo en su propia interfaz.
Plantillas de Minería
Recompensas de Minería
; Template: Receive mining rewards
YYYY-MM-DD * "[CRYPTO] Mining Reward - [POOL/SOLO]"
Assets:Crypto:Mining:[CRYPTO] [AMOUNT] [CRYPTO] {[PRICE] USD}
Income:Crypto:Mining:[CRYPTO] -[VALUE] USD ; [VALUE] = [AMOUNT] * [PRICE]
; Example: Bitcoin mining reward
2024-01-15 * "BTC Mining Reward - Slush Pool"
Assets:Crypto:Mining:BTC 0.01 BTC {45000.00 USD}
Income:Crypto:Mining:BTC -450.00 USD ; 0.01 * 45,000.00Gastos de Minería
; Template: Mining operational expenses
YYYY-MM-DD * "Mining [EXPENSE_TYPE] - [PERIOD]"
Expenses:Crypto:Mining:[EXPENSE_TYPE] [AMOUNT] USD
Assets:Checking -[AMOUNT] USD
; Example: Mining electricity costs
2024-01-31 * "Mining Electricity - January"
Expenses:Crypto:Mining:Electricity 800.00 USD
Assets:Checking -800.00 USDPlantillas de Airdrop
Airdrops de Tokens
; Template: Receive token airdrop
YYYY-MM-DD * "[TOKEN] Airdrop from [PROJECT]"
Assets:Crypto:Wallet:[WALLET]:[TOKEN] [AMOUNT] [TOKEN] {[PRICE] USD}
Income:Crypto:Airdrops -[VALUE] USD ; [VALUE] = [AMOUNT] * [PRICE]
; Example: UNI token airdrop
2024-03-01 * "UNI Airdrop from Uniswap"
Assets:Crypto:Wallet:MetaMask:UNI 400 UNI {8.00 USD}
Income:Crypto:Airdrops -3200.00 USD ; 400 * 8.00Como una recompensa de staking, el valor reconocido del airdrop se convierte en su base de coste. Registra el precio que puedas defender — la primera cotización líquida del token, de una fuente que nombres — en lugar de un número redondo.
Plantillas Avanzadas
Arbitraje de Préstamo Flash
Este bloque es pseudocódigo, no una plantilla. Esboza la secuencia de movimientos de valor dentro de un préstamo flash. No se cargará ni siquiera después de sustituir valores, porque las líneas en blanco entre los grupos terminan la transacción — Beancount informa de un error de sintaxis en los apuntes que siguen a una. Registra un préstamo flash real como una única transacción sin líneas en blanco (etiquetando las partes con comentarios ; indentados), eliminando las partes intermedias que netean a cero dentro del mismo bloque.
Pseudocode: flash loan arbitrage
borrow Assets:Crypto:Temp:FlashLoan +[LOAN_AMOUNT] [TOKEN]
Liabilities:DeFi:[PROTOCOL]:Flash -[LOAN_AMOUNT] [TOKEN]
execute Assets:Crypto:Temp:FlashLoan -[LOAN_AMOUNT] [TOKEN]
Assets:Crypto:Temp:Arbitrage +[RETURN_AMOUNT] [TOKEN]
repay Liabilities:DeFi:[PROTOCOL]:Flash +[LOAN_AMOUNT] [TOKEN]
Assets:Crypto:Temp:Arbitrage -[LOAN_PLUS_FEE] [TOKEN]
keep Assets:Crypto:Wallet:[WALLET]:[TOKEN] +[PROFIT] [TOKEN]
Income:Crypto:Arbitrage -[PROFIT_USD] USDTodo lo que tocó el préstamo ha desaparecido al final del bloque, así que lo que el libro mayor realmente necesita registrar es el beneficio y la comisión del protocolo. El ejemplo de arbitraje en la guía de seguimiento de cartera muestra la forma de transacción única.
Puente Entre Cadenas
; Template: Bridge assets across chains
YYYY-MM-DD * "Bridge [AMOUNT] [TOKEN] from [CHAIN1] to [CHAIN2]"
Assets:Crypto:[CHAIN1]:[TOKEN] -[AMOUNT] [TOKEN] {[PRICE] USD}
Assets:Crypto:[CHAIN2]:[TOKEN] [AMOUNT] [TOKEN] {[PRICE] USD}
Expenses:Crypto:Bridge:Fees [FEE] [TOKEN] {[PRICE] USD}
Assets:Crypto:[CHAIN1]:[TOKEN] -[FEE] [TOKEN] {[PRICE] USD}
; Example: Bridge ETH to Polygon
2024-02-05 * "Bridge 5 ETH from Ethereum to Polygon"
Assets:Crypto:Ethereum:ETH -5 ETH {2600.00 USD}
Assets:Crypto:Polygon:ETH 5 ETH {2600.00 USD}
Expenses:Crypto:Bridge:Fees 0.01 ETH {2600.00 USD}
Assets:Crypto:Ethereum:ETH -0.01 ETH {2600.00 USD}Plantillas Optimizadas para Impuestos
Cosecha de Pérdidas Fiscales
; Template: Tax loss harvesting
YYYY-MM-DD * "Tax loss harvesting - Sell [CRYPTO] at loss"
Assets:Crypto:[EXCHANGE]:[CRYPTO] -[AMOUNT] [CRYPTO] {[HIGH_COST_BASIS] USD}
Assets:Crypto:[EXCHANGE]:USD [PROCEEDS] USD
Expenses:Crypto:Fees:Trading [FEE] USD
Assets:Crypto:[EXCHANGE]:USD -[FEE] USD
Expenses:CapitalLoss:Crypto [LOSS] USD
; Example: Harvest ADA loss
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, 1,000 * 0.45
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 proceedsLa pérdida es la imagen especular de una ganancia: salen 600,00 $ de base, llegan 450,00 $ brutos, y la diferencia de 150,00 $ es un apunte positivo a una cuenta de gastos. Lo que realmente llega son 445,00 $ de efectivo, después de la comisión de 5,00 $.
Ganancias de Capital a Largo Plazo
; Template: Long-term capital gains sale
YYYY-MM-DD * "Long-term sale - [CRYPTO] held > 1 year"
date-acquired: "[PURCHASE_DATE]"
holding-period: "[DAYS] days"
Assets:Crypto:[EXCHANGE]:[CRYPTO] -[AMOUNT] [CRYPTO] {[COST_BASIS] USD} @ [SALE_PRICE] USD
Assets:Crypto:[EXCHANGE]:USD [GROSS_PROCEEDS] USD
Expenses:Crypto:Fees:Trading [FEE] USD
Assets:Crypto:[EXCHANGE]:USD -[FEE] USD
Income:CapitalGains:LongTerm -[GAIN] USD
; Example: Long-term BTC sale
2025-02-01 * "Long-term sale - BTC held 382 days"
date-acquired: "2024-01-15"
holding-period: "382 days"
Assets:Crypto:Coinbase:BTC -1.0 BTC {45000.00 USD} @ 55000.00 USD
Assets:Crypto:Coinbase:USD 55000.00 USD
Expenses:Crypto:Fees:Trading 50.00 USD
Assets:Crypto:Coinbase:USD -50.00 USD
Income:CapitalGains:LongTerm -10000.00 USD ; 55,000.00 proceeds - 45,000.00 basisLa ganancia es de 10.000,00 $, no de 9.950,00 $: la comisión de 50,00 $ ya está registrada como gasto, así que compensarla con la ganancia la deduciría dos veces. Income:CapitalGains:LongTerm es una cuenta separada de Income:CapitalGains:Crypto solo para que el periodo de tenencia sea visible en un informe — Beancount no calcula los periodos de tenencia por ti, por lo que vale la pena llevar los metadatos date-acquired y holding-period.
Plantillas de Conciliación
Verificación Mensual de Saldo
; Template: Monthly balance assertions
YYYY-MM-DD balance Assets:Crypto:[EXCHANGE]:[CRYPTO] [EXPECTED_BALANCE] [CRYPTO]
YYYY-MM-DD balance Assets:Crypto:Wallet:[WALLET]:[CRYPTO] [EXPECTED_BALANCE] [CRYPTO]
; Example: January balance 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:Wallet:Ledger:BTC 1.0 BTCA diferencia de los otros ejemplos aquí, este no es autocontenido por diseño: los importes son los que digan las pantallas de tu propio exchange, y la aserción falla hasta que tus transacciones estén en el libro mayor — que es precisamente su propósito. Ten en cuenta que balance comprueba el saldo al inicio del día indicado, así que fecha la aserción el día posterior al periodo que estás cerrando.
Actualizaciones de Precio
; Template: Daily price updates
YYYY-MM-DD price [CRYPTO] [PRICE] USD
; Example: Daily prices
2024-01-15 price BTC 45000.00 USD
2024-01-15 price ETH 2500.00 USD
2024-01-15 price ADA 0.50 USDPara un libro mayor alojado, Precios en vivo puede mantener automáticamente los precios de valoración de criptomonedas compatibles. Mantén los precios estáticos de arriba para ejemplos reproducibles. Los precios gestionados no rellenan un precio de operación, un ingreso de staking ni una base de coste de airdrop; registra esos valores de transacción explícitamente.
Instrucciones de Uso
-
Copia la plantilla relevante para tu tipo de transacción
-
Sustituye todos los marcadores. Una plantilla no es Beancount válido hasta que
YYYY-MM-DDy cada token[ENTRE_CORCHETES]hayan desaparecido — los corchetes no son sintaxis de Beancount, y uno que quede es un error de análisis, no un valor ignorado silenciosamente. La sustitución es mecánica:Marcador Sustituir por Ejemplo YYYY-MM-DDla fecha de la transacción 2024-03-20[AMOUNT]unidades del activo, sin comillas 0.5[CRYPTO]el símbolo del activo, en mayúsculas BTC[EXCHANGE]el componente de cuenta del lugar Coinbase[COST_BASIS]el coste por unidad del lote que retiras 45000.00[SALE_PRICE]el precio por unidad al que vendiste 48000.00[GROSS_PROCEEDS][AMOUNT]×[SALE_PRICE], antes de comisiones24000.00[FEE]la comisión del lugar, en la moneda en que se cobró 30.00[GAIN][GROSS_PROCEEDS]−[AMOUNT]×[COST_BASIS]1500.00Sustituir esa columna en la plantilla de Venta de criptomonedas reproduce el ejemplo resuelto impreso debajo de ella, que es la forma más rápida de comprobar que has leído la plantilla correctamente.
-
Ajusta los nombres de las cuentas para que coincidan con tu estructura de cuentas, y asegúrate de que cada una esté abierta por la Plantilla de estructura de cuentas — una cuenta que nunca se abre es un error de carga, no una advertencia
-
Añade metadatos según sea necesario para el informe fiscal o el seguimiento
-
Verifica los cálculos con
bea --file tu-archivo.bean checkantes de finalizar los asientos. Un asiento que no cuadra, o que reduce un lote que no tienes, falla ahí en lugar de producir silenciosamente un informe erróneo
Mejores Prácticas
- Usa convenciones de nombres coherentes
- Incluye los identificadores de transacción en los metadatos
- Documenta exhaustivamente las transacciones complejas
- Verifica los tipos de cambio y los precios
- Mantén copias de seguridad periódicas de tus archivos
Estas plantillas proporcionan una base sólida para la contabilidad de criptomonedas en Beancount.io. Personalízalas según tus necesidades específicas y tus patrones de trading.