Notice
Please note that the calculation methods and details described on this page may be changed without prior notice. Furthermore, per our terms and conditions, we do not take any responsibility or liability for any damage caused through use of the contents displayed.
Table of contents
- Terminology
- Calculation method
- Calculating cryptocurrency prices
- Fee handling
- Fiat currency exchange rates
- Special transactions
- US tax specific treatment
1. Terminology
1.1. Base Currency / Counter Currency
Base currency and counter currency are defined as follows:
1.2. Supported counter currency
Supported counter currencies are those for which Cryptact provides automatic price information. For transactions which require automatic reference rates (crypto-crypto, etc), Cryptact will reference our data to provide the user with accurate profit & loss information in the user's selected reporting currency. Please see our supported currencies page for more information.
1.3. Invalid transaction
There are several situations where Cryptact will mark a transaction as invalid to ensure the validity of the user's ledger. For example if the user's data reflects a transaction that exceeds his position at the time (oversell) or if our database is lacking a price for the time at which he executed his transaction these entries will be marked as invalid transactions. For more details on how to remedy these transactions, please see here for more details.
2. Calculation method
For each uploaded transaction, we will judge whether the transaction is "Open" (i.e. opens a new position) or "Close" (i.e. closes an existing position) and use this to calculate profit and loss.
2.1. How we determine open vs close
-
Consolidate the transactions included in all the uploaded files into one list of transactions ordered by transaction time (oldest to newest).
-
Per currency, search for a new buy or short-sell transaction and mark it "open".
-
Per currency, every transaction encountered that is in the opposite direction of any "open" transactions is marked as "close". The following is done when the quantity on a "close" transaction exceeds the quantity of the "open" transaction:
-
Cryptocurrency coins/tokens:
If the user attempt to sell more than he owns, "oversell" will be displayed. Please confirm that all transactions have been uploaded correctly. -
Derivatives (e.g. futures, options, swaps etc) on cryptocurrencies:
The transaction will be split into one "close" transaction with a quantity of the existing "open" transaction, and one "open" transaction with the remaining quantity.
-
2.2. Calculating realized profit & loss
Realized profit/loss will vary according to the accounting method as described below.
2.2.1. Cryptact supported accounting methods
Method | Explanation |
---|---|
Average cost (idouheikinhou) | When a transaction is closed, the weighted average price (including fees) of all open transactions is used as the corresponding open price. Average cost is the default method for Yen.
|
Periodic average cost (souheikinhou) | The open price used for a close transaction is the weighted average acquisition cost for the current fiscal period, including the weighted average cost of any carryover positions from the previous fiscal period. |
FIFO | First-In, First-Out. Open transactions are closed in the order in which they occurred (i.e. oldest transaction is closed first). |
LIFO | Last-In, First-Out. Open transactions are closed in the opposite order in which they occurred (i.e. newest transaction is closed first). |
2.2.2. Calculation formulas
Average cost
FIFO, LIFO
For details on how the transaction price is calculated, refer to "Calculating cryptocurrency Prices". For details on how transaction fees are handled, refer to "Fee handling".
"Open Transaction Price" varies depending on the accounting method selected.
2.2.3. Loss carryforward
Losses are not carried forward across fiscal years (i.e. a loss in 2017 will not offset a gain in 2018).
2.3. Transaction collapsing
For transactions with similar parameters that take place in consecutive, rapid succession we will collapse these down into one transaction for the purpose of calculating the user's ledger.
3. Calculating cryptocurrency prices
The calculation method depends on the transaction as noted below.
3.1. For transactions settled in fiat currency (e.g. JPY, USD, EUR)
The transaction price is used for the cryptocurrency price. If the user's accounting currency is different than the transaction settlement currency, a conversion is done as described in "Fiat currency exchange rates" below.
3.2. For transactions settled in cryptocurrencies
When trading other cryptocurrencies denominated in a supported counter currency, the transaction price is converted to the user's reporting currency based on the currency rates calculated by Cryptact.
3.3. How we convert crypto-crypto to the user's reporting currency
Cryptact has a comprehensive database of one (1) minute interval prices for our supported counter currencies. When a user opens/closes a cryptocurrency denominated in another cryptocurrency, we use these prices to automatically calculate the user's ledger in his selected reporting currency. In order to ensure data sanity and validity, we use data from multiple sources.
If we are unable to obtain a price for the user's cryptocurrency for an extended period of time, his transaction will be marked invalid due to a missing price.
3.4. Data unavailability
If a transaction is uploaded with a timestamp greater than the latest data availability date of Cryptact, an error will be displayed. If this happens, please wait for a while and try again.
4. Fee handling
4.1. Transaction fees
Fees paid during open and close transactions are converted to the user's accounting currency and deducted from the calculated realized profit/loss.
4.1.1. Transaction fees in fiat currencies
For fees paid in fiat currencies, the amount used will be the amount specified in the transaction.
If the fee currency is not the user's reporting currency, we will convert the value with a rate obtained from our sources detailed in "Fiat currency exchange rates" below.
4.1.2. Transaction fees in cryptocurrency that is in either the base or counter currency
We will use the same logic dictated in "Calculating cryptocurrency prices" to convert the fee to the user's reporting currency.
4.1.3. Transaction fees in cryptocurrency that is neither the base nor counter currency
If a user pays transaction fees in a cryptocurrency that is neither his base nor counter (eg. paying BNB fees for trading BTCETH), we will take the following steps below:
- We will create a sell transaction for the amount of currency used to pay fees in the original transaction for the fee currency.
- We will use the value of the fees paid in the user's reporting currency to reduce the profit & loss of the original transaction in line with our normal fee calculations.
4.3. Transfer (blockchain) fees
A user can choose whether or not transfer (blockchain) fees will be expensed through the settings page. Please note: for individuals, it is highly unlikely that transfer fees will be accepted as tax write-offs. Please consult with your tax adviser before using this setting.
5. Fiat currency exchange rates
If the counter or fee currency of a transaction is in fiat but different from the user's reporting currency, Cryptact will use rates from FRB (USD), ECB (EUR) and MUFJ (JPY) to calculate the user's ledger.
6. Special transactions
6.1. bitFlyer Lightning Futures (BTC Futures) Maturity
Cryptact will automatically add a transaction called "SETTLE" to close any futures positions that are not closed by the expiration date.
The price used for the "SETTLE" transaction is the bitFlyer BTCJPY price as of 12:05pm JST (per bitFlyer's explanation).
6.2. Mining
For coins obtained through mining, profit equal to the market value of the coin at the time is realized at the time of mining. The cost basis for those coins is also the value at the time of mining. Any fees related to the coins that were mined are excluded from profit at the time of mining.
6.3. Changelly's transaction/network fees
When a user transacts at Changelly, the cost of transferring the coins between exchanges is included in the commissions charged for the trade. Because these fees are directly linked to the transaction, Crypact will include them in the fee calculation done for the transaction.
6.4. Chat bonuses, campaign bonuses, airdrops and lending income
For any coins obtained through bonus campaigns (chat bonuses, login bonuses, etc), any coins obtained through airdrops, and coins gained through lending activities, the value of the coins at the time they were received is realized as profit. This value also becomes the cost basis for the acquired coins.
6.5. Self-transaction fees
At some exchanges, when a user trades with themselves to create an execution (buying their own offer, selling their own bid), the exchange will print an execution showing no position change but will take fees for the transaction. When Cryptact processes one of these trades, the fee associated with the execution is recognized as a loss. If it is in fiat, a "CASH" entry is created with the value paid. If it is in a cryptocurrency, the amount collected by the exchange is considered sold with a zero price.
6.6. Tipping
For all tips given through chats and SNS, Cryptact assumes both parties are individuals (not companies) and treats them as below:
- For the sender of the tip, we reduce their holdings of the cryptocurrency by the amount given.There is no profit or loss associated with the transaction.
- For the receiver, we conservatively assume that the acquisition cost basis was zero. Profit and loss are only realized when the coins are sold.
6.7. Margin and leverage trading
Margin and leverage trading is calculated with separate cost basis using FIFO or LIFO.
6.8. Zaif margin trading / Zaif AirFX collateral treatment
When trading margin on Zaif, there are instances where the exchange will reduce cryptocurrency holdings due to realized losses. Cryptact goes by the assumption that losses incurred for the trade have already been included in the transaction itself; the reduction in inventory is done without any profit or loss.
7. US tax specific treatment
If the user selects USD as their reporting currency, the below options can be selected through the settings menu.
7.1. Wash sale support
If a certain currency position is closed and then reopened within 30 days, the loss cannot be realized. Instead, the loss is included in the cost of the next open transaction. There is no clear guidance on wash sale treatments for cryptocurrency at this time. Please consult with your tax adviser.
7.2. Long and short term capital gains separation
Realized gains/losses will be split between gains/losses made from positions held less than 1 year (short term) and from positions held for more than 1 year (long term).
This is because different tax rates are applicable to short term capital gains vs long term capital gains.