HEDGEFUND.md

Models / Tokenized assets / token_nav_gap

Token and NAV gap

How wide is the gap between a token's price and its NAV, how much of it can stale NAV explain, and at what size does redemption pay more than the pool?

Measures a token's premium or discount to NAV: mean, stdev, worst, share of days outside the mint and redeem band, AR(1) half-life, and how far NAV can drift unobserved between strikes. Compares exit through a constant-product pool with exit by redemption, and finds the size where they cross. Every number comes from the caller. Not a price, a quote or advice.

The paste-ready promptmodel.md

On these numbers, the gap averages -0.331% with 6.7% of days outside the band, against 1.38% of unobserved NAV drift, redemption pays more above 740.93 tokens, and at 5,000 tokens redemption pays 19,771 more in present value.

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.

Mean premium

-0.3308%

Last point -0.304%.

Stdev of the premium

0.5036%

Over 60 points.

Worst gap

watch

-2.3928%

Worst discount -2.393%, worst premium 0.05%.

Days outside the band

watch

6.667%

4 of 60 days. With one stdev of NAV drift allowed, 0 days.

Half-life of the gap

3.295days

AR(1) slope 0.8103. One day per observation.

NAV drift between strikes, one stdev

watch

1.3848%

Vol 10% over 7 days. The fee band runs -1.137% to +0.637%.

Exit through the pool

watch

468,125

Average price 93.625 against a pool mid of 98.4, slippage 4.853% with the fee.

Exit by redemption, present value

487,897

97.5793 per token from a NAV of 98.7, paid in 10 days. The split into both routes comes to 488,030.

What flips it

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

  1. position_tokens

    740.93tokensnow 5,000

    On these numbers, below this size the pool pays more per token. Above it redemption does, with its fee and settlement carry counted. Neither route is checked as open to this holder.

  2. settle_days

    318.74daysnow 10

    At this size, a settlement this long brings redemption's present value down to what the pool pays. Longer settlement gives the pool the higher value.

  3. redeem_fee_bps

    501.19bpsnow 100

    At this size, a redeem fee this high brings redemption's value down to what the pool pays.

Flags

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

  • watch
    4 of 60 days are outside the band of -1.137% to +0.637%, and none stay outside with one stdev of NAV drift, 1.385%, allowed. On these numbers stale NAV can explain every one of them. outside_band
  • watch
    The -0.304% gap on the last point is inside one stdev of unobserved NAV drift, 1.385%, so this NAV can't show whether the gap is real. gap_inside_nav_drift
  • watch
    The 3.3 day half-life is shorter than the 7 days between strikes, so it can't be told apart from the strike resetting the gap. half_life_inside_strike_cycle
  • watch
    At 5,000 tokens the pool's slippage is 4.85%, and it pays 19,771 less than redemption, which takes 10 days to pay. size_over_pool

What this leaves out

What the formula leaves out, by name.

  • NAV moving between the request and the strike that sets the payment.
  • Other trades in the pool, other pools, and arbitrage while a large exit is under way.
  • Limits on redemption size, minimum redemption size, gates and queues.
  • Transaction costs on the system recording the token, and the risk of a failed settlement.
  • Liquidity providers leaving the pool in a stress, which would make the slippage worse.
  • Whether this holder may acquire, hold, mint, redeem, pledge, sell or transfer this token, or use any pool. Those are legal questions for counsel.
  • Fat tails in the asset: one stdev is only the scale of the drift.
  • Taxes.
What it took as given (8)

What it took as given to get here.

  • Premium uses each day's published NAV, stale or not. A gap between strikes mixes market moves with NAV that hasn't caught up.
  • Stdev is the sample stdev, n - 1. Worst is the largest gap by size, with its sign.
  • Band: the top is mint fee plus carry, the bottom is minus redeem fee and carry. Carry = cash rate * settle_days / 365. The mint fee defaults to the redeem fee. Outside means strictly outside, by more than a billionth of a point, so a price exactly on an edge isn't counted.
  • AR(1) is ordinary least squares with an intercept on all points, in steps of one observation. If NAV changes only on strike days, part of the reversion is the strike resetting the gap, not the market closing it.
  • NAV drift between strikes is one stdev of the asset's lognormal move over the full interval, vol * sqrt(days / 365). The average day is less stale than that.
  • The pool is constant-product. The fee comes off the tokens sold in, before the swap. Slippage is measured against the pool's own mid, y / x, and includes the fee.
  • Redemption pays NAV less the fee after settle_days, discounted at the cash rate, simple, actual/365. With a series, NAV is its last value. With premium_pct only, NAV is the pool's mid / (1 + premium).
  • The split sells into the pool until its marginal price falls to the redemption value, and redeems the rest. It pays at least as much as either route alone.
Premium to NAV with the mint and redeem band%
  • Premium %
  • Band top %
  • Band bottom %
  • Outside the band
