4.3 KiB
metadata.srf reference
metadata.srf classifies each symbol by asset class, sector, and
geography so zfin analysis can produce
allocation breakdowns and zfin review can group
holdings by sector. zfin loads it from the same directory as the
resolved portfolio file.
It is optional, but without it the Asset Category / Sector / Geographic
breakdowns have nothing to group by. The fastest way to create one is
zfin enrich; see
Classify your holdings.
File format
One record per (symbol, allocation) pair. A single-asset-class
security needs one line; a blended fund needs several lines that sum to
~100%.
#!srfv1
symbol::VTI,sector::Diversified,geo::US,asset_class::US Large Cap
symbol::AGG,sector::Bonds,geo::US,asset_class::Bonds
Fields
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
symbol |
string | Yes | -- | Ticker or CUSIP. Must match symbol:: (or ticker::) on a portfolio lot. |
name |
string | No | -- | Human-readable security name (e.g. "SPDR S&P 500 ETF Trust"). Shown where available; falls back to the symbol. |
asset_class |
string | No | -- | e.g. US Large Cap, Bonds, International Developed, Emerging Markets. |
sector |
string | No | -- | e.g. Technology, Healthcare, Financials, Diversified, Bonds. |
geo |
string | No | -- | e.g. US, International Developed, Emerging Markets. |
bucket |
string | No | (derived) | User-curated grouping label that overrides the auto-derived sector bucket for concentration/dominance checks (see below). |
pct |
number | No | 100 |
Weight of this allocation line for the symbol. Use multiple lines for blended funds. |
Cash and CD lots are classified as "Cash & CDs" automatically -- they need no metadata entry.
The bucket field
For concentration and sector-dominance analysis, zfin needs a
meaningful grouping label. It derives one automatically, but the
upstream sector can be uninformative -- ETF holdings data often tags
everything as the generic "Equity / Corporate." When several distinct
holdings collapse into one meaningless bucket, set bucket:: yourself
to a label that actually distinguishes them. When bucket is unset,
zfin falls back through: sector (if it isn't a fund-decomposition
category) -> a composite "<geo> <asset_class>" -> Unclassified.
See Classify your holdings
for a worked bucket example.
Blended funds
For a target-date or balanced fund, add one line per asset class with
pct:num: weights summing to ~100:
#!srfv1
symbol::02315N600,asset_class::US Large Cap,pct:num:55
symbol::02315N600,asset_class::International Developed,pct:num:20
symbol::02315N600,asset_class::Bonds,pct:num:15
symbol::02315N600,asset_class::Emerging Markets,pct:num:10
Example (from examples/pre-retirement-both)
#!srfv1
symbol::VTI,sector::Diversified,geo::US,asset_class::US Large Cap
symbol::SPY,sector::Diversified,geo::US,asset_class::US Large Cap
symbol::QQQ,sector::Technology,geo::US,asset_class::US Large Cap
symbol::SCHD,sector::Diversified,geo::US,asset_class::US Large Cap
symbol::AGG,sector::Bonds,geo::US,asset_class::Bonds
See also
- Classify your holdings -- the walkthrough, including
enrich. zfin enrich-- bootstrap this file from Wikidata + SEC EDGAR.zfin analysis-- the breakdowns this file feeds.zfin review-- the per-holding Sector column and grouping this file feeds.