HEDGEFUND.md

Models / Tokenized assets / tokenized_bills

T-bill token

When redemptions outrun a T-bill ladder, when do forced sales start, and what do the holders who stay lose?

Values a token backed by a T-bill ladder and cash, gives gross and net yield, then walks a redemption run day by day: maturities in, redemptions paid after settlement, forced sales at the shocked yield and the spread when cash runs short, and the loss on holders who stay. Every number comes from the caller. Not a price, a rating or advice.

The paste-ready promptmodel.md

On these numbers, NAV is 0.999432 per token, and at 3% a day forced sales start on day 2, cost holders who stay 19.3 bps of NAV per token, and forced sales begin at 0.0755% a day.

Hypothetical, and on made-up numbers until you replace them. Nobody traded this, and nothing here is on offer.

Readings

The numbers, with their units.

NAV per token

0.999432

NAV 99,943,241: bills 98,443,241, cash 1,500,000.

Hypothetical net yield on NAV

4.5709%

Gross on NAV 4.871% with cash at zero. The ladder alone is 4.945%. Fees 0.3%.

Weighted days to maturity

watch

108.78days

With cash at zero days. The ladder alone is 110.44 days. After the walk it is 133.62 days, longer because the nearest rungs went first.

First forced sale

breach

2

Requests stop on day 20. The walk runs to day 21 to pay them.

Face sold in forced sales

watch

44,512,387

Proceeds 44,129,062, carrying value 44,260,350. 54.38% of tokens are left.

Loss per remaining token

breach

0.00193181

19.33 bps of starting NAV. Total loss 131,288. A further 0.007113 per token sits unrealized in what is left, at the shocked yields.

No-profit band around NAV

6.2523bps

Fee 5 bps plus carry 1.25 bps. From 0.998808 to 1.000057 per token.

NAV per token at the shocked yields

watch

0.993641

57.95 bps under carrying NAV, before spread.

What flips it

The value of one input where the outcome changes, with the others held.

  1. daily_redemption_pct

    0.0755%now 3

    Forced sales begin above this daily redemption rate. Below it, cash and maturities pay every request.

  2. cash

    82,713,909now 1,500,000

    With this much starting cash, rungs and tokens as sent, no forced sale happens at the sent redemption rate. Cash is then 45.7% of the pool, and more cash lifts NAV and so the redemptions too.

Flags

What went past a line, and what to read before you trust the rest.

  • breach
    Forced sales start on day 2. They raise 44,129,062 from 44,512,387 of face and realize a loss of 131,288. forced_sales
  • watch
    The token pays out in 1 day. The assets have a weighted maturity of 108.8 days, and cash plus rungs maturing inside settlement are 1.5% of NAV. maturity_mismatch
  • watch
    At the shocked yields the assets are worth 57.9 bps under carrying NAV, more than the 5 bps fee. A redemption at carrying NAV moves that gap from holders who stay to holders who leave. stale_nav_transfer

What this leaves out

What the formula leaves out, by name.

  • New mints during the run, and any gate, pause or credit line the issuer could use.
  • Depth: the spread stays the same however much is sold, and one parallel shock hits every rung.
  • Reinvestment: cash from a maturity sits until it's paid out.
  • A pool that strikes NAV at market yields, where leavers would share the shock and the transfer to them shrinks.
  • Where the token itself trades on the secondary market during the run.
  • Taxes on the bills or the token.
  • Failure of the issuer, the custodian or the system recording the token.
  • Whether this holder may acquire, hold, mint, redeem, pledge, sell or transfer this token, or use any pool. Those are legal questions for counsel.
What it took as given (11)

What it took as given to get here.

  • Each rung is valued at face / (1 + y * d / 365): simple interest, actual/365. yield_pct is a money-market yield, so convert a bank discount quote first.
  • Cash earns nothing. Gross yield on NAV counts it at zero, and the ladder's own yield is shown beside it.
  • Fees are a share of NAV a year. They come out of the yield and aren't taken during the walk, so the walk shows the forced sale loss alone.
  • Each day runs in this order: rungs maturing that day pay face, the day's request is struck at that day's NAV per token, then payments due that day go out, with forced sales if cash falls short.
  • A request is daily_redemption_pct of the tokens left that day, so tokens fall geometrically. Requests stop after stress_days. The walk runs settle_days longer so every request is paid.
  • NAV is carried at the original yields the whole way. The shock and the spread reach NAV only when a sale realizes them, so a token leaving at carrying NAV takes no part of a loss not yet realized.
  • A forced sale takes the nearest maturity first, in part if needed, at the shocked yield less half of bid_ask_bps, because a sale crosses from mid to bid. Face sold is grossed up so the proceeds meet the need.
  • A loss falls on tokens still outstanding after that day's request. Loss per remaining token adds each day's loss per token then outstanding, not the total over the tokens left at the end, because tokens that leave later already shared part of it. A token can't lose more than its NAV.
  • The redemption fee goes to the issuer, not the pool, so the pool pays out full NAV per token.
  • Band half-width = mint_redeem_fee + net yield * settle_days / 365, to first order. Neither a minter's cash nor a redeemer's claim earns during settlement. Net yield stands in for the cash rate, floored at zero.
  • The shadow NAV reprices the whole ladder at the shock on day 0, before spread.