-2-10102030405060Day-2.3928%-0.304
The data
Value per token by size of exitPer token
  • Pool average
  • Pool marginal
  • Redemption
8590951K2K3K4K5K6K7K8K9K10KTokens89.3781.2697.58
The data

The gap over the series

MeasureValue
Last premium %-0.304
Mean %-0.3308
Stdev %0.5036
Worst discount %-2.3928
Worst premium %0.05
Band top %0.637
Band bottom %-1.137
Days outside the band4
Days outside the band with one stdev of drift0
AR(1) slope0.8103
Half-life, days3.295

Exit at this size

RouteTokens through the poolTokens redeemedValue per tokenCash valueAgainst NAV %
Pool5,000093.63468,125-5.142
Redemption05,00097.58487,897-1.135
Split at the marginal price369.784,630.2297.61488,030-1.108

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 Premium = (price / NAV - 1) * 100. AR(1): x[t+1] = a + phi x[t], half-life = -ln 2 / ln phi. NAV drift, one stdev = vol * sqrt(days / 365). Pool exit: out = y * q(1 - f) / (x + q(1 - f)). Redemption = NAV * (1 - fee) / (1 + r * settle / 365). Sizes cross at q = y / R - x / (1 - f). The pool's marginal price meets R at q = (sqrt(y x (1 - f) / R) - x) / (1 - f).

inputs_hash 81cce12026441eb5

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/token_nav_gap.md.

prompt.md
# Token and NAV gap: 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.** How wide is the gap between a token's price and its NAV, how much of it can stale NAV explain, and at what size does redemption pay more than the pool?## MethodPremium = (price / NAV - 1) * 100. AR(1): x[t+1] = a + phi x[t], half-life = -ln 2 / ln phi. NAV drift, one stdev = vol * sqrt(days / 365). Pool exit: out = y * q(1 - f) / (x + q(1 - f)). Redemption = NAV * (1 - fee) / (1 + r * settle / 365). Sizes cross at q = y / R - x / (1 - f). The pool's marginal price meets R at q = (sqrt(y x (1 - f) / R) - x) / (1 - f).## Conventions- Premium uses each day's published NAV, stale or not. A gap between strikes mixes market moves with NAV that hasn't caught up.- Stdev is the sample stdev, n - 1. Worst is the largest gap by size, with its sign.- Band: the top is mint fee plus carry, the bottom is minus redeem fee and carry. Carry = cash rate * settle_days / 365. The mint fee defaults to the redeem fee. Outside means strictly outside, by more than a billionth of a point, so a price exactly on an edge isn't counted.- AR(1) is ordinary least squares with an intercept on all points, in steps of one observation. If NAV changes only on strike days, part of the reversion is the strike resetting the gap, not the market closing it.- NAV drift between strikes is one stdev of the asset's lognormal move over the full interval, vol * sqrt(days / 365). The average day is less stale than that.- The pool is constant-product. The fee comes off the tokens sold in, before the swap. Slippage is measured against the pool's own mid, y / x, and includes the fee.- Redemption pays NAV less the fee after settle_days, discounted at the cash rate, simple, actual/365. With a series, NAV is its last value. With premium_pct only, NAV is the pool's mid / (1 + premium).- The split sells into the pool until its marginal price falls to the redemption value, and redeems the rest. It pays at least as much as either route alone.## 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{  "token_prices": [    99.9, 99.85, 99.95, 100.05, 99.95, 99.9, 99.85, 100, 100.05, 99.95,    100, 100.1, 100.05, 99.95, 100.1, 100.15, 100.05, 100.1, 100, 100.1,    100.05, 100.2, 100.1, 99.5, 98.8, 98.2, 97.9, 98, 98.2, 98,    97.8, 97.9, 98, 98.1, 98.05, 98, 98.1, 98.2, 98.25, 98.2,    98.1, 98.15, 98.3, 98.35, 98.3, 98.4, 98.35, 98.3, 98.25, 98.4,    98.5, 98.45, 98.5, 98.45, 98.4, 98.45, 98.55, 98.5, 98.55, 98.4  ],  "nav_values": [    100, 100, 100, 100, 100, 100, 100, 100.1, 100.1, 100.1,    100.1, 100.1, 100.1, 100.1, 100.2, 100.2, 100.2, 100.2, 100.2, 100.2,    100.2, 100.3, 100.3, 100.3, 100.3, 100.3, 100.3, 100.3, 98.5, 98.5,    98.5, 98.5, 98.5, 98.5, 98.5, 98.4, 98.4, 98.4, 98.4, 98.4,    98.4, 98.4, 98.5, 98.5, 98.5, 98.5, 98.5, 98.5, 98.5, 98.6,    98.6, 98.6, 98.6, 98.6, 98.6, 98.6, 98.7, 98.7, 98.7, 98.7  ],  "asset_vol_pct": 10,  "days_between_strikes": 7,  "pool_token_depth": 100000,  "pool_cash_depth": 9840000,  "position_tokens": 5000,  "redeem_fee_bps": 100,  "mint_fee_bps": 50,  "pool_fee_bps": 10,  "settle_days": 10,  "cash_rate_pct": 5}```Work them out with the method above. Yours should match these within 0.5%.- Mean premium: -0.3308 %- Stdev of the premium: 0.5036 %- Worst gap: -2.3928 %- Days outside the band: 6.667 %- Half-life of the gap: 3.295 days- NAV drift between strikes, one stdev: 1.3848 %- Exit through the pool: 468125.1488- Exit by redemption, present value: 487896.6484Where the outcome flips, with the other inputs held:- position_tokens at 740.9288: On these numbers, below this size the pool pays more per token. Above it redemption does, with its fee and settlement carry counted. Neither route is checked as open to this holder.- settle_days at 318.7415: At this size, a settlement this long brings redemption's present value down to what the pool pays. Longer settlement gives the pool the higher value.- redeem_fee_bps at 501.1871: At this size, a redeem fee this high brings redemption's value down to what the pool pays.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:- NAV moving between the request and the strike that sets the payment.- Other trades in the pool, other pools, and arbitrage while a large exit is under way.- Limits on redemption size, minimum redemption size, gates and queues.- Transaction costs on the system recording the token, and the risk of a failed settlement.- Liquidity providers leaving the pool in a stress, which would make the slippage worse.- Whether this holder may acquire, hold, mint, redeem, pledge, sell or transfer this token, or use any pool. Those are legal questions for counsel.- Fat tails in the asset: one stdev is only the scale of the drift.- Taxes.## 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/token_nav_gap/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/token_nav_gap.

