Treasury futures Net Basis / Implied Repo Rate

Treasury futures Net Basis / Implied Repo Rate

Manage alerts

Loading saved threads...

Vish · External communityPost link
External question — Quantitative Finance Stack Exchange Author: Vish Original post: https://quant.stackexchange.com/questions/85840 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. I’m trying to work this out every day but when I calculate the below clients are saying that it does not look right based just wondered if any one could help me work out if what it should be? Contract CTD CUSIP Coupon Conversion Factor Bond clean price Futures price Accrued interest (today) Delivery date used Days to delivery Repo rate Gross Basis (32nds) Net Basis (32nds) Implied Repo TUZ6 91282CNY3 3.375% 0.9569 97.603516 102.066406 1.6736 2026-12-01 80 3.294% -2.0425 -2.0154 3.5795% 3YZ6 91282CLN9 3.5% 0.9374 96.578125 103.066406 1.5918 2026-12-01 80 3.454% -1.1624 -1.1383 3.6170% FVZ6 91282CQD6 3.5% 0.9090 94.962891 104.507813 0.1438 2026-12-01 80 3.630% -1.1108 -1.1077 3.7939% TYZ6 91282CRJ2 4.5% 0.9202 97.851563 106.109375 0.1479 2026-12-31 110 4.377% 6.7109 5.2543 3.8286% UXYZ6 91282CQQ7 4.375% 0.8858 95.542969 107.625000 1.4384 2026-12-31 110 4.250% 6.6798 5.3618 3.6843% USZ6 912810UL0 5.0% 0.8899 95.541016 106.750000 1.6438 2026-12-31 110 4.794% 17.4141 15.4095 3.1726% WNZ6 912810TL2 4.0% 0.7393 80.322266 108.250000 1.3151 2026-12-31 110 4.666% 9.3773 8.5734 3.5919% Repo used: general collateral (GC) repo for TU/3Y/FV/TY/UXY; Bloomberg's FUT_ACTUAL_REPO_RT field for US/WN specifically. Day count is Act/360 throughout. Inputs (as of 2026-09-12): • Futures: TYZ6 (10-Year T-Note, December 2026) • CTD bond: CUSIP 91282CRJ2, 4.5% coupon, maturity 2033-08-31 • Conversion factor (Bloomberg native field): 0.9202 • Bond clean price: 97.8515625 • Futures price: 106.109375 • Repo rate used (live GC repo): 4.3769% • Trade/"as of" date: 2026-09-12 Step 1 — Coupon cycle. Coupons are semi-annual, anchored on the bond's maturity month/day (Aug 31 / Feb 28-29). Last coupon: 2026-08-31. Next coupon: 2027-02-28. So there is no coupon payment date falling between today and delivery. Step 2 — Accrued interest today. AI(today) = (days since last coupon / 182.5) × (coupon/2) = (12 / 182.5) × 2.25 = 0.147945 Step 3 — Delivery date selection. The contract's delivery window runs across the whole December 2026 delivery month (first delivery day 2026-12-01, last delivery day 2026-12-31). The convention we use: test the sign of net carry assuming the position is held to the last delivery day. If carry over that full window is negative, use the first delivery day instead (deliver ASAP to stop bleeding negative carry); if positive, hold to the last delivery day. Carry to 2026-12-31 comes out positive (Step 6 below), so the last delivery day is used. Delivery date: 2026-12-31 Days to delivery: 110 Step 4 — Coupons/accrued interest at delivery. No coupon payment falls in the window (coupons received = 0), so: AI(delivery) = (days from last coupon to delivery / 182.5) × (coupon/2) = (122 / 182.5) × 2.25 = 1.504110 Step 5 — Coupon income. Coupon income = Coupons received + AI(delivery) − AI(today) = 0 + 1.504110 − 0.147945 = 1.356164 Step 6 — Financing cost. Financing cost = (Clean price + AI(today)) × repo × (days/360) = (97.8515625 + 0.147945) × 0.043769 × (110/360) = 98.0 (approx.) × 0.043769 × 0.305556 = 1.310646 Step 7 — Net carry. Net carry = Coupon income − Financing cost = 1.356164 − 1.310646 = 0.045519 (points) → confirms Step 3's assumption (positive, so last delivery day is correct) Step 8 — Gross Basis. Gross Basis = (Clean price − Futures price × Conversion factor) × 32 = (97.8515625 − 106.109375 × 0.9202) × 32 = 6.7109 (32nds) Step 9 — Net Basis. Net Basis = Gross Basis − (Net carry × 32) = 6.7109 − 1.4566 = 5.2543 (32nds) Step 10 — Implied repo (IRR). IRR = [ (Futures price × CF + AI(delivery) + Coupons received) / (Clean price + AI(today)) − 1 ] × (360/days) × 100 = [ (106.109375 × 0.9202 + 1.504110 + 0) / 98.0 (approx.) − 1 ] × (360/110) × 100 = 3.8286%
Quote
Report
Vish · External communityPost link
External answer — Quantitative Finance Stack Exchange Author: Vish Original post: https://quant.stackexchange.com/a/85847 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. i tried to redo not sure if any one can help answer these questions and see if my net basis is correct and IRP Are prices fixed at any point like maybe 3pm day before? is there certain bond price or futures price you should use? when i use futures settlement prices compared to live it give 10x what i have thats in the region of other indications i have got from other sources? do you have to do anything special for adjustments like short end vs long? Tu vs say US? Net Basis / Implied Repo Rate — Worked Example (TUZ6, 2-Year T-Note) Static inputs (all from one snapshot) Item Value Contract TUZ6 (2-Year T-Note future, Dec 2026) Snapshot time 2026-09-18, 10:06:00 UTC (06:06 NYC) Price convention Last traded price (futures and bond) Futures price (f0) 101.945312 CTD bond CUSIP 91282CJA0 Bond clean price (px) 99.796875 Coupon (annual, cpn) 4.625% Maturity 2028-09-30 Conversion factor (CF) 0.977400 Repo rate (annualzd) 4.0767% Everything below is derived from just these eight numbers. Step 0 — Where the 4.0767% repo rate comes from We don't use a single flat repo number for every contract — it's read off a live SOFR OIS swap curve (Bloomberg's YCSW0490 curve) and interpolated to match this specific trade's days-to-delivery. Curve source: 9 nodes, 1 week to 6 months, PX_LAST on each tenor's swap ticker: Tenor Ticker Days (curve convention) Mid rate at 10:06 UTC 1W USOSFR1Z BGN Curncy 7 3.8895% 2W USOSFR2Z BGN Curncy 14 3.8935% 3W USOSFR3Z BGN Curncy 21 3.8940% 1M USOSFRA BGN Curncy 30 3.9010% 2M USOSFRB BGN Curncy 60 3.9675% 3M USOSFRC BGN Curncy 90 4.0301% 4M USOSFRD BGN Curncy 120 4.0999% 5M USOSFRE BGN Curncy 150 4.1562% 6M USOSFRF BGN Curncy 180 4.1995% Days-to-delivery used for the curve lookup: this is measured from the raw trade date to the LATE delivery date (2026-09-18 → 2027-01-06 = 110 days) — note this is not the same 107-day figure used later in Steps 3/7/10, which is measured from the T+1 settle date instead. The curve lookup intentionally uses the coarser trade-date basis; the financing/IRR math uses the precise settle-date basis. Two different day-counts inside one calc, by design. Interpolation: 110 days falls between the 3M (90 days) and 4M (120 days) nodes, so we linearly interpolate between them (the curve clamps to its end nodes rather than extrapolating outside 1W–6M, but that doesn't apply here): fraction = (110 − 90) / (120 − 90) = 0.6667 repo rate = 4.0301% + 0.6667 × (4.0999% − 4.0301%) = 4.0301% + 0.6667 × 0.0698% = 4.0301% + 0.0466% = 4.0767% This 4.0767% is the repo rate plugged into the financing cost (Step 7) and the coupon reinvestment (Step 10) below. It's the SAME curve-derived rate for every contract at this timestamp — TU/FV/TY/UXY/WN all draw from this one curve, just at a different point along it depending on each contract's own days-to-delivery, rather than each root pulling its own distinct repo source. Step 1 — Settlement date Trade date is 2026-09-18. Standard T+1 settlement (next business day): settle_date = 2026-09-21 All accrued-interest and carry math below is calculated as of this settle date, not the trade date. Step 2 — Coupon dates and today's accrued interest The bond pays semiannual coupons anchored on its maturity month/day (30-Sep / 31-Mar): last coupon paid : 2026-03-30 next coupon due : 2026-09-30 days in this coupon period = 2026-09-30 − 2026-03-30 = 184 days days accrued so far (settle − last coupon) = 2026-09-21 − 2026-03-30 = 175 days Accrued interest today: accrued = (days accrued / days in period) × (coupon / 2) = (175 / 184) × (4.625 / 2) = 2.199389 Step 3 — Which delivery date does the short use? CME convention: the short holds to the LAST delivery day if net carry is positive over that horizon (coupon income beats financing cost), otherwise delivers on the FIRST day to stop bleeding negative carry. We test the last delivery day first: candidate delivery date = 2027-01-06 days settle → delivery (days_c) = 2027-01-06 − 2026-09-21 = 107 days (worked out below — net carry over this horizon comes out positive, so 2027-01-06 is in fact the delivery date used; no need to separately test the first delivery day) Step 4 — Coupon received during the holding period The next coupon (2026-09-30) falls inside the holding window (settle 2026-09-21 → delivery 2027-01-06), so the short collects it: coupon received = coupon / 2 = 4.625 / 2 = 2.3125 That coupon is received 2026-09-30 and reinvested until delivery on 2027-01-06: days coupon is reinvested (d2) = 2027-01-06 − 2026-09-30 = 98 days Step 5 — Accrued interest at delivery From the coupon just paid (2026-09-30) to the delivery date (2027-01-06), inside the NEW coupon period (2026-09-30 → 2027-03-30, 181 days): days from new coupon date to delivery = 2027-01-06 − 2026-09-30 = 98 days accrued at delivery = (98 / 181) × (4.625 / 2) = 1.252072 Step 6 — Coupon income (net of what you already accrued today) coupon income = coupon received + accrued at delivery − accrued today = 2.3125 + 1.252072 − 2.199389 = 1.365183 Step 7 — Financing cost Financed at the repo rate on the bond's dirty price, for the 107-day holding period, minus a credit for the coupon cash you're not financing anymore once it's received: dirty price today = px + accrued = 99.796875 + 2.199389 = 101.996264 financing cost = repo% × [days_c × dirty price − coupon received × d2] / 360 = 0.040767 × [107 × 101.996264 − 2.3125 × 98] / 360 = 0.040767 × [10,913.600 − 226.625] / 360 = 1.210211 Step 8 — Net carry (confirms Step 3's delivery choice) net carry = coupon income − financing cost = 1.365183 − 1.210211 = +0.154972 Positive → confirms the short is better off holding to the LAST delivery date (2027-01-06), as assumed in Step 3. Step 9 — Gross basis and Net basis gross basis (32nds) = (bond price − futures price × CF) × 32 = (99.796875 − 101.945312 × 0.977400) × 32 = (99.796875 − 99.641348) × 32 = 4.976866 net basis (32nds) = gross basis − (net carry × 32) = 4.976866 − (0.154972 × 32) = 4.976866 − 4.959115 = 0.017750 Step 10 — Implied Repo Rate (IRR) This treats the whole trade as: buy the bond dirty today, collect + reinvest the coupon, deliver the bond into the future at (futures price × CF) at delivery, and solve for the annualized return. coupon reinvested to delivery = coupon received × (1 + repo% × d2/360) = 2.3125 × (1 + 0.040767 × 98/360) = 2.3125 × 1.011092 = 2.338163 proceeds at delivery = (futures price × CF) + accrued at delivery + coupon reinvested = 99.641348 + 1.252072 + 2.338163 = 103.231583 IRR% = [ (proceeds at delivery / dirty price today) − 1 ] × (360 / days_c) × 100 = [ (103.231583 / 101.996264) − 1 ] × (360 / 107) × 100 = [ 0.012110 ] × 3.364486 × 100 = 4.0749%
Quote
Report

Post Reply

Checking account access…
Treasury futures Net Basis / Implied Repo Rate | Forex.com.bd