# Us Index Capital Pressure

> Create a U.S. equity index inclusion buy-pressure and capital-event analysis workbook. Use when Codex needs to analyze whether one company may enter S&P 500, Nasdaq-100, or FTSE Russell indexes, estimate corresponding ETF buy pressure, search SEC filings for significant buy/sell pressure capital events, and deliver a generic two-sheet Excel structure with an index buy-pressure sheet and a chronological capital events sheet.

- Skill: `twinklezhang/us-index-capital-pressure` (Agent Skill, multi-file: 18 files)
- Install (CLI): `npx skillmds@latest add twinklezhang/us-index-capital-pressure`
- Raw SKILL.md: https://api.skillmd.com/api/skills/twinklezhang/us-index-capital-pressure/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: TwinkleZHANG (https://skillmd.com/u/twinklezhang)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/twinklezhang/us-index-capital-pressure

---


# US Index Capital Pressure

## Core Output

Produce one workbook for one company or ticker with exactly these two primary sheets unless the user explicitly asks for a different format:

```text
指数纳入买压金额测算
资本事件表
```

Do not include company-specific prior results, examples, cached conclusions, or one-off analysis outputs in the skill. Treat all bundled Markdown files as reusable methodology and formatting references only.

## Reference Loading

Start with:

```text
references/指数纳入买压测算与资本事件表统一工作流.md
```

Load additional references only as needed:

```text
references/S&P500纳入与买压估算流程.md
references/Nasdaq-100纳入与买压估算流程.md
references/FTSE Russell纳入与买压估算流程.md
references/显著买压抛压SEC文件查找流程.md
references/上市证券身份稳定验证流程.md
```

Use the three index references for detailed eligibility logic, timing, ETF AUM scope, ETF holdings method for estimating index total float market value, weight calculation, buy-pressure formulas, source recording, assumptions, and validation. Use `上市证券身份稳定验证流程.md` before relying on exchange web pages for ticker, listing status, exchange, security type, and quote availability. Use the SEC reference for non-index capital-event discovery and row-level extraction rules.

## Fund Scope Limits

Use a restricted ETF-only baseline fund pool for index inclusion buy-pressure. The baseline pool is fixed unless the user explicitly asks for a separate sensitivity or expanded-fund scenario:

```text
S&P 500: VOO, SPY, IVV, SPYM/SPLG only
Nasdaq-100: QQQ, QQQM only
Russell: IWB for Russell 1000 exposure, IWM for Russell 2000 exposure only
```

Do not include the following in the baseline buy-pressure amount: other same-index ETFs, overseas or UCITS ETFs, mutual funds, separately managed accounts, index-licensed institutional mandates, leveraged ETFs, inverse ETFs, covered-call or option-income ETFs, equal-weight ETFs, style ETFs, sector/thematic ETFs, active ETFs, derivatives, AP creation/redemption effects, market-maker hedges, or assumed pre-positioning.

If the user explicitly requests an expanded view, add it as a separate sensitivity case with its own ETF list, source URLs, AUM dates, formulas, and warning label. Never mix expanded-fund estimates into the baseline amount or the baseline capital-event row.

## Scripts

Use these scripts when collecting baseline ETF AUM and applying the ETF holdings method to infer index estimated total float market values:

```text
scripts/fetch_baseline_etf_aum.py
scripts/fetch_invesco_holdings.py
scripts/fetch_ishares_holdings.py
scripts/fetch_yahoo_float_anchors.py
scripts/select_valid_anchors.py
scripts/estimate_index_float_market_value.py
scripts/run_index_pressure_workflow.py
scripts/fetch_sec_filings.py
scripts/extract_sec_capital_events.py
scripts/validate_sec_filing_coverage.py
```

For SEC capital-event discovery, never assume an existing `sec_filings_*.csv` is complete unless its `forms` coverage is verified against the full main-event form pool. Before building or refreshing `资本事件表`, run `fetch_sec_filings.py` with the full pool below, run `validate_sec_filing_coverage.py`, then run `extract_sec_capital_events.py`; workbook generators must read the resulting `sec_capital_events_*.csv` instead of hard-coding SEC event rows:

```text
424B4 424B5 S-1 S-1/A F-1 F-1/A 8-K 10-K 10-Q 4 144 SC TO-I SC TO-T DEFM14A
```

Required sequence:

```powershell
python scripts/fetch_sec_filings.py `
  --ticker TICKER `
  --forms 424B4 424B5 S-1 S-1/A F-1 F-1/A 8-K 10-K 10-Q 4 144 SC TO-I SC TO-T DEFM14A `
  --download-documents `
  --document-dir outputs/sec_documents_TICKER_full `
  --csv outputs/sec_filings_TICKER_full.csv