terminal
curl -s https://hedgefund.md/api/v1/token_nav_gap \  -H 'content-type: application/json' \  -d '{"token_prices":[99.9,99.85,99.95,100.05,99.95,99.9,99.85,100,100.05,99.95,100,100.1,100.05,99.95,100.1,100.15,100.05,100.1,100,100.1,100.05,100.2,100.1,99.5,98.8,98.2,97.9,98,98.2,98,97.8,97.9,98,98.1,98.05,98,98.1,98.2,98.25,98.2,98.1,98.15,98.3,98.35,98.3,98.4,98.35,98.3,98.25,98.4,98.5,98.45,98.5,98.45,98.4,98.45,98.55,98.5,98.55,98.4],"nav_values":[100,100,100,100,100,100,100,100.1,100.1,100.1,100.1,100.1,100.1,100.1,100.2,100.2,100.2,100.2,100.2,100.2,100.2,100.3,100.3,100.3,100.3,100.3,100.3,100.3,98.5,98.5,98.5,98.5,98.5,98.5,98.5,98.4,98.4,98.4,98.4,98.4,98.4,98.4,98.5,98.5,98.5,98.5,98.5,98.5,98.5,98.6,98.6,98.6,98.6,98.6,98.6,98.6,98.7,98.7,98.7,98.7],"asset_vol_pct":10,"days_between_strikes":7,"pool_token_depth":100000,"pool_cash_depth":9840000,"position_tokens":5000,"redeem_fee_bps":100,"mint_fee_bps":50,"pool_fee_bps":10,"settle_days":10,"cash_rate_pct":5}' \  | jq '{summary, flags, flips, not_modeled, inputs_hash}'

Inputs

InputTypeRangeRequiredWhat it is
token_pricesarray30 to 2000 itemsnoToken price, one per day, oldest first. Send with nav_values, or leave both out and send premium_pct.
nav_valuesarray30 to 2000 itemsnoNAV per token as published, same days and length as token_prices. It may repeat between strikes.
premium_pctnumber-90 to 200noToday's premium to NAV, when no series is sent. -1 means 1% below NAV. NAV is then the pool's price over 1 + premium.
asset_vol_pctnumber0 to 500yesAnnual volatility of the asset under the token. 10 means 10%.
days_between_strikesnumber0 to 400yesDays between NAV strikes. 7 means weekly. 0 means NAV is always fresh.
pool_token_depthnumberover 0 to 10000000000000yesTokens in the constant-product pool.
pool_cash_depthnumberover 0 to 10000000000000yesCash in the constant-product pool.
position_tokensnumberover 0 to 10000000000000yesTokens to exit.
redeem_fee_bpsnumber0 to 5000yesFee to redeem, on NAV. 100 means 1%.
mint_fee_bpsnumber0 to 5000noOptional. Fee to mint, for the top of the band. Default: the redeem fee.
pool_fee_bpsnumber0 to 5000noOptional. Pool fee on tokens sold in. Default 0.
settle_daysnumber0 to 400yesDays from a redemption request to its payment.
cash_rate_pctnumber0 to 50yesRate that money could earn during settlement. 5 means 5%.

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.