A rate budget and a fill record answer different questions
The original calculator answers what two supplied executed volumes would cost at two supplied percentage rates. The new audit answers which confirmed fill records have a supplied maker or taker role, which fee amounts have a known asset, and which records fall inside a chosen journal day. Neither tool is a live account connection.
Keeping those questions separate prevents a convenient average rate from overwriting missing evidence. An estimate can be arithmetically complete even when the actual fee asset is unknown. A fee total can also be known while its maker/taker attribution is incomplete. The audit reports those states separately instead of forcing every row into one category.
The original 6000/4000 budget is unchanged
Use hypothetical maker executed quote volume of 6,000 USD at 0.02% and taker volume of 4,000 USD at 0.06%. Maker fees are 6,000×0.02/100=1.20 USD. Taker fees are 4,000×0.06/100=2.40 USD. Their total is 3.60 USD; 3.60/10,000×100 gives an effective rate of 0.036%. These are example assumptions, not a current provider schedule.
A signed negative rate represents an explicitly supplied rebate. If both volumes are zero, the fee amount is zero and the effective percentage is not defined because its denominator is zero. The result CSV retains the original measure,value,unit layout. The budget never imports its rates into the actual-fill audit or estimates a missing commission.
Classify the execution, not the order description
A maker/taker label must come from a relevant execution record and its documented meaning. The input schema deliberately accepts only maker, taker and unknown. It does not interpret a buy/sell side, a limit-order name, a commission amount or an arbitrary Boolean string as proof of role. Blank becomes unknown, and unsupported labels stop the calculation.
Provider schemas illustrate why translation needs care. Binance account trade records contain an isMaker Boolean alongside commission and commissionAsset. Coinbase Advanced fills expose a liquidity_indicator field whose documented example includes an explicit unknown state. These are source-specific fields, not a universal CSV standard. Retain the original export and your mapping; this page neither logs in nor verifies its authenticity.
Sources: Binance Spot REST API — Account trade list, Coinbase Advanced Trade — List fills.
Keep one counted row per confirmed execution
Use the execution identity, not just an order ID, when an order has multiple fills. Prefix IDs with a source or account label when necessary so distinct records cannot collide. Identical IDs after surrounding whitespace is trimmed stop the audit; leading zeros and letter case remain significant. The tool does not silently delete one duplicate or count it twice.
Quote volume must already be the positive executed notional for that row. If an export supplies base size, contract count or a size-in-quote flag, resolve that meaning before preparing this schema. Buy and sell notional are both positive turnover here; they do not cancel one another. USD volume is not added to CAD volume, and role subtotals are shown separately within each quote asset.
Unknown role and unknown fee currency are independent
A 500 CAD execution with role unknown and a recorded 0.30 CAD fee still contributes a known CAD fee. Its volume and fee stay in the unknown-role bucket. If its fee amount is 0.30 but the asset is blank, the number cannot be added to CAD: it could describe a different unit. The row remains visible, the known CAD subtotal can still be shown, and the full selected CAD fee total stays unknown.
Blank fee amount means unestablished. Explicit 0 means a recorded zero amount, provided the asset is also supplied. A negative amount records a supplied rebate and can offset known charges within the same asset. The tool never guesses a fee asset from the quote currency. Known BTC, USD and CAD amounts remain separate; changing the reporting label performs no conversion.
The Toronto journal day changes which fills are selected
In the hypothetical October example, F1 at 2026-10-20T01:00:00Z belongs to 19 October in America/Toronto. F2 at 02:00Z and F4 at 03:00Z also belong to that local date. F3 at 04:30Z belongs to 20 October, so selecting 19 October keeps three rows and marks F3 excluded. Selecting the same date with UTC instead selects none. The audit preserves all four records and their inclusion flags.
The browser computes date membership from its America/Toronto time-zone data; the original instant is retained separately. This is a Toronto workflow, not a single time rule for all Canada. NRC notes that time rules are generally regulated provincially and territorially and currently flags its page for review around 1 November 2026. The worked example is October-only; the browser result is not a certification of future local rules. Verify the relevant jurisdiction before relying on a future date.
A CAD subtotal does not convert the remaining fees
For the loaded Toronto example, F1 contributes 1.20 CAD and F2 contributes 2.40 CAD. Their known subtotal is 3.60 CAD. F4 has a recorded amount 0.30 with no asset, so the full CAD total is unknown. If its original record later confirms CAD, the selected fee total becomes 3.90 CAD while its maker/taker attribution is still incomplete. If the record instead confirms USD, the audit shows a separate 0.30 USD subtotal and withholds a combined CAD total.
The Bank of Canada describes its daily rates as indicative and quoted as Canadian dollars per unit of foreign currency. Such a reference needs an explicit currency, date and valuation purpose; it is not the asset on the original fee record. This worksheet deliberately does not fetch or apply FX rates. Its task ends at classification and fee-asset coverage, leaving valuation and tax questions to their own documented workflow.
Sources: Bank of Canada — Daily exchange rates.
Only compare a fee and volume expressed in the same unit
The actual-fill effective rate appears only when every selected fee amount and asset is known, all fees use the reporting currency, and all selected quote volume uses that same currency. It is 100×total signed fees/total positive quote volume. An unknown maker/taker role does not by itself prevent that aggregate rate, but it still prevents complete role attribution.
A mixed-asset fee set or a missing amount withholds the rate rather than producing a misleading low percentage. A date filter selecting no rows produces no selected fee total or rate, not a zero-cost trading day. None of these checks proves that every account execution was exported. The result always describes the supplied records and selected day only. Rates use half-up rounding to 12 decimal places. A nonzero rate below that display precision retains its positive or negative direction in the result and export. A tiny rebate is therefore not presented as a measured zero fee rate.
Save evidence of exclusions and remaining unknowns
The fill-audit CSV retains the seven input columns, then adds normalized UTC time, record date, inclusion, fee status, reporting currency and total status. Unknown numeric fields stay blank. Download, copy and a visible manual-copy field use the current calculation; an edit hides the result and clears the export until recalculated. Formula-like text and signed exported values receive a protective apostrophe for spreadsheet safety, so keep the original source for exact-byte reuse. The budget keeps its original three-column CSV and adds a precision-note row when a nonzero effective rate rounds to zero. The fill audit exports the rate and its precision status together.
The original budget and the fill audit remain separately usable. Their calculations run locally and require no sign-up. The optional link below describes this publisher's existing crypto signals, setups and market-updates offer. Joining does not verify your records, establish a commission rate or turn a local subtotal into an account reconciliation.
Worked examples
Example 1
- maker volume
- 6000
- taker volume
- 4000
- maker rate pct
- 0.02
- taker rate pct
- 0.06
- currency
- USD
- maker fee
- 1.2
- taker fee
- 2.4
- total fees
- 3.6
- effective rate pct
- 0.036
The original hypothetical USD fee budget remains intact, including signed-rate and zero-volume behavior.
Example 2
- report currency
- CAD
- day zone
- America/Toronto
- audit day
- 2026-10-19
- csv
- fill_id,timestamp,liquidity,quote_volume,quote_asset,fee_amount,fee_asset F1,2026-10-20T01:00:00Z,maker,6000,CAD,1.2,CAD F2,2026-10-20T02:00:00Z,taker,4000,CAD,2.4,CAD F3,2026-10-20T04:30:00Z,taker,1000,CAD,0.6,CAD F4,2026-10-20T03:00:00Z,unknown,500,CAD,0.3,
- selected rows
- 3
- excluded rows
- 1
- known reporting fee subtotal
- 3.6
- full selected reporting fee total
- unknown
- unknown role rows
- 1
- unknown fee asset rows
- 1
The Toronto date selects F1,F2,F4. An amount without a fee asset is not added to CAD.
Example 3
- change
- Keep the loaded fill records and change day_zone to UTC
- audit day
- 2026-10-19
- selected rows
- 0
- known reporting fee subtotal
- unknown
- full selected reporting fee total
- unknown
- effective rate pct
- unknown
All four hypothetical instants are 20 October in UTC. No selected rows is not a measured zero-fee result.
Example 4
- change
- In the loaded fill CSV, set F4 fee_asset to CAD
- known reporting fee subtotal
- 3.9
- full selected reporting fee total
- 3.9
- unknown role rows
- 1
- effective rate pct
- 0.037142857143
A supplied fee asset can complete the fee total without resolving the unknown maker/taker role.
Questions before you use the result
Is every limit order a maker execution?
Do not infer the execution role from the order label. Use the relevant fill record and its documented role field; otherwise keep unknown.
Can I fill a blank commission with my expected rate?
That belongs in the separate budget. The actual-fill audit preserves the missing commission instead of replacing it with an estimate.
Why is the CAD subtotal known but the full total unknown?
Some fees can be identified in CAD while another selected fee lacks an amount or asset, or is in another asset. The subtotal covers only known CAD amounts.
Does this prepare a Canadian tax return?
No. It classifies supplied fills and fee assets. It does not value non-CAD fees, decide tax treatment or verify account completeness.
Primary sources and scope
- Binance Spot REST API — Account trade listChecked 2026-10-20. The documented account-trade schema separates isMaker, commission and commissionAsset. It is a schema example, not an availability claim or authenticated account read.
- Coinbase Advanced Trade — List fillsChecked 2026-10-20. The fill schema contains liquidity_indicator, including an unknown example, and separate trade identity/time/commission fields. No account data was requested.
- NRC Canada — Time zones and daylight saving timeChecked 2026-10-20. Time rules are generally provincial/territorial. The page carries a review warning for 1 November 2026; this resource limits its concrete local-date example to October 2026.
- Bank of Canada — Daily exchange ratesChecked 2026-10-20. Rates are indicative and expressed as CAD per foreign currency unit. This audit does not apply FX rates or tax rules.
Prepared from the sources listed above. Examples and calculations explain a method; they do not predict prices or certify an investment. Geographic time references do not establish where a trading service is available. Dated schedules can change: consult the named publisher before relying on a future event.