13F保有データとForm 4届出による株式ポジション分析
記事 Machine Learning for Trading
サマリー
この資料では、株式ポジションとインサイダー取引の分析に使う、公開SEC届出データの2つの情報源を紹介します。四半期ごとの13F報告書には、厳選した運用会社の保有状況、または届出期間全体を対象とする一括データが含まれます。Form 4届出には、選択した銘柄のインサイダー取引が記録されています。ガイドでは、データのダウンロード、読み込み、後続分析用の整理方法を説明し、銘柄単位の特徴量や機関投資家と銘柄の保有関係も扱います。
分析上の重要な点として、保有データには四半期末の報告日と、それより後の公開届出日が両方保持されています。これらの日付を区別することで、ポジションの保有時点と研究者が観測できた時点を分けられます。これは、時間を考慮した特徴量を構築したり、先読みバイアスを避けたりするうえで必要です。資料では、保有関係グラフ、混雑度シグナル、資産埋め込み、インサイダー取引分析などの応用例を挙げますが、実証結果やトレード戦略は提示しません。対象範囲は選択した運用会社、銘柄、一括取得の届出期間によって異なります。届出データが示すのは報告された保有状況と取引であり、現在の保有状況を完全かつ継続的に更新したものではありません。
主なアイデア
- 13F届出から、選択した運用会社またはより広い届出対象全体の四半期保有状況を取得できます。
- Form 4届出は、選択した株式のインサイダー取引に関する公開記録を提供します。
- ポジションの時点と公開時点を区別できるよう、報告日と届出日を分けて扱います。
- 保有関係や銘柄単位の特徴量は、混雑度や機関投資家ネットワークの研究に役立ちます。
- 届出データには対象範囲と時点の制約があり、ポジションをリアルタイムで示すものではありません。
タグ
全文
# Equity Positioning: 13F + Form 4
# Equity Positioning: 13F + Form 4
SEC regulatory filings that capture **positions** and **insider activity**
at the equity level. All data is public domain (SEC EDGAR). Respect the
10 req/sec rate limit via a descriptive `User-Agent` — downloaders here
handle this automatically.
## Datasets
| Dataset | Filing | Universe | Script | Loader(s) |
| --- | --- | --- | --- | --- |
| Institutional holdings | 13F | Curated 10 managers (per-cik) or full universe (bulk) | `13f_download.py` | `load_institutional_holdings_13f`, `load_13f_stock_features`, `load_13f_edges`, `load_13f_bulk_holdings` |
| Insider transactions | Form 4 | User-chosen tickers | `form4_download.py` | Raw XML — read directly via `pathlib` (see Ch4 NB 03) |
## Download Commands
```bash
# === 13F (institutional holdings) ===
# per-cik (default): 10 curated managers, 4 most recent 13F-HR filings each
uv run python data/equities/positioning/13f_download.py
uv run python data/equities/positioning/13f_download.py --num-filings 8
uv run python data/equities/positioning/13f_download.py --max-institutions 3
# bulk: one or more quarterly filing windows (SEC's own labels)
uv run python data/equities/positioning/13f_download.py --mode bulk --quarters 2024Q3
uv run python data/equities/positioning/13f_download.py --mode bulk --quarters 2024Q2,2024Q3
# === Form 4 (insider transactions) ===
uv run python data/equities/positioning/form4_download.py --ticker TSLA --count 20
uv run python data/equities/positioning/form4_download.py --ticker TSLA,AAPL,MSFT --count 10
```
## Directory Layout
```
$ML4T_DATA_PATH/equities/positioning/
├── 13f/
│ ├── institutional_holdings.parquet # per-cik: raw holdings (10 curated managers)
│ ├── institution_stock_edges.parquet # per-cik: institution → stock edges
│ ├── stock_features.parquet # per-cik: stock-level features
│ ├── coownership_matrix.npy # per-cik: stock × stock similarity
│ ├── coownership_stocks.txt # per-cik: row/col CUSIPs
│ └── bulk/
│ └── {YYYYQN}/
│ ├── institutional_holdings.parquet # bulk: full-window universe (~3M rows)
│ └── bulk_13f.zip # cached raw SEC zip
└── form4/
└── {TICKER}/{accession}.xml # Raw Form 4 insider filings
```
## Loading
```python
from data import (
load_institutional_holdings_13f,
load_13f_stock_features,
load_13f_edges,
load_13f_bulk_holdings,
)
# 13F per-cik (curated managers)
holdings = load_institutional_holdings_13f(start_date="2024-01-01")
features = load_13f_stock_features()
edges = load_13f_edges()
# 13F bulk (full universe, one quarter)
q3_2024 = load_13f_bulk_holdings("2024Q3")
```
The holdings schema preserves both SEC dates: `report_date` is the quarter-end
position date and `filing_date` is when the filing became public.
## Consumers
- **Ch4 NB 03** — Form 4 insider-transaction parsing
- **Ch4 NB 05** — Full-universe 13F analysis via `--mode bulk`
- **Ch10 NB 02** — Asset embeddings from 13F holdings
- **Ch22 NB 07** — Institutional ownership graph + crowding signals
- **Ch23** — `09_knowledge_graph_features`, `05_institutional_holdings_kg`, `04_rag_comparison_benchmark`出典を明記したうえで、ライセンスに従って全文を掲載しています。 ライセンス: MIT
この要約は原文をもとにStratmillのリサーチエージェントが作成したもので、出典の複製ではありません。