python scripts/validate_sec_filing_coverage.py `
  --filings outputs/sec_filings_TICKER_full.csv `
  --out outputs/sec_filing_coverage_TICKER_full.csv

python scripts/extract_sec_capital_events.py `
  --filings outputs/sec_filings_TICKER_full.csv `
  --documents-dir outputs/sec_documents_TICKER_full `
  --audit-out outputs/sec_capital_event_audit_TICKER_full.csv `
  --events-out outputs/sec_capital_events_TICKER_full.csv
```

If any form in the pool returns no filings, `validate_sec_filing_coverage.py` must record it in `sec_filing_coverage_TICKER_full.csv`; keep that coverage result in Sources/audit trail, but do not create no-hit rows in `资本事件表`.

For the four-index estimated total float market value and target-weight workflow, prefer the orchestration script first. It fetches baseline AUM, downloads QQQ/IVV/IWB/IWM holdings, selects candidate anchors from each representative ETF, fetches Yahoo anchor and target data with failure logging, selects the first five Yahoo-valid anchors per index, and runs `estimate_index_float_market_value.py`:

```powershell
python scripts/run_index_pressure_workflow.py `
  --target-ticker TICKER `
  --downloads-dir downloads `
  --outputs-dir outputs
```

Use the step scripts below only when debugging, replacing a failed source, or documenting failed inputs in Sources.

For the restricted baseline ETF fund pool, use the issuer-page AUM helper first. It writes every required fund row, preserves failed issuer-page reads in `status` and `note`, and does not fall back to third-party aggregators:

```powershell
python scripts/fetch_baseline_etf_aum.py `
  --out outputs/baseline_etf_aum.csv `
  --json-out outputs/baseline_etf_aum.json
```

Download official ETF holdings files from the ETF issuer first, then pass local files to the index estimated total float market value script. Do not rely on undocumented dynamic scraping when a product page provides holdings, fund data, or Data Download files.

For Invesco Nasdaq-100 ETFs such as QQQ or QQQM, use the Invesco official holdings API helper before attempting the Nasdaq index estimated total float market value estimate. Save the raw response and the normalized CSV so Sources can cite the official URL, local path, holdings as-of date, and download date:

```powershell
python scripts/fetch_invesco_holdings.py `
  --ticker QQQ `
  --equity-only `
  --out downloads/QQQ_holdings.csv `
  --raw-out downloads/QQQ_holdings_raw.json
```

For iShares ETFs such as IWB or IWM, use the BlackRock/iShares Data Download helper:

```powershell
python scripts/fetch_ishares_holdings.py `
  --portfolio-id 239707 `
  --equity-only `
  --out outputs/IWB_holdings.csv `
  --raw-out outputs/IWB_fund_download.xml
```

For index estimated total float market value estimation, use exactly one representative ETF holdings file per index. The baseline representative holdings are:

```text
S&P 500: IVV
Nasdaq-100: QQQ
Russell 1000: IWB
Russell 2000: IWM
```

Do not pass multiple ETF holdings for the same index to `estimate_index_float_market_value.py`. Other ETFs may be discussed only as excluded sensitivity coverage when the user explicitly asks; they must not be mixed into the baseline index estimated total float market value.

For anchor securities and capital-event percentage index estimated total float market values, use Yahoo Finance SG share statistics from `https://sg.finance.yahoo.com/quote/{ticker}/key-statistics/`. For the target company, run the Yahoo helper before finalizing `资本事件表` and use the retrieved `floatShares`, `sharesOutstanding`, and latest Yahoo chart price as a single snapshot index estimated total float market value. Do not build or roll a detailed share-count bridge for options, RSUs, warrants, convertibles, stock splits, stock dividends, stock-for-stock M&A, or other small index estimated total float market value events unless the user explicitly asks for a share-count bridge. Populate `流通市值口径` and the two percentage columns as follows:

```text
流通市值口径 = Yahoo快照日 + Yahoo floatShares + Yahoo sharesOutstanding + Yahoo chart price
占流通股价值比例 = 事件涉及股份价值 / (Yahoo floatShares × Yahoo chart price)
占总股本价值比例 = 事件涉及股份价值 / (Yahoo sharesOutstanding × Yahoo chart price)
```

If the event is expressed only as shares, first calculate `事件涉及股份价值 = 事件涉及股数 × Yahoo chart price`; equivalently, the percentages may be calculated as `事件涉及股数 / Yahoo floatShares` and `事件涉及股数 / Yahoo sharesOutstanding`. Format both columns as concise percentages. If Yahoo `floatShares`, `sharesOutstanding`, or price is unavailable, do not invent the percentages; leave them `N/A` and record the missing field and source attempt in `备注` and `Sources`.

