SQX Portfolio Holdings: Technical Methodology
SQX Portfolio Holdings begins with the latest qualifying holdings report per portfolio and updates reported weights through analysis_date using observed price changes. The output keeps all positions the source reports and ranks them by reported weight to the depth the source discloses; where a source reports positions past the persisted depth, an aggregate row summarizes the remainder.
The Portfolio Holdings Data Dictionary provides field order, datatypes, and controlled values. This document describes the calculations.
________________
Scope and row structure
Holdings attach to a portfolio shared across fund share classes. portfolio_id links the file to Fund Liquidity and the fund-to-portfolio mapping. portfolio_name uses the reported portfolio title; a portfolio with a solitary share class can use its share-class title where a portfolio title is unavailable.
A row represents a reported position or the aggregate remainder. holding_name is the source description. holding_isin contains the source-reported ISIN; it is blank where the source lacks a usable ISIN. holding_rank preserves the source order by reported weight, even where market movement changes the order of holding_weight.
analysis_date is the output date. data_source_date is the effective date of the selected holdings report. data_source identifies SEC N-PORT as SEC, SEC N-MFP as nmfp, Japanese filings as edinet, and sponsor files as web:<sponsor>.
________________
Source selection
Sources include SEC Forms N-PORT and N-MFP, Japanese EDINET schedules, and qualifying sponsor portfolio files. The engine selects the newest portfolio report dated on or before analysis_date and within the preceding 365 calendar days.
The complete report is parsed before ranking. Structural checks cover portfolio identity, dates, weights, values, and the applicable filing totals. A report that fails a check enters review under the relevant filing section.
________________
Full depth and aggregate remainder
The engine retains all reported positions and ranks them by reported weight. Where a source reports positions past the persisted depth, those positions combine into a final row whose holding_name begins with All other holdings and whose holding_isin is blank. A book persisted in full omits the aggregate row.
The aggregate weight is signed. A positive value represents net long exposure past the persisted depth; a negative value represents net short exposure, borrowing, or other offsets. Long and short positions inside the aggregate can offset, so the row describes a net weight. Gross exposure detail covers the retained positions.
Portfolios persisted in full consist entirely of position rows. The engine projection normalizes them to 100%; the filing channel preserves source rounding.
________________
Weight projection
The engine file publishes projection_method per fund: drift where the book received a projection, filing where the as-filed weights pass through unchanged because pricing failed across all positions or because the book's denominator was degenerate. A drifted book keeps reported quantities fixed and updates positions by their price ratios from data_source_date to analysis_date.
The calculation uses:
t0:data_source_date.t:analysis_date.w_i(t0): the signed reported weight of retained positioni, in percentage points. Long exposure is positive; short exposure and offsets are negative.w_T(t0): the signed net reported weight of positions past the persisted depth.R_i: the eligible price ratio for retained positioni.R_M: the medianR_iamong retained positions with usable price pairs.D: the signed net drifted total used as the normalization denominator.
For a retained position:
```text R_i = P_i(t) / P_i(t0)
drifted weight_i = w_i(t0) × R_i ```
Positions requiring a fallback and the aggregate remainder use R_M. Cash uses a ratio of 1.0.
```text D = Σ[w_i(t0) × R_i] + w_T(t0) × R_M
holding_weight_i = 100 × w_i(t0) × R_i / D
aggregate holding_weight = 100 × w_T(t0) × R_M / D ```
The denominator is a signed net total. Under the standard calculation, all published holding_weight values sum to 100%. Long weights can sum above 100%; negative short and offset weights bring the net total back to 100%.
For the published rows:
``text long exposure = Σ max(holding_weight_i, 0) short/offset contribution = Σ min(holding_weight_i, 0) net exposure = long exposure + short/offset contribution = 100% gross exposure = long exposure + abs(short/offset contribution) ``
Because the aggregate remainder is net, its internal long and short exposures stay unavailable for the gross calculation. Gross exposure calculated from the published rows therefore reflects retained positions plus the aggregate's net amount.
A denominator close to zero causes source weights to pass through. A portfolio with zero usable price pairs uses a ratio of 1.0 throughout.
________________
Price evidence and corporate actions
Both sides of a price ratio use the newest eligible observation on or before their target date within seven calendar days:
- Exchange-traded instruments use consolidated closing prices.
- Corporate bonds use SQX evaluated clean prices.
- Municipal bonds use SQX evaluated bid-side prices.
- Fund holdings can use fund NAV.
Both observations share a source family, price definition, and currency. Where the filing identifies the instrument currency, price selection uses that currency.
Supported corporate actions adjust the ratio where price evidence and event terms agree. These include splits, cash and stock mergers, and spin-offs. Incomplete event terms and unexplained split-like movements use the portfolio median ratio. Positions lacking an eligible pair also use the median ratio. Cash remains at 1.0.
________________
Position value and FX
holding_value begins with the value reported on data_source_date. The engine file applies the ratio used for the weight projection:
``text holding_value = reported position value × R_i ``
holding_weight is the signed exposure measure. holding_value follows the source value convention, which can report a positive value beside a negative weight. Net and gross calculations therefore use holding_weight.
holding_value_currency identifies the source reporting currency. It can differ from the security's trading currency. N-PORT values are USD; EDINET values are JPY; sponsor files use their identified reporting currency.
fx_rate is units of holding_value_currency per U.S. dollar. The selected rate is the newest rate on or before data_source_date within seven calendar days.
``text holding value in USD = holding_value / fx_rate ``
USD values publish a blank fx_rate, equivalent to 1. A foreign-currency value remains available in its reporting currency where an FX rate is unavailable. Post-report currency movement falls outside the projection.
The aggregate remainder receives a value where the retained source values establish a shared reporting currency and support an implied amount. Mixed or unresolved reporting currencies produce a blank aggregate value.
________________
Share counts and classifications
num_shares is populated where the source balance unit is number of shares. Principal amounts, contract counts, other units, and the aggregate remainder produce a blank value.
num_shares_change_percent compares the two newest portfolio reports where both observations are share counts and the earlier count is positive:
``text num_shares_change_percent = 100 × (current num_shares - previous num_shares) / previous num_shares ``
The field is blank where the comparison lacks an earlier report, a position match, or a share count on either date.
asset_category translates recognized regulatory codes into readable asset types. Unmapped codes pass through. issuer_category describes the issuer type, such as corporate, registered fund, municipal, U.S. Treasury, government agency, or sovereign.
________________
Delivery channels
Both channels publish identical columns in identical order.
| Channel | projection_method | Treatment |
|---|---|---|
portfolio_holdings_YYYYMMDD.txt | drift or filing, per fund | Weights and values updated through analysis_date where the book's holdings price (drift); as-filed pass-through where pricing fails (filing); aggregate remainder included |
sqx_fund_holdings | filing | Source weights and values as of data_source_date; aggregate remainder omitted |
analysis_date, data_source_date, and projection_method identify the applicable time basis.
________________
Relationship to Fund Liquidity
Fund Liquidity's net_assets is the total reported portfolio value in its published currency. Portfolio Holdings' holding_value covers a position in holding_value_currency and receives a price-ratio update in the engine file.
The sum of holding_value can differ from net_assets because of source dates, reporting currencies, rounding, leverage, aggregate treatment, and post-report market movement. portfolio_id provides the link between the two products.
________________
Controls and limitations
Identical dated inputs and configuration reproduce the output. Delivery checks cover portfolio identifiers, rank order, aggregate-row count, portfolio weight totals, ISIN format, value currency, FX direction, share-count change, and source dates.
The projection measures passive market movement from the latest holdings report. Portfolio trading, creations, redemptions, derivatives activity, distributions, and fees can change the actual portfolio after data_source_date.
The aggregate remainder uses the portfolio median ratio and provides limited detail about positions past the persisted depth. That median rule keeps unpriced positions in the portfolio, though their realized movement can differ. Price matching can use an earlier observation within the seven-day window. Corporate-action adjustments depend on available terms and supporting price evidence.
holding_value uses source-date FX. num_shares_change_percent ends with the newest source report. Asset and issuer classifications follow regulatory or sponsor evidence and SQX translations.
The output supports portfolio analysis. Investment, trading, valuation, and credit decisions remain with the recipient.