Trading Dev AcademyFree quant education

Free lesson · Arbitrage

Triangular currency conversion

Open interactive lessonPractice calculationsExplore labs

Start with the idea

A conversion triangle compares two paths back to the same currency. Currency units must cancel around the route.

Symbols, units & horizon
  • A_0: initial A currency units
  • r_AB: B per A
  • r_BC: C per B
  • r_CA: A per C
  • f: identical proportional fee on each of three conversions
  • A_end: ending A currency units

When and why to use this

Audit fiat/stablecoin routes by units and account-level availability.

A conversion triangle compares two paths back to the same currency. Currency units must cancel around the route.

Define each rate as destination currency per source currency and apply it to the balance from the preceding trade. Use executable sides, not three midpoints.

Covered FX parity extends this reasoning to domestic investment versus foreign investment with a forward hedge. Borrow/lend asymmetry, balance-sheet limits and collateral introduce a band.

Aend=A0rABrBCrCA(1−f)3
Model assumptions, derivation and arithmetic

Triangular currency conversion

  1. Multiply initial A by B-per-A and retain 1−f.
  2. Apply C-per-B and then A-per-C, charging fees each time.
  3. Compare final and initial A and add fixed fees separately.
Work it by hand

$1,000×.9 EUR/USD×160 JPY/EUR×.007 USD/JPY=$1,008 before fees, giving $8 gross.

Apply it in a strategy

  • Audit fiat/stablecoin routes by units and account-level availability.
  • Record the input timestamp, executable quantity, currency and horizon. Reconcile the result with a cash-flow or state table.
  • Stress this failure condition: Transfer delays, redemption access and currency balances may prevent sequential completion.

Research deliverable

Build and explain a triangular currency conversion worksheet. Audit fiat/stablecoin routes by units and account-level availability.

Evidence boundary: Synthetic arithmetic and scenarios illustrate mechanics. They are not historical returns, a paper replication, or evidence of an executable edge. Research sources and their access limitations are recorded at the end of this module.

Python implementation

Self-contained teaching example. Python 3.10+; dependencies and input conventions are shown in the code and notation. Run in your own Python environment.

# Python 3.10+; standard library unless NumPy is imported below.
# Inputs and outputs use the units defined in this lesson. Synthetic teaching example.
def triangle(start,rates,fees):
    if len(rates)!=3 or len(fees)!=3 or start<0: raise ValueError("Three aligned legs required")
    value=start
    for rate,fee in zip(rates,fees):
        if rate<=0 or not 0<=fee<1: raise ValueError("Invalid conversion")
        value*=rate*(1-fee)
    return value,value-start

print(triangle(1000,[.9,160,.007],[0,0,0]))

Continue learning

Arbitrage: Payoffs, Financing and Execution — all lessons
  1. Start with every possible payoff
  2. Bid, ask and the gross-to-net waterfall
  3. Put–call parity from expiration states
  4. Dated cash-and-carry
  5. Triangular currency conversion
  6. ETF baskets and creation access
  7. Haircuts and survival capital
  8. Size, impact and the research decision

Quantitative finance and development glossary · Python resources and libraries · Research sources and limitations