Calculation Methods


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

  1. Calculation method
    1. How we determine open vs close
    2. Calculating realized profit & loss
    3. Transaction collapsing
  2. Calculating cryptocurrency prices
    1. For transactions settled in fiat currency (e.g. JPY, USD, EUR)
    2. For transactions settled in cryptocurrencies
    3. Data unavailability
  3. Fee handling
    1. Transaction fees
    2. Transfer (blockchain) fees
  4. Fiat currency exchange rates
  5. Calculations for different transaction types
    1.  Calculations for different transaction types
    2.  Self-transaction fees
    3.  Calculations for derivatives
  6. US tax specific treatment
    1. Wash sale support
    2. Long and short term capital gains separation

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.

Important: Transactions between fiat currencies (e.g. USDJPY) are ignored for the calculation of profit and loss.

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


Realized profit/loss will vary according to the accounting method as described below.

What is Realized Gains/Losses?

Cryptact supports the following four methods of calculating average acquisition price.

Calculation formula for each accounting method

Method Formula Explanation
Average cost (idouheikinhou)

{ (Close price)-(moving average cost per coin) } * (Volume)-(Fees for closing)

When a transaction is closed, the weighted average price (including fees) of all open transactions is used as the average acquisition price.
Periodic average cost (souheikinhou)

{ (Close price)-(moving periodic average cost per coin) } * (Volume)-(Fees for closing)

The weighted average price of all open transactions for each fiscal year is used as the average acquisition price.

{ (Close price)-(open price) } * (Volume)-(open fees)-(close fees)

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

* "Open Transaction Price" varies depending on the accounting method selected (Average cost is the default method for Yen).

Difference between average cost (idouheikinhou) and periodic average cost (souheikinhou) (Japanese only)


Additionally, please note that losses are not carried forward across fiscal years (i.e. a loss in 2017 will not offset a gain in 2018).


For transactions with similar parameters that take place in consecutive, rapid succession we will collapse these down into one transaction for calculating the user's ledger.

What is transaction collapsing? (Japanese only)


The calculation method depends on the transaction as noted below.

(Important) If the user's transaction is not in a supported counter currency it will be marked as invalid.


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.


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.

1 ICN is purchased at 1 ICN = 0.01 ETH and sold at 0.02 ETH. User's accounting currency is JPY.

Assuming that the ETHJPY rate calculated by Cryptact at the time of purchase is JPY 20,000 and JPY 25,000 at the time of sale:

  • ICN price at open = 0.01 ETH * 20,000 (JPY/ETH) = JPY 200
  • ICN price at close = 0.02 ETH * 25,000 (JPY/ETH) = JPY 500


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.

An error will be displayed if the latest rate available in Cryptact for ETHJPY is 5:00 and an ETHBTC transaction for 5:01 is uploaded.


  • If the fee currency is the same as the user's reporting currency (*), the fee amount specified in the transaction is used. If the fee currency is not the same as the user's reporting currency, we will convert the fee amount with a rate obtained from our sources detailed in 4. Fiat currency exchange rates.

(*) What is reporting currency? -- This is the currency that will be used to denominate all profit/loss values and price translations in your ledger. You can change it from the Ledger settings screen.

  • Transaction fees in cryptocurrency: We will use the same logic dictated in "2. Calculating cryptocurrency prices" to convert the fee to the user's reporting currency to reduce the PNL when processing a CLOSE transaction. The following steps are taken to correctly reflect the fee into the PNL when processing a CLOSE transaction.
Fee currency Open transaction for the Base (*) Close transaction for the Base (*)

Same as Base



Same as Counter



Neither Base or Counter



(*) What are Open/Close transactions? -- 1.1. How to determine open vs close


  • The reporting currency equivalent of the fee is incorporated into the book price of the Base.
  • A SELL transaction for the fee currency at the market price is auto-generated, and this generates a PNL. (*)


  • The PNL of the transaction is reduced by the reporting currency equivalent of the fee.
  • A SELL transaction for the fee currency at the market price is auto-generated, and this generates a PNL. (*)

If you specify a fee in cryptocurrency for Action="LOSS" or Action="BONUS" with zero cost, the fee amount is also processed as a loss. The overall PNL should be the same.

(*) Auto-generating a BUY/SELL transaction for the cryptocurrency that the fee is denominated in (Japanese only)


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.


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.


For more details on the PNL calculation for each transaction type, please refer here.


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 an expense. If it is in fiat, a "CASH" entry is created with the value paid. If it is in a cryptocurrency, a "LOSS" entry is created with the value paid.


By principle, PNL calculations are done separately for SPOT and derivative transactions. However, the calculation method differs depending on whether the margin is in FIAT or cryptocurrency, as follows.

  • Margin is in FIAT: Average acquisition price and PNL are calculated independently from SPOT transactions. You can choose to use the exchange-calculated PNL as-is or to calculate PNL using FIFO/LIFO. For more details, please refer here.
  • Margin is in cryptocurrency: PNL is calculated only focusing on the increase/decrease in the margin. In this case, the increase/decrease is in CASH securities, hence the PNL calculation for SPOT transactions is used.


If the user selects USD as their reporting currency, the below options can be selected through the settings menu.


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.


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.