npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@davidosborn/crypto-tax-calculator

v0.0.20

Published

A tool to calculate the capital gains of cryptocurrency assets for Canadian taxes

Downloads

42

Readme

Crypto Tax Calculator

A tool to calculate the capital gains of cryptocurrency assets for Canadian taxes. The source data comes from a set of trade logs, which are provided by the exchanges. The adjusted cost base (ACB) is used to calculate the capital gains.

Introduction

I created this software to calculate the capital gains from my 2017 cryptocurrency trades for tax purposes. For my 2018 taxes, I refined the software with many new options to handle missing logs, stolen assets, and other complex issues.

Please note that I am not an accountant, and I do not warrant the validity of the results.

Exchanges

The following exchanges are supported out-of-the-box:

  • Binance
  • Bittrex
  • Kraken
  • KuCoin

It is easy to add support for additional exchanges. Simply add a parser in trade-parse-stream.js to convert a CSV row to the normalized format. You can look at the existing parsers as examples of how to do this.

Usage

Run the program with npm start or node index. Add the --help option to see the available options.

Typical usage involves running the program with a set of trade logs in the form of CSV files. For example:

node index data/*-2018.csv -odata/results-2018.md --init=\
BTC:0.73396222:12721.04,\
ETH:4.18451232:3478.97,\
LTC:11.09684:3113.88

The resulting Markdown or HTML contains:

  • The assets carried forward from the previous year (if any).
  • A list of trades, ordered by time, including fees and the running ACB.
  • A list of dispositions, ordered by asset and time, including the POD, ACB, OAE, and the running gain (or loss).
  • A summary of the aggregate dispositions per asset.
  • A summary of the aggregate gain (or loss), ACB, and remaining balance per asset.
  • The total taxable capital gains.
  • The assets that can be carried forward to the next year (if any).

Options

There are options for filtering by currency, defining the initial balance, limiting the number of trades, and providing historical data.

| Short option | Long option | Argument | Description | ------------ | ------------- | -------------------------------------------------- | ----------- | -a | --assets | <spec> [1] | Only consider trades involving the specified assets. | -h | --help | | Display this usage information and exit. | -i | --init | <spec> [2] | Define the initial balance and ACB of the assets. | -m | --html | | Format the results as HTML instead of Markdown. | -o | --output | <file> | Write the results to the specified file. | -q | --quiet | | Do not write the results. | -s | --show | <spec> [1] | Only show the specified assets. | -t | --take | <count> | Do not process more than the specified number of trades. | -v | --verbose | | Write extra information to the console. | -w | --web | | Request historical asset values from the internet. | -y | --history | <path> [3] | Read historical asset values from the specified directory.

[1] A subset of the available assets can be considered for the calculation by the --assets option, or used to filter the results by the --show option. The argument in both cases is a comma-separated list of assets.

[2] The balances can be carried forward from last year by the --init option. The argument is a comma-separated list of assets, each with its balance and adjusted cost base, in the form of <asset>:<balance>[:<acb>],..., such as --init=BTC:1:5000,ETH:5:1000,LTC:10:80.

Historical data

[3] Historical data may be provided to the program using the --history option.

Format

The data for each currency pair must be stored in a JSON file named <base>-<quote>.json. Each JSON file must contain an array of historical samples, ordered by time. Each historical sample must contain the following fields:

| Field | Type | Semantics | Description | | -------- | ------ | -------------- | ----------------------------------------------- | | time | Number | UNIX timestamp | The opening time of the trading period. | | open | Number | Currency | The price at the opening of the trading period. | | close | Number | Currency | The price at the closing of the trading period. |

Compatible files can be generated by the @davidosborn/crypto-history-parser npm package.