Cumulative cash against cumulative redemptionsCumulative money
  • Start cash plus maturities
  • Redemptions due
  • Forced sale proceeds
010M20M30M40M05101520Day1,500,00045,629,062
The data

The ladder

RungDaysFaceYield %ValueShare of NAV %
Bill 30d3015,000,000414,950,84714.96
Bill 60d6020,000,0004.519,853,14119.86
Bill 90d9025,000,000524,695,53524.71
Bill 180d18040,000,0005.538,943,71838.97
Cash01,500,00001,500,0001.5

Forced sales

DayRungDays leftFace soldProceedsCarrying valueLoss
2Bill 30d281,506,3421,498,6911,501,7343,043.19
3Bill 30d272,923,4972,909,1242,914,8725,748.65
4Bill 30d262,835,6272,822,1482,827,5715,422.96
5Bill 30d252,750,3162,737,6902,742,8025,111.41
6Bill 30d242,667,5782,655,7672,660,5814,813.64
7Bill 30d232,316,6392,306,7592,310,8144,055.25
7Bill 60d53272,223269,543270,456912.93
8Bill 60d522,523,6272,499,2212,507,5518,329.48
9Bill 60d512,447,6832,424,4402,432,3897,949.01
10Bill 60d502,373,9202,351,7922,359,3757,583.48
11Bill 60d492,302,3842,281,3262,288,5597,232.7
12Bill 60d482,233,0092,212,9762,219,8736,896.13
13Bill 60d472,165,7302,146,6802,153,2536,573.21
14Bill 60d462,100,4822,082,3742,088,6376,263.44
15Bill 60d452,037,2052,019,9992,025,9655,966.32
16Bill 60d441,543,7381,530,9701,535,4084,438.89
16Bill 90d74434,826428,527430,4621,935.38
17Bill 90d731,928,3871,900,8111,909,2948,482.61
18Bill 90d721,870,2631,843,8671,851,9968,129.38
19Bill 90d711,813,8211,788,5601,796,3497,789.38
20Bill 90d701,759,0851,734,9151,742,3787,462.45
21Bill 90d691,706,0051,682,8831,690,0317,148.12

The hypothetical walk

DayTokens left %RequestedPaid outForced proceedsLossCash at day endNAV per token
010000001,500,0000.999432
1972,998,6910001,500,0000.999564
294.092,909,1242,998,6911,498,6913,043.1900.999667
391.272,822,1482,909,1242,909,1245,748.6500.999741
488.532,737,6902,822,1482,822,1485,422.9600.999819
585.872,655,7672,737,6902,737,6905,111.4100.999899
683.32,576,3022,655,7672,655,7674,813.6400.999981
780.82,499,2212,576,3022,576,3024,968.1701.0001
878.372,424,4402,499,2212,499,2218,329.4801.0001
976.022,351,7922,424,4402,424,4407,949.0101.0001
1073.742,281,3262,351,7922,351,7927,583.4801.0002
1171.532,212,9762,281,3262,281,3267,232.701.0002
1269.382,146,6802,212,9762,212,9766,896.1301.0003
1367.32,082,3742,146,6802,146,6806,573.2101.0003
1465.282,019,9992,082,3742,082,3746,263.4401.0004
1563.331,959,4972,019,9992,019,9995,966.3201.0004
1661.431,900,8111,959,4971,959,4976,374.2801.0005
1759.581,843,8671,900,8111,900,8118,482.6101.0005
1857.81,788,5601,843,8671,843,8678,129.3801.0005
1956.061,734,9151,788,5601,788,5607,789.3801.0005
2054.381,682,8831,734,9151,734,9157,462.4501.0005
2154.3801,682,8831,682,8837,148.1201.0005

Hypothetical, computed from the numbers sent and any stated default, with hindsight. Nobody traded it, and costs and liquidity are only as assumed. Not a forecast, a recommendation, an offer, or a record of real trading. Don't use it to market an investment.

