Fixed Rate Markets

Fixed Rate Markets enable both Lenders and Borrowers to lock in rates for a fixed period of time. Interest rate payments are settled on a daily basis.

With the seamless ability to trade across both Floating and Fixed Rates, traders can update these levels in real-time depending on price movements across other markets. With a portfolio-margined risk system, this ensures fluidity of capital across the entire yield curve, and across all currencies.



Lend / Borrow


Various (1D, 2D, 1W, etc...)


Notional or Size of Trade


Interest Rate expressed on a per-annum basis, cpn


Daily Payments

Day Count:

Actual / Actual


A fixed lending or borrowing position is the sum of its cash-flow discounted. Cash-Flows are either interest (denoted, "cpn") or principal repayment at maturity T.

The Present Value or PV as a function of its discounted cash flows is written as:

PV=iCFiB(0,i)=B(0,T)100+iB(0,i)cpn()PV = \sum_{i} CF_i \cdot B(0,i) = B(0,T) \cdot 100 + \sum_{i} B(0,i) \cdot cpn (*)


B(0,i)=1(1+r(0,i))iB(0,i) = \frac{1}{{(1+r(0,i))^i}}
  • B(0,i) are the discount factors or Zero Coupon Bonds prices

  • r(0,i) are the Zero Coupon rates

Putting aside slippage, your position is initiated at par, i.e. initially: PV = Notional, or in other words, PV%=100%. We assume Notional = 100, above/below.

As time passes, your lending position where you locked a certain cpn rate is no longer at par. Entering a new position at the then market rate, denoted cpn_par afterwards would be valued at 100%.

PV=iB(0,i)(cpncpnpar)+iB(0,i)cpnpar+B(0,T)100,i.e.PV=100+iB(0,i).(cpncpnpar)\scriptsize PV = \sum_{i} B(0,i)*(cpn - cpn_{par}) + \sum_{i} B(0,i)*cpn_{par} + B(0,T) \cdot 100, \\i.e. PV = 100+\sum_{i} B(0,i).(cpn-cpn_{par})

By introducing PV01, the PV can therefore be rewritten as:

PV=100+PV01×(cpncpnpar)()PV = 100+PV01 \times(cpn-cpn_{par}) (**)


PV01=iB(0,i)PV01= \sum_{i} B(0,i)

From (**), it’s easy to see that for a lend position: PV>100 <=> cpn>cpn_par, i.e. if the current market rate is lower than the rate the user locked when he entered the position, the present value of your position is higher than 100%.

To recap, the two ways to write the PV are as follows:

PV=iCFi×B(0,i)=B(0,T)×100+iB(0,i)×cpn()PV=100+PV01×(cpncpnpar)()PV=\sum_{i} CF_i \times B(0,i)=B(0,T) \times 100+\sum_{i} B(0,i) \times cpn (*) \\PV = 100+PV01 \times (cpn-cpn_{par}) (**)

Dirty Price vs Clean Price

When entering a position, if the user does not enter at exactly 8am UTC (i.e. 4pm HKT), some of the coupon would already have started to accrue. The position’s dirty price does take this accrued coupon into account in the position’s valuation while the clean price does not:

Definitions below:

  • Accrued Coupon = (t-T1)*c

  • Full Coupon = (T2-T1)*c

  • Perceived Coupon = Full - Accrued = (T2-t)*c

The positions PV formula detailed in the above section are dirty prices. The equivalent clean price is:

PVclean=100+PV01.(cpncpnpar)accruedCpni.e.PVclean=PVdirtyaccruedCpnPV_{clean} =100+PV01.(cpn-cpn_{par})-accruedCpn\\i.e.\: PV_{clean}=PV_{dirty} -accruedCpn

At Infinity, our PV quotes are - unless indicated otherwise - dirty prices.

Interest Payment Calculation

Infinity is open 24 hours 365 or 366 days a year. The Interest period starts and ends at 8am UTC (i.e. 4pm HKT) the next day. At Infinity, the Day Count convention used is A/A (Actual/Actual).

Therefore, the interest to be paid over a full day is:

DailyInterest=NotionalRateDDaily Interest =Notional*\frac{Rate}{{D}}

Where: D=366 for leap years, 365 otherwise

On a partial day, i.e. on the day user initiates a position at a timestamp X (in ms), if we denote Y the timestamp of the next 8am UTC (i.e. 4pm HKT) occurrence, then the interest is:

IntraDay Interest = Notional*Rate*Y-XD*24*60*60*1000, where D=366 for leap years, 365 otherwise

IntraDayInterest=NotionalRateYXD2460601000,IntraDay Interest = Notional*Rate*\frac{Y-X}{{D*24*60*60*1000}},

Where: D=366 for leap years, 365 otherwise.

Last updated