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:
指数纳入买压金额测算
资本事件表
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:
references/指数纳入买压测算与资本事件表统一工作流.md
Load additional references only as needed:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
流通市值口径 = 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:
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:
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:
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.
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
- 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.
- Route the company through S&P 500, Nasdaq-100, and FTSE Russell status logic using only the fixed states:
不可纳入
暂不合格
条件不足
合格候选
已公告/已纳入
- 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. - Build
指数纳入买压金额测算with the original eight vertical sections:
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.
- 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.
- Search SEC filings using
显著买压抛压SEC文件查找流程.md; when automated lookup is allowed, first runscripts/fetch_sec_filings.pyto resolve CIK, filter the target form pool, and capture filing detail + primary document URLs. Then runscripts/validate_sec_filing_coverage.py, and run or reproduce the logic ofscripts/extract_sec_capital_events.pyagainst 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. - 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假设纳入/估计测算. - 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 includeSEC 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:
公司名称 / [company name] / Ticker / [ticker] / 来源
纳入状态 / [fixed status] / 计算口径 / [mode] / 基准买压
一句话原因 / [reason] / - / - / -
上市状态 / [listing status] / 证券类型或行业 / [security type or industry] / 备注
综合结论 / [conclusion] / - / - / -
Sources Fields
Each index block must use:
数据项
网站/文件
获取内容
结果
URL 或路径
Eligibility Fields
Each index block must use:
判断项
结果
依据/来源
判断要求
备注
Timing Fields
Each index block must use:
项目
日期
来源
说明
是否假设
Weight Fields
Each index block must use:
项目
数值
单位
来源/公式
备注
ETF AUM Fields
Each index block must use:
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:
情景
执行比例
相关 ETF AUM 或理论买入金额
估算买入金额
估算买入股数
Buy Pressure fixed rows:
保守
基准
激进
计算口径
公式
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:
假设项
当前取值
说明
是否可调
备注
Capital Events Fields
资本事件表 must use exactly these 12 columns:
压力发生时间
事件来源模块
文件/指数
压力方向
事件
股数/金额
流通市值口径
占流通股价值比例
占总股本价值比例
测算口径
来源链接或来源单元格
备注
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:
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:
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:
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:
- The workbook has the required two primary sheets.
指数纳入买压金额测算preserves the eight sections: Dashboard, Sources, Eligibility, Timing, Weight, ETF AUM, Buy Pressure, Assumptions.- Inside each section, index blocks are horizontally ordered as S&P500, NASDAQ-100, Russell 1000, Russell 2000.
- Each index has one of the five fixed status labels.
- All non-N/A figures trace to a source URL, filing, official page, local holdings file, or source cell.
- 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.
- Estimated index paths are clearly marked as estimates;
条件不足hypothetical inclusion paths retain the条件不足status while showing假设纳入/估计测算; official announced paths cite official announcements or lists. - 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. 资本事件表includes only SEC-confirmed main buy/sell pressure events and index inclusion buy-pressure rows.资本事件表is sorted strictly by pressure occurrence date.- Every section in
指数纳入买压金额测算uses the exact fixed fields listed inFixed Output Fields, in the same order for all four index blocks. 资本事件表uses exactly the 12 fixed columns listed inCapital Events Fields, with no extra or missing columns.