formula Rung value = face / (1 + y * d / 365). NAV = cash + sum of values. Net yield = sum(value * y) / NAV - fees. Forced sale price per face = (1 - bid_ask / 2) / (1 + (y + shock) * days left / 365). Face sold = cash needed / price. Loss = face * (carrying value per face - price). Loss per remaining token adds each day's loss / tokens outstanding that day. Band half-width = fee + net yield * settle_days / 365.

inputs_hash 0eb0af9f1d764e3c

Paste it into your agent

No connection needed. This prompt carries the method, the conventions and what this site's engine gives on the made-up numbers, so your agent can check its own work before it touches real ones. Every prompt, with its hash, is listed at /prompts.json. A copy that stays fixed for this version, for a stack to point at: /v/1.0/models/tokenized_bills.md.

prompt.md
# T-bill token: a prompt from hedgefund.mdPaste this into your AI agent. It needs no connection to hedgefund.md. An agent that can run code should write and run it, and shouldn't work a long series by hand.**Question.** When redemptions outrun a T-bill ladder, when do forced sales start, and what do the holders who stay lose?## MethodRung value = face / (1 + y * d / 365). NAV = cash + sum of values. Net yield = sum(value * y) / NAV - fees. Forced sale price per face = (1 - bid_ask / 2) / (1 + (y + shock) * days left / 365). Face sold = cash needed / price. Loss = face * (carrying value per face - price). Loss per remaining token adds each day's loss / tokens outstanding that day. Band half-width = fee + net yield * settle_days / 365.## Conventions- Each rung is valued at face / (1 + y * d / 365): simple interest, actual/365. yield_pct is a money-market yield, so convert a bank discount quote first.- Cash earns nothing. Gross yield on NAV counts it at zero, and the ladder's own yield is shown beside it.- Fees are a share of NAV a year. They come out of the yield and aren't taken during the walk, so the walk shows the forced sale loss alone.- Each day runs in this order: rungs maturing that day pay face, the day's request is struck at that day's NAV per token, then payments due that day go out, with forced sales if cash falls short.- A request is daily_redemption_pct of the tokens left that day, so tokens fall geometrically. Requests stop after stress_days. The walk runs settle_days longer so every request is paid.- NAV is carried at the original yields the whole way. The shock and the spread reach NAV only when a sale realizes them, so a token leaving at carrying NAV takes no part of a loss not yet realized.- A forced sale takes the nearest maturity first, in part if needed, at the shocked yield less half of bid_ask_bps, because a sale crosses from mid to bid. Face sold is grossed up so the proceeds meet the need.- A loss falls on tokens still outstanding after that day's request. Loss per remaining token adds each day's loss per token then outstanding, not the total over the tokens left at the end, because tokens that leave later already shared part of it. A token can't lose more than its NAV.- The redemption fee goes to the issuer, not the pool, so the pool pays out full NAV per token.- Band half-width = mint_redeem_fee + net yield * settle_days / 365, to first order. Neither a minter's cash nor a redeemer's claim earns during settlement. Net yield stands in for the cash rate, floored at zero.- The shadow NAV reprices the whole ladder at the shock on day 0, before spread.## Step 1: check your method on these made-up numbersThe numbers and names below are made up. They aren't market levels, typical values or anyone's real figures.```json{  "rungs": [    { "days": 30, "face": 15000000, "yield_pct": 4 },    { "days": 60, "face": 20000000, "yield_pct": 4.5 },    { "days": 90, "face": 25000000, "yield_pct": 5 },    { "days": 180, "face": 40000000, "yield_pct": 5.5 }  ],  "cash": 1500000,  "tokens_outstanding": 100000000,  "mgmt_fee_bps": 20,  "admin_custody_bps": 10,  "mint_redeem_fee_bps": 5,  "settle_days": 1,  "daily_redemption_pct": 3,  "stress_days": 20,  "rate_shock_bps": 200,  "bid_ask_bps": 10}```Work them out with the method above. Yours should match these within 0.5%.- NAV per token: 0.999432- Hypothetical net yield on NAV: 4.5709 %- Weighted days to maturity: 108.78 days- First forced sale: 2- Face sold in forced sales: 44512386.78- Loss per remaining token: 0.00193181- No-profit band around NAV: 6.2523 bps- NAV per token at the shocked yields: 0.993641Where the outcome flips, with the other inputs held:- daily_redemption_pct at 0.0755: Forced sales begin above this daily redemption rate. Below it, cash and maturities pay every request.- cash at 82713909.49: With this much starting cash, rungs and tokens as sent, no forced sale happens at the sent redemption rate. Cash is then 45.7% of the pool, and more cash lifts NAV and so the redemptions too.If yours differ, stop and tell the person which ones and by how much. Don't go on to real numbers until they match, or until the person has seen the difference. These values come from one engine and can be wrong too.## Step 2: run it on the person's numbersReplace every input with the person's own. Ask for any number you don't have, and don't invent one.## Step 3: reportGive one sentence beginning "On these numbers,", then the values, then where the outcome flips. Always add what this leaves out:- New mints during the run, and any gate, pause or credit line the issuer could use.- Depth: the spread stays the same however much is sold, and one parallel shock hits every rung.- Reinvestment: cash from a maturity sits until it's paid out.- A pool that strikes NAV at market yields, where leavers would share the shock and the transfer to them shrinks.- Where the token itself trades on the secondary market during the run.- Taxes on the bills or the token.- Failure of the issuer, the custodian or the system recording the token.- Whether this holder may acquire, hold, mint, redeem, pledge, sell or transfer this token, or use any pool. Those are legal questions for counsel.## LimitsResults are hypothetical: arithmetic on the numbers given, prepared with hindsight. Nobody achieved them, and costs and liquidity are only as assumed. They aren't a forecast, a recommendation, an offer or a record of real trading. Don't say what to buy, sell or hold, and don't use them to market an investment. Whether a person may hold or trade an instrument is a legal question for counsel.Provided as is, at your own risk, by hedgefund.md, which is not a fund and isn't anyone's adviser. Version 1.0. Source: https://hedgefund.md/models/tokenized_bills/prompt.md. Terms: https://hedgefund.md/terms

