The answer
USDT and USDC trade profit uses the same buy-and-sell arithmetic as any other spot asset, but the answer is denominated in the pair’s quote currency. In a USDT/USDC pair, prices are expressed in USDC per USDT, while the net result is expressed in USDC rather than automatically in U.S. dollars. For one full trade with percentage fees charged in the quote currency: net result = quantity × sell price × (1 − sell fee rate) − quantity × buy price × (1 + buy fee rate). For the hypothetical 1,000 USDT trade below, the gross price move adds 1.80 USDC, while the two fees total 1.9998 USDC, so the net result is a loss of 0.1998 USDC. Use the fills and fee units from your order record; the example is not a market quote.
Read the pair before reading the profit
A pair label tells you what one unit of the first asset is priced in. In USDC/USD, a price is USD for each USDC. In BTC/USDT, it is USDT for each BTC. In USDT/USDC, it is USDC for each USDT. The result of a calculation follows that quote unit unless you explicitly convert it afterward.
This distinction matters in two different situations. You might be buying and selling USDC itself against USD, where the stablecoin’s executed prices are the inputs. Or you might be trading another coin against USDT or USDC, where the stablecoin is the unit used to quote the trade. The ticker typed into a calculator cannot determine which of those meanings you intended; the order pair and fill record do.
Before calculating, write the pair as “base asset / quote asset” and attach units to both prices. For example, “buy 0.9995 USDC per USDT” is dimensionally different from “buy 0.9995 USD per USDT.” The digits match, but the quote assets do not.
Reproduce the USDT/USDC result in quote units
Assume a completed scenario of 1,000 USDT bought at 0.999 USDC per USDT and sold at 1.0008 USDC per USDT. For this illustration, both fees are 0.1% of trade value and are charged in USDC. These inputs are chosen only to show the calculation.
Buy value: 1,000 USDT × 0.999 USDC/USDT = 999 USDC. The buy fee is 999 × 0.001 = 0.999 USDC, so modeled acquisition cost is 999.999 USDC.
Sale value: 1,000 USDT × 1.0008 USDC/USDT = 1,000.8 USDC. The sell fee is 1,000.8 × 0.001 = 1.0008 USDC, leaving 999.7992 USDC.
Net result: 999.7992 USDC − 999.999 USDC = −0.1998 USDC. Before fees, the price difference contributed +1.80 USDC; the two fees cost 1.9998 USDC. The quote-unit result therefore remains a loss even though the sell price is higher than the buy price.
There is a second way to check this particular result. Set the proceeds after the sale fee equal to the 999.999 USDC buy cost. Dividing that cost by 1,000 USDT and then by 0.999 leaves a break-even sell price of 1.001 USDC per USDT. The assumed sale price of 1.0008 is 0.0002 USDC per USDT below that threshold. Across 1,000 USDT, the shortfall after the 0.1% sale fee is 1,000 × 0.0002 × 0.999 = 0.1998 USDC. This independently reproduces the loss without subtracting the two full trade values again.
Convert the result only after the trade math
If a report needs a USD result, first finish the trade in its quote currency. Then multiply the signed quote-currency result by an exchange rate expressed as USD per one quote-currency unit for the valuation time you chose:
USD result = quote-currency result × USD per quote-currency unit
For example, if the result above is −0.1998 USDC, a separately recorded conversion rate of 0.999 USD per USDC at the chosen reporting time would produce −$0.1996002 before display rounding. That conversion rate is an illustrative input, not a claim about a live or historical USDC price. The rate’s source and timestamp belong with the converted result; without them, keep the answer labeled −0.1998 USDC.
There is a different question: what is the USD-value difference when each leg is valued at its own time? Suppose the 999.999 USDC buy cost is valued at $0.98 per USDC on the entry date, and the 999.7992 USDC sale proceeds are valued at $1.02 per USDC on the exit date. These two rates are hypothetical inputs, not market observations. The entry value is 999.999 × $0.98 = $979.99902. The exit value is 999.7992 × $1.02 = $1,019.795184. Subtracting those values gives +$39.796164, even though the trade result measured in USDC is negative.
By contrast, translating the −0.1998 USDC result at the assumed exit rate gives −0.1998 × $1.02 = −$0.203796. The two figures answer different questions: one compares the USD values of the two legs at their separate times, and the other values the net USDC result at one chosen time. Their difference in this example follows from the assumed change in the USD value of USDC; it is not another trading fee. The gap between the two dollar figures is $39.99996, which equals the 999.999 USDC entry cost multiplied by the $0.04 change in the assumed USD-per-USDC rate. Keep the entry and exit valuation rates and their timestamps alongside the fills when comparing those two views. If either required historical rate is missing, the two-date USD-value difference is unknown. This comparison is arithmetic, not a determination of tax cost basis or tax treatment.
Do not silently replace a token unit with a dollar sign because the token is intended to track a dollar. A quote in USDT, a quote in USDC and a quote in USD are distinct units in the calculation, even when their market values are close. If your records do not contain the conversion rate needed for a USD report, mark the USD equivalent unknown rather than inserting a one-to-one assumption.
Fee currency changes what the input means
The equation in this guide assumes each percentage fee is charged in the quote currency and can be valued as a percentage of that side’s trade value. Some fills show a fee in the base asset or in a third token instead. In that case, do not add the fee amount directly to a USDC or USD cost as if the units matched.
Use the exchange’s actual fill details to separate three quantities: the base units acquired, the quote units paid, and the asset and amount taken as each fee. A base-asset buy fee can reduce the quantity that reaches your account; a quote-asset buy fee increases the quote amount spent. A sell fee taken from quote proceeds reduces the quote amount received; a fee taken in another asset needs its own recorded valuation if you want a common-currency total.
The current crypto profit calculator accepts a ticker label, buy price, sell price, quantity, and separate percentage fee rates. It does not identify a trading pair, convert between USDT, USDC and USD, or model fees charged in a different asset. Use it only when your entered prices and fee amounts follow the same currency assumption; otherwise calculate from the recorded fee amounts outside the tool.
A USD-quoted example gives a different labeled answer
Consider a second hypothetical case: buy 1,000 USDC at $0.9978 per USDC and sell the same quantity at $1.003 per USDC. Assume a 0.1% fee on each side, both charged in USD. The buy value is $997.80 and its fee is $0.9978, so total cost is $998.7978. Sale value is $1,003.00 and its fee is $1.003, leaving $1,001.997. Net profit is $1,001.997 − $998.7978 = $3.1992.
This result is in USD because the stated pair is priced in USD and the fee assumptions are USD-denominated. It is not the same calculation as the USDT/USDC example above, even though both use a stablecoin and a 0.1% fee rate. Compare the units first, then compare the signed results. The crypto profit calculator displays USD, so its result label is appropriate only when the entered amounts are dollar-denominated.
Keep a reconciliation trail for the trade
When the result does not match the exchange balance, reconcile the actual records in this order: pair and quote asset; executed buy and sell quantities; average fill prices; buy and sell fee amounts with their fee currencies; then any conversion into a separate reporting currency. This sequence isolates whether a mismatch comes from the trade arithmetic or from a later currency conversion.
For a partial fill, calculate from the quantities and average prices actually executed rather than the requested order size and limit price. For a fee paid in another token, retain that token amount and the conversion basis used in any combined report. For a transfer or redemption after the sale, keep it as a separate event instead of adding it to spot-trade proceeds by default.
Download the stablecoin trade worksheet (.xlsx). Fill the shaded cells with your pair, quantity, prices and separate fee percentages. The worksheet calculates the result in the quote unit and optionally converts it using a rate you supply. It covers one complete purchase and sale with percentage fees in the quote currency; base-asset and third-token fees require a separate calculation.
This is a reconciliation method, not a tax-lot method. Cost-basis identification and tax treatment depend on records and jurisdiction. A trade calculator cannot infer missing fills or decide which reporting rule applies to you.
When a buy fee is charged in the base asset
A fee taken in BTC changes the BTC delivered, while a fee taken in USDT changes the USDT debit. Those are not interchangeable bookkeeping entries. Use this hypothetical BTC/USDT fill to see the difference: the order buys 0.02000 BTC at 50,000 USDT per BTC, a gross value of 1,000 USDT. The exchange deducts a buy fee of 0.00002 BTC, so the wallet receives 0.01998 BTC. The quote-currency debit remains 1,000 USDT under this example’s stated fee arrangement.
Suppose the received 0.01998 BTC is later sold at 51,000 USDT per BTC. Gross sale value is 0.01998 × 51,000 = 1,018.98 USDT. With a 0.1% sell fee charged in USDT, the sell fee is 1.01898 USDT and net proceeds are 1,017.96102 USDT. Subtract the recorded 1,000 USDT buy debit: the modeled result is +17.96102 USDT.
This method starts from the actual quote debit and net base quantity in the fills. It does not pretend that the 0.00002 BTC fee was a USDT fee. The calculation is valid only for the fee treatment stated in this example; use your own order receipt because exchanges can represent fee deductions differently.
Do not mix trade profit with stablecoin yield
A completed spot trade compares acquisition cost with sale proceeds. Interest, lending rewards, staking rewards, liquidity incentives and redemption proceeds are separate cash flows. They are not part of the buy-and-sell result unless you deliberately add them and label the calculation as a broader position return.
That separation is useful when a stablecoin appears in more than one role. If you bought USDC, later earned a reward in USDC, then sold both, the original trade quantity and the reward quantity did not come from the same event. Keep the acquired amount, reward amount and their recorded values distinct before combining any totals.
Questions such as “calculate USDT profit” or “calculate crypto profit in USDC” can therefore refer to different tasks: trading a stablecoin as the asset, or measuring another coin’s result in stablecoin units. State the pair and result currency in your notes so the number can be interpreted without guessing.
Scope of this calculation
The worked trade examples assume one purchase, one full sale, quote-currency percentage fees and no additional costs unless a section explicitly describes a base-asset fee. Their inputs and outputs are arithmetic demonstrations; none are live prices, exchange fee schedules or forecasts. The calculator on this site does not provide market data and cannot determine a token’s conversion value from its ticker.
The central check is dimensional: every multiplication must leave the intended quote unit, and every fee must be accounted for in the asset in which it was charged. Only after that check should a result be converted into another reporting currency. This page explains a calculation, not financial, accounting, legal or tax advice.