Example:

```powershell
python scripts/estimate_index_float_market_value.py `
  --anchors outputs/anchors.csv `
  --holding IVV=downloads/IVV_holdings.xlsx `
  --out outputs/ivv_index_estimated_float_market_value.csv `
  --json-out outputs/ivv_index_estimated_float_market_value.json
```

For Nasdaq-100 index estimated total float market value estimation, do not use a hard-coded target weight when QQQ holdings and anchor market data can be obtained. Use QQQ official holdings and the default Nasdaq-100 anchor set defined in the unified workflow. The anchor market-cap mode must be Nasdaq modified market cap:

```text
anchor modified shares = min(Yahoo sharesOutstanding, 3 × Yahoo floatShares)
anchor modified market cap = Yahoo chart price × anchor modified shares
anchor-implied index estimated total float market value = anchor modified market cap / QQQ holding weight
target weight = target modified market cap / median index estimated total float market value
```

For a full workbook, prefer one shared anchor file and one shared index estimated total float market value output for all index paths. Use `--mode index` for shared Yahoo anchor data, then run `estimate_index_float_market_value.py` once with exactly one `--index-holding` per index. Each `--index-holding` value uses:

```text
INDEX:ETF=local_holdings_file[:market_cap_mode]
```

where `market_cap_mode` is `float` for S&P 500/Russell free-float estimated total float market value estimates and `nasdaq_modified` for Nasdaq-100.

```powershell
python scripts/fetch_invesco_holdings.py `
  --ticker QQQ `
  --equity-only `
  --out downloads/QQQ_holdings.csv `
  --raw-out downloads/QQQ_holdings_raw.json

python scripts/fetch_yahoo_float_anchors.py `
  --tickers <ANCHOR_TICKERS_FROM_HOLDINGS> `
  --mode index `
  --skip-failures `
  --failures-out outputs/index_anchor_failures.csv `
  --out outputs/index_anchors.csv `
  --cache-dir outputs/yahoo_cache

python scripts/select_valid_anchors.py `
  --holding downloads/IWM_holdings.csv `
  --anchors outputs/index_anchors.csv `
  --count 5 `
  --out outputs/Russell2000_selected_anchors.csv `
  --index Russell2000 `
  --etf IWM

python scripts/estimate_index_float_market_value.py `
  --anchors outputs/index_anchors.csv `
  --index-holding 'S&P500:IVV=downloads/IVV_holdings.csv:float' `
  --index-holding 'NASDAQ-100:QQQ=downloads/QQQ_holdings.csv:nasdaq_modified' `
  --index-holding 'Russell1000:IWB=downloads/IWB_holdings.csv:float' `
  --index-holding 'Russell2000:IWM=downloads/IWM_holdings.csv:float' `
  --index-anchors 'S&P500=<TOP5_VALID_FROM_IVV>' `
  --index-anchors 'NASDAQ-100=<TOP5_VALID_FROM_QQQ>' `
  --index-anchors 'Russell1000=<TOP5_VALID_FROM_IWB>' `
  --index-anchors 'Russell2000=IWM_TOP5_FROM_HOLDINGS' `
  --target outputs/target_yahoo_share_stats.csv `
  --out outputs/index_estimated_float_market_values.csv `
  --json-out outputs/index_estimated_float_market_values.json
```

If an index has a clearly failed eligibility condition, mark it `不可纳入` or `暂不合格`, set Buy Pressure to `N/A`, and do not create an index-inclusion main event. If the status is `条件不足` because official announcement, final ranking, target tier, or official index data is missing, still run a clearly labelled `假设纳入/估计测算` using representative ETF holdings, five valid anchors, Yahoo target data, and available ETF AUM. When the estimate produces a traceable baseline `目标权重`, baseline buy-pressure amount, and baseline buy-pressure shares, create an index-inclusion buy-pressure row in `资本事件表` using the earliest possible inclusion/passive rebalance date from Timing. If the estimate cannot be made after the required scripts and replacement-anchor attempts, keep those fields `N/A` and record the failed inputs.

## Workflow

1. Collect company facts once: company name, ticker, CIK, listing status, exchange, security type, country status, industry, market cap, shares, free float or IWF, liquidity, profitability, official index announcements, SEC filing evidence, symbol-directory evidence, Yahoo Finance auxiliary quote evidence, issuer-name match checks, and source URLs.
2. Route the company through S&P 500, Nasdaq-100, and FTSE Russell status logic using only the fixed states:

