Server definition
- Hash
- sha256:eb9bb4223bdaee1e95e53f8e29415f87138390ba668740bf5882a60741b5b268
- What it is
- What a remote MCP server returned when asked what it offers: 22 tools
The blob, as servednamed by its sha256
{
"instructions": "Measures an investment portfolio from its price history: how many independent bets it really holds, which holding carries the risk, what it owns through its funds, and what past crises did to that money. Descriptive only: no forecast, no buy/sell/hold advice, no score of how good a portfolio is. Call `measure_portfolio` with the holdings as {ticker: weight or amount}; use `validate_symbols` or `search_symbols` first when a ticker is uncertain. When only one question is asked (just the crises, just the funds' companies…), the narrower tools answer it with less.\n\nDescriptive. No forecast, no advice. Every figure is measured over the window named beside it, from end-of-day prices. Nothing here predicts a price, a return or a probability, and nothing here says what to buy, sell or hold.\n\n**Instructions for the assistant reading this.**\n\n1. Use only the figures listed under \"The numbers\". Do not estimate, infer, or\n supply any figure that is not in that list.\n2. Do not forecast returns, losses, prices, or probabilities of either. Nothing\n in this report supports that, and the analysis behind it was built\n specifically to avoid the claim.\n3. Do not recommend buying, selling, or holding any security, and do not suggest\n an allocation. If asked what to do, say the report does not answer that, and\n describe what it does show instead.\n4. When a figure carries a stated limit, repeat that limit whenever you use the\n figure.\n5. If a question cannot be answered from these figures, say so plainly rather\n than reasoning around the gap.",
"tools": [
{
"description": "One fund or share on its own, no portfolio needed: name, type, exchange,\n yearly cost when published, its measured return, volatility and worst\n fall, and for a fund its largest holdings and sectors.",
"inputSchema": {
"properties": {
"ticker": {
"description": "One ticker, as the exchange lists it.",
"maxLength": 20,
"title": "Ticker",
"type": "string"
}
},
"required": [
"ticker"
],
"title": "asset_infoArguments",
"type": "object"
},
"name": "asset_info",
"outputSchema": {
"description": "One fund or share.",
"properties": {
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"fund": {
"description": "For a fund: is_fund, holdings ([symbol, weight] pairs), sectors."
},
"meta": {
"description": "name, type, category, expense_ratio, currency, exchange, fund_family, total_assets, sector, isin."
},
"stats": {
"description": "last, ret_1y, vol, max_drawdown, years, start, end."
},
"ticker": {
"description": "Ticker.",
"type": [
"string",
"null"
]
}
},
"required": [
"ticker"
],
"type": "object"
}
},
{
"description": "Before adding one new holding, with a given amount, to an existing portfolio:\n how much of it is already owned through the current funds (from the\n fund's SEC filing when there is one), whether it adds an independent\n bet, and what past crises would have done with it included. For any\n other change (removing, reweighting, several at once), test_a_change.\n Counterfactual; never says whether to buy.",
"inputSchema": {
"properties": {
"add": {
"description": "The one ticker being considered.",
"maxLength": 20,
"title": "Add",
"type": "string"
},
"amount": {
"description": "How much of it, in the same units as `holdings` (money when holdings are amounts).",
"exclusiveMinimum": 0,
"title": "Amount",
"type": "number"
},
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"holdings": {
"additionalProperties": {
"type": "number"
},
"description": "What is held: {ticker: weight or amount}. Weights need not sum to one; amounts in the base currency are also accepted (then the crises are shown in money). 1 to 100 holdings. Tickers as the exchange lists them (VOO, VWCE.DE, XAW.TO; 'CASH.USD' for cash).",
"title": "Holdings",
"type": "object"
}
},
"required": [
"holdings",
"add",
"amount"
],
"title": "check_before_you_buyArguments",
"type": "object"
},
"name": "check_before_you_buy",
"outputSchema": {
"description": "One addition measured on the portfolio it would join (counterfactual).",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"add": {
"description": "The ticker considered.",
"type": [
"string",
"null"
]
},
"amount": {
"description": "How much of it.",
"type": [
"number",
"null"
]
},
"bets": {
"description": "Independent bets before and after."
},
"crises": {
"description": "Per past crisis: fall before and after, as fractions."
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"overlap": {
"description": "How much of it is already owned: kind (fund, stock, opaque); for a fund already_share (share of its money in companies already held), seen_share, shared ([company, weight in it, weight in the portfolio]), source, as_of; for a stock already (share of the portfolio) and via."
},
"top_risk": {
"description": "The holding carrying the most risk, and its share, before and after."
},
"total_after": {
"description": "Portfolio size after.",
"type": [
"number",
"null"
]
},
"total_before": {
"description": "Portfolio size before.",
"type": [
"number",
"null"
]
},
"window": {
"description": "The shared price window."
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "Two to eight separate portfolios (not a change to one) measured over one\n shared window of price history: growth, volatility, worst fall, and\n how each moved against the others. For a before-and-after of one\n portfolio, test_a_change. Says what each was; does not say which to\n hold.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"portfolios": {
"additionalProperties": {
"additionalProperties": {
"type": "number"
},
"type": "object"
},
"description": "Two to eight portfolios, {label: {ticker: weight}}. Labels are shortened to letters and digits.",
"title": "Portfolios",
"type": "object"
}
},
"required": [
"portfolios"
],
"title": "compare_portfoliosArguments",
"type": "object"
},
"name": "compare_portfolios",
"outputSchema": {
"description": "Up to eight portfolios measured on one shared window.",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"correlation": {
"description": "Per pair of labels: how the portfolios moved together."
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"end": {
"description": "Shared window end.",
"type": [
"string",
"null"
]
},
"metrics": {
"description": "Per portfolio label: growth, volatility, worst fall and related figures."
},
"series": {
"description": "Per portfolio label: the growth path over the window."
},
"start": {
"description": "Shared window start.",
"type": [
"string",
"null"
]
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "For a portfolio held in one currency but priced partly in others: how much of\n it is outside the base currency, and what exchange-rate moves added to\n its growth, volatility and worst fall compared with the same holdings\n currency-hedged. Needs base set to the holder's currency to mean\n anything.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"holdings": {
"additionalProperties": {
"type": "number"
},
"description": "What is held: {ticker: weight or amount}. Weights need not sum to one; amounts in the base currency are also accepted (then the crises are shown in money). 1 to 100 holdings. Tickers as the exchange lists them (VOO, VWCE.DE, XAW.TO; 'CASH.USD' for cash).",
"title": "Holdings",
"type": "object"
}
},
"required": [
"holdings"
],
"title": "currency_effectArguments",
"type": "object"
},
"name": "currency_effect",
"outputSchema": {
"description": "What exchange rates did to the portfolio, seen from the base currency.",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"base": {
"description": "Base currency.",
"type": [
"string",
"null"
]
},
"by_currency": {
"description": "[currency, share of the money] pairs, by listing currency."
},
"cagr_from_currency": {
"description": "Growth per year added (or removed) by exchange rates.",
"type": [
"number",
"null"
]
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"foreign_share": {
"description": "Share of the money priced outside the base currency.",
"type": [
"number",
"null"
]
},
"headline": {
"description": "One sentence summary.",
"type": [
"string",
"null"
]
},
"hedged": {
"description": "The same with the currency moves removed."
},
"limitations": {
"description": "What this cannot show (listing currency is not earning currency)."
},
"share_of_vol": {
"description": "Share of the volatility that comes from exchange rates.",
"type": [
"number",
"null"
]
},
"unhedged": {
"description": "Growth, volatility and worst fall as held."
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "How one portfolio's daily moves line up with four common patterns (the market,\n small versus large companies, value versus growth, momentum), which of\n those sensitivities are distinguishable from zero, and how much of the\n movement the patterns explain.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"holdings": {
"additionalProperties": {
"type": "number"
},
"description": "What is held: {ticker: weight or amount}. Weights need not sum to one; amounts in the base currency are also accepted (then the crises are shown in money). 1 to 100 holdings. Tickers as the exchange lists them (VOO, VWCE.DE, XAW.TO; 'CASH.USD' for cash).",
"title": "Holdings",
"type": "object"
}
},
"required": [
"holdings"
],
"title": "factor_exposureArguments",
"type": "object"
},
"name": "factor_exposure",
"outputSchema": {
"description": "A four-factor regression of the portfolio's daily returns.",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"alpha_annual": {
"description": "Return not explained by the factors, per year (estimated, not a skill measure).",
"type": [
"number",
"null"
]
},
"betas": {
"description": "Sensitivity per factor: mkt_rf (market), smb (small minus big), hml (value minus growth), mom (momentum)."
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"fit_caveat": {
"description": "Why the fit is poor, when it is.",
"type": [
"string",
"null"
]
},
"frequency": {
"description": "Data frequency.",
"type": [
"string",
"null"
]
},
"model": {
"description": "Factor model used.",
"type": [
"string",
"null"
]
},
"poor_fit": {
"description": "True when the factors explain little.",
"type": [
"boolean",
"null"
]
},
"r_squared": {
"description": "Share of the daily movement the factors explain, 0 to 1.",
"type": [
"number",
"null"
]
},
"t_stats": {
"description": "t-statistic per factor; below about 2 in size, not distinguishable from zero."
},
"years": {
"description": "Years of history used.",
"type": [
"number",
"null"
]
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "One portfolio answered along three separate questions (what is its risk built\n from, how did it behave when markets broke, what did it pay for the\n risk taken), each with its own reading and figures. For whether\n anything is off in how it is built, rather than what it is. Readings,\n not a grade: no overall score is returned.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"holdings": {
"additionalProperties": {
"type": "number"
},
"description": "What is held: {ticker: weight or amount}. Weights need not sum to one; amounts in the base currency are also accepted (then the crises are shown in money). 1 to 100 holdings. Tickers as the exchange lists them (VOO, VWCE.DE, XAW.TO; 'CASH.USD' for cash).",
"title": "Holdings",
"type": "object"
}
},
"required": [
"holdings"
],
"title": "health_axesArguments",
"type": "object"
},
"name": "health_axes",
"outputSchema": {
"description": "The portfolio along separate axes; readings, no overall score.",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"axes": {
"description": "Per axis: key, label, the question it answers, band, kind, drivers (each with label, value, unit and a plain reading)."
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"headline": {
"description": "One sentence across the axes.",
"type": [
"string",
"null"
]
},
"inputs": {
"description": "What was measured: holdings, window, what was left out."
},
"kinds": {
"description": "What each kind of figure means (observed, replayed, estimated…)."
},
"limitations": {
"description": "What these axes cannot show."
},
"subscores": {
"description": "The individual measured readings behind the axes."
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "The latest daily close for each ticker, in the base currency and in its own,\n with the date, for turning a number of shares into an amount. A single\n figure per ticker; no price history is returned.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"tickers": {
"description": "Tickers, up to 50.",
"items": {
"type": "string"
},
"maxItems": 50,
"title": "Tickers",
"type": "array"
}
},
"required": [
"tickers"
],
"title": "last_priceArguments",
"type": "object"
},
"name": "last_price",
"outputSchema": {
"description": "Latest close per ticker; single figures, no history.",
"properties": {
"as_of": {
"description": "Date of the close.",
"type": [
"string",
"null"
]
},
"base": {
"description": "Base currency.",
"type": [
"string",
"null"
]
},
"currencies": {
"description": "Per ticker: its trading currency."
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"native_prices": {
"description": "Per ticker: latest close in its own currency."
},
"prices": {
"description": "Per ticker: latest close in the base currency."
}
},
"required": [
"prices"
],
"type": "object"
}
},
{
"description": "For someone living off a portfolio: replays a yearly withdrawal, raised with\n real inflation, from every start month the portfolio's own history\n allows; how many starts lasted the full span, how many ran out and\n when, the lowest point from the worst start, and the highest yearly\n rate that ran out from no start in the record. Replayed, not\n simulated; a count of starts, never a probability; a span the record\n is too short for is said, not invented.",
"inputSchema": {
"properties": {
"amount": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "How much is in the portfolio, when `holdings` are weights rather than money.",
"title": "Amount"
},
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"holdings": {
"additionalProperties": {
"type": "number"
},
"description": "What is held: {ticker: weight or amount}. Weights need not sum to one; amounts in the base currency are also accepted (then the crises are shown in money). 1 to 100 holdings. Tickers as the exchange lists them (VOO, VWCE.DE, XAW.TO; 'CASH.USD' for cash).",
"title": "Holdings",
"type": "object"
},
"withdrawal": {
"description": "Taken each year, in today's money; raised with the real price index of the base currency.",
"exclusiveMinimum": 0,
"title": "Withdrawal",
"type": "number"
},
"years": {
"default": 30,
"description": "How many years, 5 to 50.",
"maximum": 50,
"minimum": 5,
"title": "Years",
"type": "integer"
}
},
"required": [
"holdings",
"withdrawal"
],
"title": "living_off_itArguments",
"type": "object"
},
"name": "living_off_it",
"outputSchema": {
"description": "Withdrawals replayed on the portfolio's own monthly history (replayed).",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"amount": {
"description": "Money in the portfolio at each start.",
"type": [
"number",
"null"
]
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"inflation": {
"description": "Price index used: source, last_published, assumed."
},
"n_complete": {
"description": "Starts old enough for the full span.",
"type": [
"number",
"null"
]
},
"n_complete_lasted": {
"description": "Of those, how many lasted.",
"type": [
"number",
"null"
]
},
"n_going": {
"description": "Recent starts not run out so far, span not over.",
"type": [
"number",
"null"
]
},
"n_ran_out": {
"description": "Starts, complete or not, where the money ran out.",
"type": [
"number",
"null"
]
},
"n_starts": {
"description": "Starts followed (at least a year).",
"type": [
"number",
"null"
]
},
"rate": {
"description": "withdrawal / amount.",
"type": [
"number",
"null"
]
},
"record": {
"description": "start, end and years of the shared monthly record."
},
"safe_rate": {
"description": "Highest yearly rate that ran out from no start; null if no start is complete.",
"type": [
"number",
"null"
]
},
"starts": {
"description": "A sample of starts (every sixth): start, complete, months, ran_out, low_real, end_real."
},
"testable_years": {
"description": "The longest span the record can test in full.",
"type": [
"number",
"null"
]
},
"withdrawal": {
"description": "Taken each year, in start-month money, raised with prices.",
"type": [
"number",
"null"
]
},
"worst": {
"description": "The worst start: start, ran_out, months, low_real, low_at, end_real."
},
"years": {
"description": "Span asked for.",
"type": [
"number",
"null"
]
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "Only the companies owned through the funds of one portfolio, added up across\n funds: the largest names and their share of the whole portfolio, names\n reached through more than one fund, sectors, and how much of the money\n this view covers. Figures are minimums: funds publish their largest\n holdings.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"holdings": {
"additionalProperties": {
"type": "number"
},
"description": "What is held: {ticker: weight or amount}. Weights need not sum to one; amounts in the base currency are also accepted (then the crises are shown in money). 1 to 100 holdings. Tickers as the exchange lists them (VOO, VWCE.DE, XAW.TO; 'CASH.USD' for cash).",
"title": "Holdings",
"type": "object"
}
},
"required": [
"holdings"
],
"title": "look_throughArguments",
"type": "object"
},
"name": "look_through",
"outputSchema": {
"description": "What the portfolio owns through its funds.",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"covered_fraction": {
"description": "Share of the money whose underlying holdings are visible, 0 to 1.",
"type": [
"number",
"null"
]
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"duplicated_exposure": {
"description": "Share held more than once through different funds.",
"type": [
"number",
"null"
]
},
"exposures": {
"description": "[company, share of the whole portfolio] pairs, largest first."
},
"n_companies": {
"description": "Distinct companies seen underneath.",
"type": [
"number",
"null"
]
},
"n_funds": {
"description": "Funds looked through.",
"type": [
"number",
"null"
]
},
"opaque": {
"description": "Holdings with no breakdown to look through."
},
"refused": {
"description": "Funds whose breakdown the data vendor refused."
},
"sectors": {
"description": "[sector, share] pairs."
},
"top_symbol": {
"description": "The largest single company underneath.",
"type": [
"string",
"null"
]
},
"top_symbol_weight": {
"description": "Its share of the whole portfolio.",
"type": [
"number",
"null"
]
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "The complete measurement of one portfolio in a single call: how many\n independent bets it holds, which holding carries risk out of line with\n its money, the companies owned through its funds (with how much of the\n money that view covers), what past crises did to it in money and how\n long it took to come back, and the numbered report. Each part is also\n available on its own, faster: portfolio_structure, look_through,\n past_crises, portfolio_report. Descriptive: no forecast, no advice.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"holdings": {
"additionalProperties": {
"type": "number"
},
"description": "What is held: {ticker: weight or amount}. Weights need not sum to one; amounts in the base currency are also accepted (then the crises are shown in money). 1 to 100 holdings. Tickers as the exchange lists them (VOO, VWCE.DE, XAW.TO; 'CASH.USD' for cash).",
"title": "Holdings",
"type": "object"
}
},
"required": [
"holdings"
],
"title": "measure_portfolioArguments",
"type": "object"
},
"name": "measure_portfolio",
"outputSchema": {
"description": "The full measurement of one portfolio.",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"lookthrough": {
"description": "What the portfolio owns through its funds.",
"properties": {
"covered_fraction": {
"description": "Share of the money whose underlying holdings are visible, 0 to 1.",
"type": [
"number",
"null"
]
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"duplicated_exposure": {
"description": "Share held more than once through different funds.",
"type": [
"number",
"null"
]
},
"exposures": {
"description": "[company, share of the whole portfolio] pairs, largest first."
},
"n_companies": {
"description": "Distinct companies seen underneath.",
"type": [
"number",
"null"
]
},
"n_funds": {
"description": "Funds looked through.",
"type": [
"number",
"null"
]
},
"opaque": {
"description": "Holdings with no breakdown to look through."
},
"refused": {
"description": "Funds whose breakdown the data vendor refused."
},
"sectors": {
"description": "[sector, share] pairs."
},
"top_symbol": {
"description": "The largest single company underneath.",
"type": [
"string",
"null"
]
},
"top_symbol_weight": {
"description": "Its share of the whole portfolio.",
"type": [
"number",
"null"
]
}
}
},
"report": {
"description": "The numbered report: every figure beside its method.",
"properties": {
"end": {
"description": "Window end.",
"type": [
"string",
"null"
]
},
"facts": {
"description": "One entry per figure: id, label, value, method, window, limit."
},
"markdown": {
"description": "The report as markdown, figures numbered F1, F2…",
"type": [
"string",
"null"
]
},
"receipt": {
"description": "A short plain-text receipt of the same figures.",
"type": [
"string",
"null"
]
},
"start": {
"description": "Window start.",
"type": [
"string",
"null"
]
}
}
},
"stress": {
"description": "What past crises did to this mix, replayed on its holdings.",
"properties": {
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"limited_by": {
"description": "The holding whose short history limits the window.",
"type": [
"string",
"null"
]
},
"scenarios": {
"description": "One entry per crisis.",
"items": {
"properties": {
"end": {
"description": "Window end.",
"type": [
"string",
"null"
]
},
"max_drawdown": {
"description": "Worst peak-to-trough fall.",
"type": [
"number",
"null"
]
},
"recovery_days": {
"description": "Days to recover the previous peak; null if not yet.",
"type": [
"number",
"null"
]
},
"scenario": {
"description": "Crisis name.",
"type": [
"string",
"null"
]
},
"start": {
"description": "Window start.",
"type": [
"string",
"null"
]
},
"status": {
"description": "Whether the holdings' history covers it.",
"type": [
"string",
"null"
]
},
"total_return": {
"description": "Return over the crisis window.",
"type": [
"number",
"null"
]
},
"worst_day": {
"description": "Worst single day.",
"type": [
"number",
"null"
]
}
},
"type": "object"
},
"type": [
"array",
"null"
]
},
"window_start": {
"description": "First date all holdings have prices.",
"type": [
"string",
"null"
]
}
}
},
"structure": {
"description": "How many independent bets the holdings add up to and who carries the risk.",
"properties": {
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"effective_bets": {
"description": "Effective number of independent bets (from correlations, not the ticker count).",
"type": [
"number",
"null"
]
},
"max_risk_contribution": {
"description": "That holding's share of the risk, 0 to 1.",
"type": [
"number",
"null"
]
},
"max_risk_ticker": {
"description": "The holding carrying the largest share of the portfolio's risk.",
"type": [
"string",
"null"
]
},
"max_weight": {
"description": "Its share of the money, 0 to 1.",
"type": [
"number",
"null"
]
},
"max_weight_ticker": {
"description": "The largest holding by money.",
"type": [
"string",
"null"
]
},
"n_holdings": {
"description": "Holdings measured.",
"type": [
"number",
"null"
]
},
"recent": {
"description": "The same figures over the recent years only."
},
"risk_contributions": {
"description": "[ticker, share of risk] pairs."
},
"top_factor_share": {
"description": "Share of the movement explained by the single strongest common factor.",
"type": [
"number",
"null"
]
}
}
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "Only past crises for one portfolio: 2008, 2020, 2022 and others inside its\n price history, with the fall, the worst day and the days it took to\n come back, in money when amounts are given. Crises before a holding\n existed are named as not tested. Measured, not forecast.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"holdings": {
"additionalProperties": {
"type": "number"
},
"description": "What is held: {ticker: weight or amount}. Weights need not sum to one; amounts in the base currency are also accepted (then the crises are shown in money). 1 to 100 holdings. Tickers as the exchange lists them (VOO, VWCE.DE, XAW.TO; 'CASH.USD' for cash).",
"title": "Holdings",
"type": "object"
}
},
"required": [
"holdings"
],
"title": "past_crisesArguments",
"type": "object"
},
"name": "past_crises",
"outputSchema": {
"description": "What past crises did to this mix, replayed on its holdings.",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"limited_by": {
"description": "The holding whose short history limits the window.",
"type": [
"string",
"null"
]
},
"scenarios": {
"description": "One entry per crisis.",
"items": {
"properties": {
"end": {
"description": "Window end.",
"type": [
"string",
"null"
]
},
"max_drawdown": {
"description": "Worst peak-to-trough fall.",
"type": [
"number",
"null"
]
},
"recovery_days": {
"description": "Days to recover the previous peak; null if not yet.",
"type": [
"number",
"null"
]
},
"scenario": {
"description": "Crisis name.",
"type": [
"string",
"null"
]
},
"start": {
"description": "Window start.",
"type": [
"string",
"null"
]
},
"status": {
"description": "Whether the holdings' history covers it.",
"type": [
"string",
"null"
]
},
"total_return": {
"description": "Return over the crisis window.",
"type": [
"number",
"null"
]
},
"worst_day": {
"description": "Worst single day.",
"type": [
"number",
"null"
]
}
},
"type": "object"
},
"type": [
"array",
"null"
]
},
"window_start": {
"description": "First date all holdings have prices.",
"type": [
"string",
"null"
]
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "Three or four plain-language sentences about one portfolio (what its risk is\n built from and its worst historical fall), each with the window it\n rests on. The shortest and fastest answer, with no tables and no\n numbered report; every figure is in measure_portfolio.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"holdings": {
"additionalProperties": {
"type": "number"
},
"description": "What is held: {ticker: weight or amount}. Weights need not sum to one; amounts in the base currency are also accepted (then the crises are shown in money). 1 to 100 holdings. Tickers as the exchange lists them (VOO, VWCE.DE, XAW.TO; 'CASH.USD' for cash).",
"title": "Holdings",
"type": "object"
}
},
"required": [
"holdings"
],
"title": "plain_findingsArguments",
"type": "object"
},
"name": "plain_findings",
"outputSchema": {
"description": "A few findings in plain words, each with its evidence.",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"insights": {
"description": "Per finding: key, title, detail, severity (info or warning), evidence."
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "Only the written report on one portfolio: every figure numbered F1, F2...\n beside the method and window behind it, so each can be quoted by its\n number. The same report measure_portfolio includes, without the other\n sections.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"holdings": {
"additionalProperties": {
"type": "number"
},
"description": "What is held: {ticker: weight or amount}. Weights need not sum to one; amounts in the base currency are also accepted (then the crises are shown in money). 1 to 100 holdings. Tickers as the exchange lists them (VOO, VWCE.DE, XAW.TO; 'CASH.USD' for cash).",
"title": "Holdings",
"type": "object"
}
},
"required": [
"holdings"
],
"title": "portfolio_reportArguments",
"type": "object"
},
"name": "portfolio_report",
"outputSchema": {
"description": "The numbered report: every figure beside its method.",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"end": {
"description": "Window end.",
"type": [
"string",
"null"
]
},
"facts": {
"description": "One entry per figure: id, label, value, method, window, limit."
},
"markdown": {
"description": "The report as markdown, figures numbered F1, F2…",
"type": [
"string",
"null"
]
},
"receipt": {
"description": "A short plain-text receipt of the same figures.",
"type": [
"string",
"null"
]
},
"start": {
"description": "Window start.",
"type": [
"string",
"null"
]
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "Only the structure of one portfolio: how many independent bets its holdings\n add up to (from how their prices moved, not how many tickers there\n are), and each holding's share of the risk beside its share of the\n money, over the full record and over recent years.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"holdings": {
"additionalProperties": {
"type": "number"
},
"description": "What is held: {ticker: weight or amount}. Weights need not sum to one; amounts in the base currency are also accepted (then the crises are shown in money). 1 to 100 holdings. Tickers as the exchange lists them (VOO, VWCE.DE, XAW.TO; 'CASH.USD' for cash).",
"title": "Holdings",
"type": "object"
}
},
"required": [
"holdings"
],
"title": "portfolio_structureArguments",
"type": "object"
},
"name": "portfolio_structure",
"outputSchema": {
"description": "How many independent bets the holdings add up to and who carries the risk.",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"effective_bets": {
"description": "Effective number of independent bets (from correlations, not the ticker count).",
"type": [
"number",
"null"
]
},
"max_risk_contribution": {
"description": "That holding's share of the risk, 0 to 1.",
"type": [
"number",
"null"
]
},
"max_risk_ticker": {
"description": "The holding carrying the largest share of the portfolio's risk.",
"type": [
"string",
"null"
]
},
"max_weight": {
"description": "Its share of the money, 0 to 1.",
"type": [
"number",
"null"
]
},
"max_weight_ticker": {
"description": "The largest holding by money.",
"type": [
"string",
"null"
]
},
"n_holdings": {
"description": "Holdings measured.",
"type": [
"number",
"null"
]
},
"recent": {
"description": "The same figures over the recent years only."
},
"risk_contributions": {
"description": "[ticker, share of risk] pairs."
},
"top_factor_share": {
"description": "Share of the movement explained by the single strongest common factor.",
"type": [
"number",
"null"
]
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "What one portfolio returned over its record: growth per year (and after\n inflation), best and worst months and years, the range of any 12\n months in a row, monthly returns by year, and how far the weights\n drift between rebalances. Past record, not a forecast.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"holdings": {
"additionalProperties": {
"type": "number"
},
"description": "What is held: {ticker: weight or amount}. Weights need not sum to one; amounts in the base currency are also accepted (then the crises are shown in money). 1 to 100 holdings. Tickers as the exchange lists them (VOO, VWCE.DE, XAW.TO; 'CASH.USD' for cash).",
"title": "Holdings",
"type": "object"
}
},
"required": [
"holdings"
],
"title": "return_historyArguments",
"type": "object"
},
"name": "return_history",
"outputSchema": {
"description": "The mix's record: yearly and monthly returns, rolling 12 months, drift.",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"cagr": {
"description": "Growth per year over the record.",
"type": [
"number",
"null"
]
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"distribution": {
"description": "Histogram of monthly returns: centers, counts."
},
"drift": {
"description": "Per holding: target weight and how far it drifted between rebalances."
},
"grid": {
"description": "Monthly returns: one row per year, null where the record has no month."
},
"months": {
"description": "Month names, aligned with each row of `grid`."
},
"rolling_stats": {
"description": "Any 12 months in a row: min, max, percentiles, share negative."
},
"stats": {
"description": "best_month, worst_month, best_year, worst_year, pct_positive, n_months, var95, cvar95, real_cagr (after inflation)."
},
"yearly": {
"description": "Return per calendar year, aligned with `years`."
},
"years": {
"description": "Calendar years."
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "Starts from a loss the holder names (as a fraction: 0.25 is a quarter) and\n reports the least extreme combination of market moves that would\n produce it on this portfolio, beside the worst each of those moves\n actually did in the record. No probability is computed.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"holdings": {
"additionalProperties": {
"type": "number"
},
"description": "What is held: {ticker: weight or amount}. Weights need not sum to one; amounts in the base currency are also accepted (then the crises are shown in money). 1 to 100 holdings. Tickers as the exchange lists them (VOO, VWCE.DE, XAW.TO; 'CASH.USD' for cash).",
"title": "Holdings",
"type": "object"
},
"loss": {
"default": 0.2,
"description": "The loss to explain, as a fraction: 0.25 = lose a quarter.",
"exclusiveMinimum": 0.005,
"maximum": 0.95,
"title": "Loss",
"type": "number"
}
},
"required": [
"holdings"
],
"title": "reverse_stressArguments",
"type": "object"
},
"name": "reverse_stress",
"outputSchema": {
"description": "The least extreme market moves that would produce the given loss.",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"coverage": {
"description": "Share of the portfolio's movement these directions explain.",
"type": [
"number",
"null"
]
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"line": {
"description": "One sentence: what it would take.",
"type": [
"string",
"null"
]
},
"moves": {
"description": "Per market direction: label, plain wording, shock needed, sensitivity (beta), share of the loss, worst_seen in the record over the same number of days."
},
"target": {
"description": "The loss explained, as a negative fraction.",
"type": [
"number",
"null"
]
},
"window_days": {
"description": "Length of the move considered, in trading days.",
"type": [
"number",
"null"
]
},
"window_end": {
"description": "Record end.",
"type": [
"string",
"null"
]
},
"window_start": {
"description": "Record start.",
"type": [
"string",
"null"
]
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "Finds the ticker when the holder gives a name, part of a ticker or an ISIN\n (for example 'Vanguard total world' gives VT), with the exchange it\n trades on. Useful before a measurement whenever a ticker is not\n certain. Listings nobody here has checked are marked unchecked.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"query": {
"description": "A fund or company name, a ticker, or an ISIN.",
"maxLength": 40,
"title": "Query",
"type": "string"
}
},
"required": [
"query"
],
"title": "search_symbolsArguments",
"type": "object"
},
"name": "search_symbols",
"outputSchema": {
"description": "Listings matching the query.",
"properties": {
"results": {
"description": "Matches, best first.",
"items": {
"properties": {
"currency": {
"description": "Trading currency.",
"type": [
"string",
"null"
]
},
"exchange": {
"description": "Exchange.",
"type": [
"string",
"null"
]
},
"experimental": {
"description": "True for listings nobody here has checked.",
"type": [
"boolean",
"null"
]
},
"name": {
"description": "Fund or company name.",
"type": [
"string",
"null"
]
},
"symbol": {
"description": "Ticker as the exchange lists it; pass this to the measuring tools.",
"type": [
"string",
"null"
]
},
"type": {
"description": "ETF, equity, fund…",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
}
},
"required": [
"results"
],
"type": "object"
}
},
{
"description": "Simulated, not a forecast: 4,000 paths resampled from one portfolio's own\n price history, with optional monthly additions; where the middle path\n and the outer tenths end after the years asked, in money and in\n today's money, and the share of paths ending below what was put in. It\n assumes the future pays what the record paid, and it is refused when\n the record is too short or too extreme for the years asked.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"haircut": {
"default": 0,
"description": "Yearly return removed from every path, as a fraction (0.02 = assume 2% a year less than the record paid).",
"maximum": 0.15,
"minimum": 0,
"title": "Haircut",
"type": "number"
},
"holdings": {
"additionalProperties": {
"type": "number"
},
"description": "What is held: {ticker: weight or amount}. Weights need not sum to one; amounts in the base currency are also accepted (then the crises are shown in money). 1 to 100 holdings. Tickers as the exchange lists them (VOO, VWCE.DE, XAW.TO; 'CASH.USD' for cash).",
"title": "Holdings",
"type": "object"
},
"monthly": {
"default": 0,
"description": "Amount added every month, in the base currency.",
"maximum": 1000000,
"minimum": 0,
"title": "Monthly",
"type": "number"
},
"years": {
"default": 20,
"description": "Years to run the paths, 1 to 40.",
"maximum": 40,
"minimum": 1,
"title": "Years",
"type": "integer"
}
},
"required": [
"holdings"
],
"title": "simulate_pathsArguments",
"type": "object"
},
"name": "simulate_paths",
"outputSchema": {
"description": "Paths resampled from the record (SIMULATED), or the reasons they were refused.",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"assumption": {
"description": "The assumption every path rests on.",
"type": [
"string",
"null"
]
},
"bands": {
"description": "Percentile paths over time: p5 … p95, aligned with `years`."
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"extrapolation": {
"description": "Years asked divided by years of history.",
"type": [
"number",
"null"
]
},
"historical_cagr": {
"description": "Growth per year the record paid.",
"type": [
"number",
"null"
]
},
"invested": {
"description": "Money put in over the years asked.",
"type": [
"number",
"null"
]
},
"kind": {
"description": "simulated.",
"type": [
"string",
"null"
]
},
"prob_below_invested": {
"description": "Share of paths ending below what was put in (a share of simulated paths, not a probability of the future).",
"type": [
"number",
"null"
]
},
"prob_below_real": {
"description": "The same after inflation.",
"type": [
"number",
"null"
]
},
"refused": {
"description": "Present when no paths were drawn: the reasons, in words."
},
"sample_years": {
"description": "Years of shared history the paths are drawn from.",
"type": [
"number",
"null"
]
},
"terminal": {
"description": "Where the paths end, by percentile: p5, p10, p25, p50, p75, p90, p95."
},
"terminal_real": {
"description": "The same in today's money."
},
"years": {
"description": "Time axis of the bands, in years."
},
"youngest": {
"description": "When refused: the holding whose short history cut the record.",
"type": [
"string",
"null"
]
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "One holding already in the portfolio, measured at every weight from none to\n all (the rest of the money redistributed in proportion): volatility,\n its share of the risk and the independent bets at each point, and\n whether most of the change comes from the first slice. For how much of\n it is enough to change anything. Counterfactual; never says what\n weight to hold.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"holdings": {
"additionalProperties": {
"type": "number"
},
"description": "What is held: {ticker: weight or amount}. Weights need not sum to one; amounts in the base currency are also accepted (then the crises are shown in money). 1 to 100 holdings. Tickers as the exchange lists them (VOO, VWCE.DE, XAW.TO; 'CASH.USD' for cash).",
"title": "Holdings",
"type": "object"
},
"ticker": {
"description": "The holding to sweep; must be one of `holdings`.",
"maxLength": 20,
"title": "Ticker",
"type": "string"
}
},
"required": [
"holdings",
"ticker"
],
"title": "sweep_holdingArguments",
"type": "object"
},
"name": "sweep_holding",
"outputSchema": {
"description": "One holding at every weight from none to all (counterfactual).",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"end": {
"description": "Window end.",
"type": [
"string",
"null"
]
},
"kind": {
"description": "Kind of figures (counterfactual).",
"type": [
"string",
"null"
]
},
"knee": {
"description": "Weight below which most of the change happens, when there is one.",
"type": [
"number",
"null"
]
},
"note": {
"description": "One sentence on where the change comes from.",
"type": [
"string",
"null"
]
},
"points": {
"description": "Per weight: weight, vol (volatility), risk_share (that holding's share of the risk), effective_bets, top_factor_share."
},
"redistribution": {
"description": "How the rest of the money is spread at each point.",
"type": [
"string",
"null"
]
},
"start": {
"description": "Window start.",
"type": [
"string",
"null"
]
},
"ticker": {
"description": "The holding swept.",
"type": [
"string",
"null"
]
},
"total_change": {
"description": "Change in volatility from none to the current weight.",
"type": [
"number",
"null"
]
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "Any change to one portfolio, measured before it is made: the current and the\n proposed holdings side by side on the same price history (structure,\n risk, worst falls, and what the change adds or removes). For a single\n new holding, check_before_you_buy says more; for one holding at every\n weight, sweep_holding. The 'after' figures are counterfactual. Never\n says whether to make the change.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"current": {
"additionalProperties": {
"type": "number"
},
"description": "What is held now, {ticker: weight}.",
"title": "Current",
"type": "object"
},
"end": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional window end, YYYY-MM-DD.",
"title": "End"
},
"proposed": {
"additionalProperties": {
"type": "number"
},
"description": "What would be held after the change, {ticker: weight}.",
"title": "Proposed",
"type": "object"
},
"start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional window start, YYYY-MM-DD.",
"title": "Start"
}
},
"required": [
"current",
"proposed"
],
"title": "test_a_changeArguments",
"type": "object"
},
"name": "test_a_change",
"outputSchema": {
"description": "The current and the proposed portfolio on the same history. The 'after' figures are counterfactual: that portfolio was not held.",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"axes": {
"description": "Per axis: label, the question it answers, before, after."
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"deltas": {
"description": "Per measure: label, before, after, direction, unit."
},
"historical": {
"description": "Per past crisis: before and after."
},
"improved": {
"description": "Measures that moved one way."
},
"introduces": {
"description": "Risk the proposed holdings add that the current ones did not carry."
},
"kind": {
"description": "Kind of figures (counterfactual).",
"type": [
"string",
"null"
]
},
"kind_means": {
"description": "What that kind means.",
"type": [
"string",
"null"
]
},
"limitations": {
"description": "What this comparison cannot show."
},
"similar": {
"description": "Measures that barely moved."
},
"summary": {
"description": "One sentence on what the change moves.",
"type": [
"string",
"null"
]
},
"window": {
"description": "The shared window: start, end, years, which holding set it, crises inside."
},
"worsened": {
"description": "Measures that moved the other way."
}
},
"required": [
"_fence"
],
"type": "object"
}
},
{
"description": "Checks a list of tickers before a measurement: which have usable price\n history, which do not, and the closest listing where a symbol is\n ambiguous.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"tickers": {
"description": "Tickers to check, up to 150.",
"items": {
"type": "string"
},
"maxItems": 150,
"title": "Tickers",
"type": "array"
}
},
"required": [
"tickers"
],
"title": "validate_symbolsArguments",
"type": "object"
},
"name": "validate_symbols",
"outputSchema": {
"description": "Which tickers can be measured.",
"properties": {
"base": {
"description": "Base currency.",
"type": [
"string",
"null"
]
},
"currencies": {
"description": "Per ticker: its trading currency."
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"problems": {
"description": "Per failing ticker: why."
},
"suggestions": {
"description": "Per ambiguous ticker: the closest listing."
},
"valid": {
"description": "Per ticker: true when it has usable price history."
}
},
"required": [
"valid"
],
"type": "object"
}
},
{
"description": "Whether re-optimising an allocation would have helped: refit on the years\n before each date, hold it on prices it had not seen, repeat, and\n compare that record with the portfolio actually held and with equal\n weight. Says whether refitting bought anything measurable. Returns the\n record, never an allocation to hold.",
"inputSchema": {
"properties": {
"base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Currency every figure is expressed in (USD, EUR, GBP, CAD…). Default USD.",
"title": "Base"
},
"holdings": {
"anyOf": [
{
"additionalProperties": {
"type": "number"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional: the portfolio actually held, {ticker: weight}, measured on the same span for comparison.",
"title": "Holdings"
},
"objective": {
"default": "max_sharpe",
"description": "What each refit maximises or minimises: max_sharpe, min_variance, min_drawdown, min_cvar or max_quadratic_utility.",
"title": "Objective",
"type": "string"
},
"step_months": {
"default": 12,
"description": "Months each fitted mix is held.",
"maximum": 36,
"minimum": 1,
"title": "Step Months",
"type": "integer"
},
"tickers": {
"description": "The candidate holdings, 2 to 30.",
"items": {
"type": "string"
},
"maxItems": 30,
"minItems": 2,
"title": "Tickers",
"type": "array"
},
"train_years": {
"default": 3,
"description": "Years of history each refit sees.",
"maximum": 15,
"minimum": 1,
"title": "Train Years",
"type": "number"
}
},
"required": [
"tickers"
],
"title": "walk_forwardArguments",
"type": "object"
},
"name": "walk_forward",
"outputSchema": {
"description": "An allocation method tested out of sample; no allocation is returned.",
"properties": {
"_fence": {
"description": "What these figures are and are not: descriptive, no forecast, no advice. Repeat its sense when presenting the result.",
"type": [
"string",
"null"
]
},
"data": {
"description": "Where the prices came from and what was missing or repaired.",
"properties": {
"as_of": {
"description": "Last date of price history used.",
"type": [
"string",
"null"
]
},
"currency": {
"description": "Currency the figures are in.",
"type": [
"string",
"null"
]
},
"missing": {
"description": "Tickers with no usable history (left out)."
},
"source": {
"description": "Price source.",
"type": [
"string",
"null"
]
},
"standins": {
"description": "Holdings measured through a stand-in with longer history: ticker, proxy, index, from, until, evidence."
}
}
},
"fitted_window": {
"description": "First and last date of shared history."
},
"objective": {
"description": "What each refit optimised.",
"type": [
"string",
"null"
]
},
"out_of_sample": {
"description": "start, end, n_refits, train_years, step_months, mean_turnover, verdict (one sentence on the record), limitations, tracks (per track: label, cagr, vol, sharpe, max_drawdown, nav), refits (date, turnover); or `unavailable` with the reason."
}
},
"required": [
"_fence"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:eb9bb4223bdaee1e95e53f8e29415f87138390ba668740bf5882a60741b5b268 | sha256sum