20 min

Basis points, the unit of tolls

One basis point is one hundredth of one percent, a unit that exists because on large payments hundredths of a percent are real money, and the toll scales with the notional.

Where you are. Two lessons have priced the border crossing, in two shapes that refuse to add. Lesson 6’s corridor simulator charges flat fees: a fixed amount at each of the canonical corridor’s three hops, indifferent to what the payment carries. Lesson 7 found the bigger toll hiding inside the exchange rate itself: the FX desk’s half-spread, a cut proportional to whatever you convert, measured in hundredths of a percent. A fixed amount and a buried rate are different kinds of number - one is currency, one is a fraction - so the corridor’s real price is still two figures on two lines. This lesson supplies the unit that puts them on one line: the unit finance actually argues in, and the course’s toll unit from here to the end.

The syllable worth a salary

Listen in on two banks agreeing an exchange rate, a single stylised trade of 500 million. The first desk quotes a price. The second does not haggle in percent; nobody at this size does. It asks for the rate “three tighter”, and the first desk winces before agreeing. Three what? Three hundredths of one percent - a difference so far down the decimal places that a spreadsheet would round it away. Multiply it out instead: three hundredths of a percent of 500 million is 150,000. One syllable moved a sum most people work a year for, and neither desk found the conversation strange. At these volumes the second decimal of a percentage is a fortune, so the people who argue over second decimals long ago built a unit that makes those decimals whole numbers. This lesson is that unit.

The idea in one paragraph

A basis point is one hundredth of one percent - equivalently, one part in ten thousand - so 100 basis points make one percent and 50 basis points are half a percent. Finance quotes fees, spreads and yields in basis points for the same reason your code stores money in integer cents rather than floating-point dollars: choose a unit fine enough and the numbers people argue about become whole and unambiguous. This lesson makes it the course’s toll unit and puts it straight to work. Re-express the corridor’s whole stack - flat fees that ignore size, an FX margin that scales with it - in basis points of the notional, the face amount the payment moves, and the corridor’s real price appears. It is not one price: the stylised corridor that charges a 10,000 payment 65 basis points charges a 200 payment 800, and nothing about the corridor changed between those two sentences except the size of the payment crossing it.

One part in ten thousand

Percent already compresses: “per hundred” turns 0.07 into 7. A basis point compresses a hundred times further: one part in ten thousand, a plain rate of 0.0001. The three ways of writing a rate line up like this:

in basis pointsas a percentas a plain ratein currency, on 10,000
1 bp0.01%0.00011
50 bps0.5%0.00550
100 bps1%0.01100
800 bps8%0.08800

The last column is the mnemonic worth keeping: on a payment of ten thousand, one basis point is exactly one unit of currency. That is the whole conversion rule, and it is why every formula in this lesson multiplies or divides by 10,000.

The toll stack, priced twice

Now put the corridor’s two tolls in one place. From lesson 6, the flat part: each of the canonical corridor’s three hops charges a flat 5, stylised, so 15 leaves the payment whatever its size. From lesson 7, the proportional part: the desk’s margin, the half-spread kept as a rate of 50 bps, taking 50 parts in ten thousand of whatever converts. In currency the stack is one addition:

total=3×5+notional×5010000\text{total} = 3 \times 5 + \text{notional} \times \frac{50}{10\,000}

In words: the hops charge what they charge, and the desk takes its rate of the notional. To see what the crossing really costs, divide the total by the notional and re-express it in the new unit, which means multiplying by 10,000:

toll in bps=15×10000notional+50\text{toll in bps} = \frac{15 \times 10\,000}{\text{notional}} + 50

Read it term by term, because the whole lesson lives in this line. The margin passes straight through: 50 bps in, 50 bps out, identical at every size. The flat fees arrive divided by the payment they sit on: a shrinking nuisance for a large payment, a monster for a small one. Every corridor’s price in basis points is a constant floor plus a blow-up term, and only the blow-up cares about size. Run the two payments the exercise runs:

payment of 200payment of 10,000
flat fees (3 hops x 5)15.0015.00
FX margin (50 bps)1.0050.00
total, in currency16.0065.00
total, in bps of the payment80065

Ask who paid more and the currency row answers: the 10,000 payment, 65 against 16, four times as much, because its margin scales with size. Ask who paid a larger share - the only question the sender cares about - and the ranking flips hard: 800 basis points against 65, more than a twelvefold multiple. Decompose the 800 and the culprit confesses. The flat 15 is 750 bps of a 200 notional but only 15 bps of 10,000, while the margin contributes the same 50 bps to both stacks: 750 plus 50 against 15 plus 50. Eight percent of the small payment is gone before the recipient sees a single unit.

The floor and the cliff

The toll booth runs this lesson’s arithmetic live: set the corridor’s hops, flat fee and FX margin, then drag the payment size and watch the stack re-price in currency and in basis points at once. What it shows is the table above as a moving picture: at 200 the flat fees dominate the stack and the toll runs to several percent of the payment; at 10,000 the margin dominates and the toll settles towards its floor, which is the margin itself.

The figure freezes the same story across every size at once, for three stylised corridors: a bank-style corridor with heavy flat fees of 25 and a 250 bps margin, a digital-style corridor at 2 and 90 bps, and one in between at 10 and 150 bps.

image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 1 0 2 1 0 3 1 0 4 1 0 5 payment size (dollar-equivalent) 1 0 0 1 0 1 total toll, percent flat fees crush small payments bank-style corridor digital-style corridor mid corridor
The total toll in percent against payment size, both axes logarithmic: three stylised corridor lines fall steeply as growing payments dilute their flat fees, then flatten onto their FX-margin floors, with the annotation "flat fees crush small payments" at the small end