```text
不可纳入
暂不合格
条件不足
合格候选
已公告/已纳入
```

3. For statuses `合格候选` or `已公告/已纳入`, run the corresponding index buy-pressure methodology from the relevant reference. For status `条件不足`, still run the methodology as a clearly labelled `假设纳入/估计测算` case when a target security/ticker and enough assumption inputs can be defined; preserve the `条件不足` status label, record missing official evidence, and do not present the result as eligible or announced. For statuses `不可纳入` or `暂不合格`, preserve status, reason, and evidence without expanding the full calculation area.
4. Build `指数纳入买压金额测算` with the original eight vertical sections:

```text
Dashboard
Sources
Eligibility
Timing
Weight
ETF AUM
Buy Pressure
Assumptions
```

Within each section, arrange the four index blocks horizontally in this order: `S&P500`, `NASDAQ-100`, `Russell 1000`, `Russell 2000`.

5. Use ETF holdings weights to infer index estimated total float market values where possible. Record the issuer URL, local holdings file, holdings as-of date, anchor securities, formulas, median index estimated total float market value, and uncertainty range.
6. Search SEC filings using `显著买压抛压SEC文件查找流程.md`; when automated lookup is allowed, first run `scripts/fetch_sec_filings.py` to resolve CIK, filter the target form pool, and capture filing detail + primary document URLs. Then run `scripts/validate_sec_filing_coverage.py`, and run or reproduce the logic of `scripts/extract_sec_capital_events.py` against the primary documents to build a structured main-event pool. Do not hand-code SEC event rows directly into the workbook generator. Only SEC events that match the main-event pool, have primary-document evidence, a determinable pressure date, and determinable shares or amount may enter `资本事件表`. The extraction logic must use event-specific parsers for at least IPO issuance, IPO lock-up/eligible-for-sale schedules, Form 4 code S sale rows, debt/notes exclusions, and stock-merger exclusions; a generic keyword hit plus largest number is not sufficient evidence.
7. Add index inclusion buy-pressure events from the Timing and Buy Pressure areas of `指数纳入买压金额测算` into `资本事件表`. For `条件不足` hypothetical inclusion cases, use the earliest possible inclusion/passive rebalance date shown in the relevant Timing section, classify the row as `买压`, and mark the calculation path as `假设纳入/估计测算`.
8. Sort `资本事件表` strictly by pressure occurrence date ascending. Use the actual or estimated pressure date, not a mere filing date. For same-day rows, order `抛压` before `买压`. `资本事件表` should not include `SEC no-hit`, exclusion-audit, `中性/信息`, or `不确定` rows unless the user explicitly asks for a separate audit timeline.

## Fixed Output Fields

Every workbook must use the same fields in the same order. Do not add, remove, rename, or reorder fields unless the user explicitly asks for a different format. If a field is not applicable or unavailable, keep the field and fill the value with `N/A`, `暂无`, `未取得`, or a concise no-hit explanation.

In `指数纳入买压金额测算`, each section contains four horizontal index blocks in this order: `S&P500`, `NASDAQ-100`, `Russell 1000`, `Russell 2000`. Each block is five columns wide. Use the same field headers for all four index blocks inside the section.

### Dashboard Fields

Dashboard does not use a separate field-header row. Each index block must contain these rows, in this order:

```text
公司名称 / [company name] / Ticker / [ticker] / 来源
纳入状态 / [fixed status] / 计算口径 / [mode] / 基准买压
一句话原因 / [reason] / - / - / -
上市状态 / [listing status] / 证券类型或行业 / [security type or industry] / 备注
综合结论 / [conclusion] / - / - / -
```

### Sources Fields

Each index block must use:

```text
数据项
网站/文件
获取内容
结果
URL 或路径
```

### Eligibility Fields

Each index block must use:

```text
判断项
结果
依据/来源
判断要求
备注
```

### Timing Fields

Each index block must use:

```text
项目
日期
来源
说明
是否假设
```

### Weight Fields

Each index block must use:

```text
项目
数值
单位
来源/公式
备注
```

### ETF AUM Fields

Each index block must use:

```text
ETF
基金名称
AUM/Net Assets
As-of Date
数据源/备注
```

ETF AUM rows must list only actual ETFs from the restricted baseline fund pool that apply to the index block. Do not add placeholder, exclusion, subtotal, total, `其他基金`, `合计`, `N/A`, or synthetic rows in the ETF AUM section. If a fund is excluded from the baseline pool, record that exclusion in Sources or Assumptions, not as an ETF AUM row. If a sum of ETF AUM is needed, show it in the Buy Pressure section or formula text, not as an ETF AUM row.