Call it

The same code answers on this page, over HTTP, over MCP and on your own machine, and the same inputs give the same bytes. No key, and nothing is stored. Send positions by POST or run the library, because a URL can land in a server log. model.md holds all of this for your agent.

POST the inputs to /api/v1/tokenized_bills.

terminal
curl -s https://hedgefund.md/api/v1/tokenized_bills \  -H 'content-type: application/json' \  -d '{"rungs":[{"days":30,"face":15000000,"yield_pct":4},{"days":60,"face":20000000,"yield_pct":4.5},{"days":90,"face":25000000,"yield_pct":5},{"days":180,"face":40000000,"yield_pct":5.5}],"cash":1500000,"tokens_outstanding":100000000,"mgmt_fee_bps":20,"admin_custody_bps":10,"mint_redeem_fee_bps":5,"settle_days":1,"daily_redemption_pct":3,"stress_days":20,"rate_shock_bps":200,"bid_ask_bps":10}' \  | jq '{summary, flags, flips, not_modeled, inputs_hash}'

Inputs

InputTypeRangeRequiredWhat it is
rungsarray0 to 60 itemsyesThe T-bill ladder. Up to 60 rungs. Empty if the pool holds only cash.
rungs[].dayswhole number1 to 730yesDays to maturity.
rungs[].facenumberover 0 to 10000000000000yesFace value paid at maturity.
rungs[].yield_pctnumber0 to 50yesMoney-market yield, simple, actual/365. 5 means 5%. Not a bank discount rate.
cashnumber0 to 10000000000000yesCash in the pool. It earns nothing here.
tokens_outstandingnumberover 0 to 10000000000000yesTokens outstanding.
mgmt_fee_bpsnumber0 to 1000yesManagement fee a year on NAV. 20 means 0.20%.
admin_custody_bpsnumber0 to 1000yesAdmin and custody cost a year on NAV. 10 means 0.10%.
mint_redeem_fee_bpsnumber0 to 1000yesFee to mint or to redeem, on NAV. 5 means 0.05%.
settle_dayswhole number0 to 60yesDays from a request to its payment. 0 pays the same day.
daily_redemption_pctnumber0 to 100yesShare of the tokens left that ask out each day. 3 means 3%.
stress_dayswhole number1 to 365yesDays on which requests arrive.
rate_shock_bpsnumber0 to 5000yesRise in every rung's yield at a forced sale. 200 means 2 points.
bid_ask_bpsnumber0 to 1000yesFull bid-ask width in price. A sale gives up half of it.

Hypothetical, and on made-up numbers until you replace them. Nobody traded this, and nothing here is on offer.

1.0Use at your own risk: hedgefund.md is not a fund, not an offer of any security, token or fund interest, and not advice. Results are hypothetical, may be wrong, and are not a record of real trading. Don't use them to market an investment. See the terms.