The vertical axis is percent; multiply by a hundred to read it in bps. Every corridor draws the same curve. On the right each line lies flat on its own floor - 2.5%, 1.5% and 0.9%, which are just the three margins of 250, 150 and 90 bps with the flat fees diluted to nothing. On the left every line turns up a cliff, the cheap corridor’s included: its flat fee of 2 is 1% of a 200 payment but 2% of a payment of 100, and the shape wins over the numbers every time. The digital-style corridor is cheapest at every size here, and even it cannot escape the geometry.

Check yourself

1. A corridor advertises an all-in price of 120 bps. What is that as a percent and in currency on a 5,000 payment - and what has the advert quietly assumed?

120 bps is 1.2%, which on 5,000 is 60. The quiet assumption is a payment size: if any part of the corridor’s cost is flat, its all-in rate in bps is only true at one notional - smaller payments pay more bps, larger ones fewer. An honest all-in quote names the rate and the size it was computed at; a rate alone tells the whole story only when there are no flat fees at all.

2. In currency the 10,000 payment pays 65 and the 200 payment pays 16. In basis points the 200 payment pays 800 against 65. Which quote answers the sender’s question, and what exactly flips the ranking?

The basis-point quote: a sender asks what fraction of the money survives the crossing, and 800 bps says 8% did not. The flip is entirely the flat term. Fifteen of flat fees is 750 bps of a 200 notional but only 15 bps of 10,000, while the margin contributes the same 50 bps to both stacks: 750 plus 50 against 15 plus 50. In currency the margin’s scaling hides the flat fees; in basis points the flat fees tower over everything.

3. Why can no payment, however large, cross this corridor for less than 50 bps? And what would a corridor with no flat fees charge a 200 payment?

The toll in bps is the flat term plus the margin, and the flat term - 15 times 10,000 over the notional - shrinks towards zero as the notional grows but never reaches it and never goes below. The margin passes through unchanged, so the curve flattens onto 50 bps and stops: the floor is the margin. A corridor with no flat fees charges its margin at every size - 50 bps, meaning 1 on a 200 payment - which is why purely proportional pricing is the small payment’s best friend.

4. Lesson 7 measured the desk’s cut as a gap between two prices. The exercise carries it as FX_MARGIN_BPS = 50. What does keeping the spread as a rate in basis points buy?

Addition and comparison. As a price gap the cut lives in one currency pair’s units: it cannot be added to a fee quoted in currency or compared across corridors. As basis points of the notional it is a pure number: it sums with the flat fees’ bps into one all-in toll, it ranks this corridor against any other at a given size, and it reads on the same scale as every other rate in finance - later in the course, yields arrive in the same unit.

5. Why did finance settle on a unit worth a hundredth of a percent instead of arguing in percent with decimal places?

Resolution and safety. Deals at size are struck at differences far finer than a percent - the hook’s haggle was three hundredths - so percent forces the action into the decimal places, and decimal places are where misreadings live. Basis points make the traded step a whole number. The unit is also absolute by convention: “up 50 bps” moves a 2% fee to exactly 2.5%, never to 2% scaled by some multiplier, which kills the relative-or-absolute ambiguity that “half a percent more” leaves open.

Do this

Twenty minutes, from module-03-across-borders. Open code/toll_booth.py - the arithmetic behind this lesson’s toll booth widget, with constants where the widget has sliders, and the constants are the module’s own: the canonical corridor’s three hops at a flat 5 each from lesson 6, and the desk’s cut from lesson 7 kept as FX_MARGIN_BPS = 50. Your work is toll_stack, four lines in the TODO(you): the flat part (HOPS * FLAT_FEE), the FX part (notional * FX_MARGIN_BPS / 10_000), their total, and the total re-expressed in basis points of the payment (total * 10_000 / notional). Keep the arithmetic in exactly that shape; the assertions compare with == and every result lands exactly.

python3 code/toll_booth.py

Green prints both stacks - 16.00 in total on the 200 payment, 65.00 on the 10,000 - then four assertions walk the lesson’s argument in order: the flat part identical for both, the currency ranking, the bps flip, the twelvefold multiple. The run ends with the final line verbatim:

same corridor, same tolls: the 200 payment pays 800 bps and the 10,000 payment pays 65 bps - flat fees shrink for no one, so the smallest payments pay the steepest rate

If the bps assertion fires with 8.0 where 800 was expected, you converted to percent rather than basis points: the factor is 10,000, not 100. If the FX margin prints 500,000 on the large payment, you multiplied by the bps and skipped the division - a rate in basis points is that number over ten thousand, always. The completed version is solutions/toll_booth.py; compare after you are green.

What you can now do. You can quote any toll in the unit the trade is actually argued in, converting between basis points, percent and currency without pausing, and you can decompose any corridor’s price into the two terms that govern it: a floor that is the margin and passes through at every size, and a flat-fee term that divides by the notional and punishes the small. You proved the flip on one corridor: the same three hops and the same desk charge the 10,000 payment 65 bps and the 200 payment 800, a twelvefold gap manufactured by arithmetic alone. From here on the course prices every toll this way. The next lesson points the unit at the corridors where the 200 payment lives - remittances - and puts real, dated cost statistics beside the stylised fees; the shape you built today is the shape of that story.

What you can now do

You can quote any toll in basis points and show why small payments pay proportionally most.