### Buy Pressure Fields

Each index block must use:

```text
情景
执行比例
相关 ETF AUM 或理论买入金额
估算买入金额
估算买入股数
```

Buy Pressure fixed rows:

```text
保守
基准
激进
计算口径
公式
```

The scenario execution ratios are fixed at `50%`, `70%`, and `90%`. The `基准` row is the row used for `资本事件表` index-inclusion buy-pressure events.

### Assumptions Fields

Each index block must use:

```text
假设项
当前取值
说明
是否可调
备注
```

### Capital Events Fields

`资本事件表` must use exactly these 12 columns:

```text
压力发生时间
事件来源模块
文件/指数
压力方向
事件
股数/金额
流通市值口径
占流通股价值比例
占总股本价值比例
测算口径
来源链接或来源单元格
备注
```

The two percentage fields must be concise percentages such as `1.2%` or `0.03%`, or `N/A` if the required Yahoo Finance SG fields are unavailable.

## Workbook Rules

`指数纳入买压金额测算` must use the fixed fields listed above. Use the original index Markdown files for logic, formulas, and evidence requirements only; do not expand the workbook with additional columns, extra sub-tables, or alternate section formats.

Format the workbook using the standard two-sheet workbook style:

```text
Row 1: workbook title, merged across the full used width, dark blue fill, white bold 14pt text.
Row 2: retrieval date and scope note, merged across the full used width, light peach fill, wrapped text.
Row 3: blank spacer row.
Each section: one dark blue merged section-title row, then one light-gray index-title row, then one field-header row, then contiguous data rows.
Between sections: exactly one blank spacer row.
```

For `指数纳入买压金额测算`, use 20 columns in four equal five-column blocks:

```text
A:E = S&P500
F:J = NASDAQ-100
K:O = Russell 1000
P:T = Russell 2000
```

In every section, merge the section title across `A:T`; merge index headers as `A:E`, `F:J`, `K:O`, and `P:T`. Use wrapped text, thin borders around table cells, vertical top alignment for data rows, and stable column widths similar to the example: label columns around 18, value/source columns around 20-26, and note/URL columns around 32. Do not leave blank rows inside a section.

`资本事件表` must combine only main buy-pressure and sell-pressure events:

```text
SEC原始文件可确认的主买压/抛压事件
指数纳入基准买压事件
```

`资本事件表` uses a strict SEC basis for non-index capital events. Public news, active fund flows, debt financing, quiet-period windows, unverified IPO/lock-up estimates, debt offerings, no-hit rows, exclusion-audit rows, and other non-main events must not be listed in `资本事件表`. Record searched-but-excluded items only in Sources, assumptions, or a separate audit artifact such as `outputs/sec_capital_event_audit.csv`. If the user explicitly requests a separate non-SEC observation timeline or audit sheet, create it separately from `资本事件表`.

## Validation

Before delivery, check:

1. The workbook has the required two primary sheets.
2. `指数纳入买压金额测算` preserves the eight sections: Dashboard, Sources, Eligibility, Timing, Weight, ETF AUM, Buy Pressure, Assumptions.
3. Inside each section, index blocks are horizontally ordered as S&P500, NASDAQ-100, Russell 1000, Russell 2000.
4. Each index has one of the five fixed status labels.
5. All non-N/A figures trace to a source URL, filing, official page, local holdings file, or source cell.
6. ETF index estimated total float market value calculations show anchor securities, ETF holding weights, adjusted market caps, anchor-implied index estimated total float market values, and the median index estimated total float market value used.
7. Estimated index paths are clearly marked as estimates; `条件不足` hypothetical inclusion paths retain the `条件不足` status while showing `假设纳入/估计测算`; official announced paths cite official announcements or lists.
8. SEC events use pressure occurrence dates and exclude vague, non-quantified, timing-uncertain, non-SEC-sourced, no-hit, exclusion-audit, and neutral-information items from `资本事件表`. Keep those excluded items outside the main table, in Sources or an audit CSV. Capital-event percentage index estimated total float market values use the target company Yahoo Finance SG snapshot unless the user explicitly asks for a detailed share-count bridge.
9. `资本事件表` includes only SEC-confirmed main buy/sell pressure events and index inclusion buy-pressure rows.
10. `资本事件表` is sorted strictly by pressure occurrence date.
11. Every section in `指数纳入买压金额测算` uses the exact fixed fields listed in `Fixed Output Fields`, in the same order for all four index blocks.
12. `资本事件表` uses exactly the 12 fixed columns listed in `Capital Events Fields`, with no extra or missing columns.










