etf-flow 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- etf_flow-0.1.0/PKG-INFO +278 -0
- etf_flow-0.1.0/README.md +266 -0
- etf_flow-0.1.0/pyproject.toml +26 -0
- etf_flow-0.1.0/setup.cfg +4 -0
- etf_flow-0.1.0/src/etf_flow/__init__.py +172 -0
- etf_flow-0.1.0/src/etf_flow/api.py +251 -0
- etf_flow-0.1.0/src/etf_flow/arbitrage.py +308 -0
- etf_flow-0.1.0/src/etf_flow/backtest.py +352 -0
- etf_flow-0.1.0/src/etf_flow/holdings.py +306 -0
- etf_flow-0.1.0/src/etf_flow/impact.py +151 -0
- etf_flow-0.1.0/src/etf_flow/pcf.py +228 -0
- etf_flow-0.1.0/src/etf_flow/rebalance.py +286 -0
- etf_flow-0.1.0/src/etf_flow/recommender.py +559 -0
- etf_flow-0.1.0/src/etf_flow/scale.py +275 -0
- etf_flow-0.1.0/src/etf_flow/sentinel.py +192 -0
- etf_flow-0.1.0/src/etf_flow/tencent.py +168 -0
- etf_flow-0.1.0/src/etf_flow/universe.py +227 -0
- etf_flow-0.1.0/src/etf_flow/webhook.py +321 -0
- etf_flow-0.1.0/src/etf_flow.egg-info/PKG-INFO +278 -0
- etf_flow-0.1.0/src/etf_flow.egg-info/SOURCES.txt +45 -0
- etf_flow-0.1.0/src/etf_flow.egg-info/dependency_links.txt +1 -0
- etf_flow-0.1.0/src/etf_flow.egg-info/requires.txt +5 -0
- etf_flow-0.1.0/src/etf_flow.egg-info/top_level.txt +2 -0
- etf_flow-0.1.0/src/etf_tracker/__init__.py +3 -0
- etf_flow-0.1.0/src/etf_tracker/api.py +6 -0
- etf_flow-0.1.0/src/etf_tracker/arbitrage.py +6 -0
- etf_flow-0.1.0/src/etf_tracker/backtest.py +6 -0
- etf_flow-0.1.0/src/etf_tracker/holdings.py +6 -0
- etf_flow-0.1.0/src/etf_tracker/impact.py +6 -0
- etf_flow-0.1.0/src/etf_tracker/pcf.py +6 -0
- etf_flow-0.1.0/src/etf_tracker/rebalance.py +6 -0
- etf_flow-0.1.0/src/etf_tracker/recommender.py +6 -0
- etf_flow-0.1.0/src/etf_tracker/scale.py +6 -0
- etf_flow-0.1.0/src/etf_tracker/sentinel.py +6 -0
- etf_flow-0.1.0/src/etf_tracker/tencent.py +6 -0
- etf_flow-0.1.0/src/etf_tracker/universe.py +6 -0
- etf_flow-0.1.0/src/etf_tracker/webhook.py +6 -0
- etf_flow-0.1.0/tests/test_environment.py +29 -0
- etf_flow-0.1.0/tests/test_holdings.py +226 -0
- etf_flow-0.1.0/tests/test_pcf.py +220 -0
- etf_flow-0.1.0/tests/test_phase1_phase2.py +198 -0
- etf_flow-0.1.0/tests/test_prd_v2_features.py +316 -0
- etf_flow-0.1.0/tests/test_recommender.py +43 -0
- etf_flow-0.1.0/tests/test_recommender_coverage.py +181 -0
- etf_flow-0.1.0/tests/test_scale.py +275 -0
- etf_flow-0.1.0/tests/test_sentinel_universe_webhook.py +206 -0
- etf_flow-0.1.0/tests/test_tencent.py +166 -0
etf_flow-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: etf-flow
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: ETF tracking, quantitative analysis and opportunity radar tool
|
|
5
|
+
Requires-Python: <3.13,>=3.12
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: fastapi>=0.110.0
|
|
8
|
+
Requires-Dist: kdata-quant>=1.3.7
|
|
9
|
+
Requires-Dist: mootdx2>=1.5.4
|
|
10
|
+
Requires-Dist: rich>=13.0.0
|
|
11
|
+
Requires-Dist: uvicorn>=0.28.0
|
|
12
|
+
|
|
13
|
+
# ETF Flow (etf-flow)
|
|
14
|
+
|
|
15
|
+
高性能 ETF 资金流动与权重变动跟踪、成分股被动买盘测算与利好选股推荐系统。
|
|
16
|
+
|
|
17
|
+
> **核心设计哲学**:坚决摒弃盘中秒级噪音与未结算分时跳动,全面立足每日 **18:30 交易所官方结算定盘后的日K线、日终法定份额变动、官方 PCF 清单以及多日/周K/调样周期数据**。
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 核心数学模型:被动买盘“双引擎”
|
|
22
|
+
|
|
23
|
+
对于任意标的个股 $i$,其接收到的全市场 ETF 被动买卖盘净额($\Delta B_i$)由两大引擎共同决定:
|
|
24
|
+
|
|
25
|
+
$$\Delta B_i = \sum_{k \in \mathcal{U}_{ETF}} \left( \underbrace{\Delta S_k \times P_k \times w_{k, i} \times (1 - c_i)}_{\text{① 流量引擎}} + \underbrace{A_k \times \Delta w_{k, i}}_{\text{② 重配引擎}} \right)$$
|
|
26
|
+
|
|
27
|
+
1. **① 流量引擎**:$\Delta S_k$(当日官方定盘净申购份额)$\times P_k$(日K收盘价)$\times w_{k,i}$(成分股权重);遇现金替代比例 $>30\%$ 时乘以 $(1 - c_i)$ 自动折减;
|
|
28
|
+
2. **② 重配引擎**:$A_k$(存量 ETF 总资产 AUM)$\times \Delta w_{k,i}$(定期调样或高频 PCF 引起的权重跳升产生的存量建仓资金);
|
|
29
|
+
3. **流动性冲击与承接天数**:
|
|
30
|
+
$$\text{DaysToCover}_i = \frac{\Delta \text{Shares}_i}{\text{MedianVolume}_{20d}(i)}, \quad \text{ImpactRatio}_i = \frac{\Delta B_i}{\text{ADV}_{20}(i)} \times 100\%$$
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 全场景量化投资与策略矩阵 (All Quantitative Scenarios & SOP)
|
|
35
|
+
|
|
36
|
+
ETF Tracker 将市场中的被动资金流动、指数编制重配规则、盘后定盘行为与筹码结构穿透,体系化抽象为**五大黄金利好场景**、**三大高危反噬排雷场景**、**两大一二级市场定盘套利沉淀场景**与**三大事件研究回测情境**,提供覆盖全生命周期的量化指标判定与实战操作 SOP。
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
### 1. 五大黄金利好场景与推荐策略矩阵 (PRD F3.1)
|
|
41
|
+
|
|
42
|
+
| 场景代码 | 场景名称 | 核心金融驱动机制 | 关键量化判定阈值 | 最佳买点与生命周期操盘 SOP |
|
|
43
|
+
|:---:|:---|:---|:---|:---|
|
|
44
|
+
| **SC-01** | **存量调样重配暴击**<br>(Rebalance Windfall) | 每年 5月底/11月底指数定期调样,新纳入或权重跳升导致百亿级挂钩 ETF 必须在生效日前硬性被动建仓,触发存量重配暴击($A_{ETF} \times \Delta w_i$)。 | • 预计新增权重 $\Delta w_i \ge 1.0\%$<br>• 挂钩 ETF 总规模 $\ge 100$ 亿元<br>• 流动性冲击度 $\text{Impact} \ge 10\%$<br>• 测算建仓股数 $\ge 3\sim 5$ 倍日成交 | **4月中/10月中**通过调样预测模型潜伏候选股;**5月底/11月底公告当晚**右侧买入,持有至 **6月中/12月中生效日当天尾盘**逢高兑现(切忌生效后追高接盘)。 |
|
|
45
|
+
| **SC-02** | **大跌逆向托底护盘**<br>(Counter-Cyclical Floor) | 市场恐慌急跌时,国家队(中央汇金)、险资 FOF 借道宽基 ETF 巨额净申购($\Delta S \gg 0$),通过高权重成分股硬性托举大盘。 | • 挂钩大宽基单日净申购 $\ge 10\sim 20$ 亿份<br>• 单亿申购弹性 $\ge 500$ 万元/亿元<br>• 单日传导被动买盘 $\ge 3000$ 万元且占成交 $\ge 5\%$ | 急跌日 18:30 官方定盘确认巨额被动托底后,**次日开盘逢低买入**核心龙头(前5大权重股),博弈 3–5 个交易日日K超跌反弹与估值修复。 |
|
|
46
|
+
| **SC-03** | **赛道量价双击螺旋**<br>(Momentum Flywheel) | 赛道领涨龙头自由流通市值自然漂移膨胀 $\rightarrow$ ETF 权重占比持续提升 $\rightarrow$ 场外增量申购追高 $\rightarrow$ 新增资金按更高权重买入该龙头的正反馈飞轮。 | • 核心 ETF 中权重排名前列且领涨<br>• 挂钩 ETF 5 日份额净增 $> 5\%$<br>• 单亿申购弹性 $\ge 500$ 万元/亿元<br>• 季报/PCF 权重时序连续上行且外资共振加仓 | **顺势右侧持仓**核心主升加速段;只要挂钩 ETF 每日份额持续正增长且北向资金未大幅砍仓,坚定持股;以 ETF 份额增速钝化或转负为离场信号。 |
|
|
47
|
+
| **SC-04** | **抛压出清反转买点**<br>(Exhaustion Reversal) | 个股基本面未坏,仅因指数调权被 ETF 机械性砍仓砸出深坑;随后最新数据确认 ETF 砍仓结束(抛压归零),聪明钱(外资/机构)在底部全盘接走筹码。 | • 上期权重骤降砸坑,本期被动卖压归零企稳<br>• 单亿申购弹性 $\ge 500$ 万元/亿元<br>• 最新期北向资金/机构持股大幅正增长 | **中线胜率极高的“左侧向右侧切换”买点**(胜率超 75%),安全边际极高,场内浮筹沉淀充分,无被动抛盘掣肘,适合中线底仓配置。 |
|
|
48
|
+
| **SC-05** | **行业被动大潮共振**<br>(Sector Passive Tide) | 宏观产业催化下,某一级行业出现板块级 ETF 资金集体涌入,行业内挂钩 ETF 呈现百花齐放式同步净申购,增量资金在全行业各龙头股中按权重无差别建仓。 | • 某一级行业下 $\ge 80\%$ ETF 同步定盘净申购<br>• 行业整体单日或 5 日流入 $\ge 50$ 亿元<br>• 个股单亿申购弹性位列该行业前 3 名 | 顺应行业级被动大潮共振加速段,重点布局该行业中**“单亿申购弹性最高”的前 3 只核心细分龙头**,享受被动真金白银持续抬轿溢价。 |
|
|
49
|
+
|
|
50
|
+
#### 深度解析 1:场景一【存量调样重配暴击 (SC-01)】
|
|
51
|
+
- **金融物理学与核心驱动**:根据中证与国证指数编制规则,每年 5 月底与 11 月底锁定定期调样名单并于次月中旬生效。当个股被调入核心指数或权重系数上调时,挂钩该指数的全部存量 ETF 被动基金(千亿级存量资产 $A_k$)受契约约束,必须在生效日前严格建仓到位:
|
|
52
|
+
$$\Delta B_i^{\text{Rebalance}} = \sum_{k} A_k \times \Delta w_{k, i}$$
|
|
53
|
+
- **实战案例对账**:
|
|
54
|
+
- *2026年6月调样*:三花智控调入中证机器人指数前十(抢占 8.37% 权重)、领益智造调入国证机器人第一重仓(6.09%),获挂钩 ETF 十亿级被动硬性买盘建仓。
|
|
55
|
+
- **全生命周期操盘 SOP**:
|
|
56
|
+
1. **前置预判期(4月中旬 / 10月中旬)**:运行 `uv run python system/scripts/rebalance_predictor.py 000300` 提前 30–45 天锁定高概率调入名单,左侧低吸潜伏;
|
|
57
|
+
2. **公告确认期(5月31日 / 11月30日)**:官方名单发布当晚核验确认,右侧跟进加仓;
|
|
58
|
+
3. **生效兑现期(6月 / 12月第二个周五)**:在生效日当天尾盘(14:45–15:00)趁被动基金买入最高峰逢高兑现。**铁律:切忌生效日后追高接盘**(回测数据显示生效后 T+5 往往冲高回落)。
|
|
59
|
+
|
|
60
|
+
#### 深度解析 2:场景二【大跌逆向托底护盘 (SC-02)】
|
|
61
|
+
- **金融物理学与核心驱动**:市场大跌时,中央汇金、社保或险资 FOF 出于平抑波动与战略维稳需求,借道沪深 300、科创 50、上证 50 等大宽基 ETF 天量净申购($\Delta S_k \gg 0$)。基金经理收到申购资金后必须按高权重硬性买入成分股龙头。
|
|
62
|
+
- **实战案例对账**:
|
|
63
|
+
- *2026-11-02 市场调整日*:科创50ETF (588000) 单日净申购 +55.44 亿份,单日向石头科技灌入 +6,227 万元托底资金;创业板+沪深300ETF 同日向中际旭创传导 +8.02 亿元被动买盘。
|
|
64
|
+
- **全生命周期操盘 SOP**:
|
|
65
|
+
1. **盘后定盘核验(当日 18:30)**:运行 `uv run python system/scripts/recommend_etf_stocks.py --scenario 2`,确认宽基 ETF 出现百亿级净申购且传导买盘占个股成交额 $>5\%$;
|
|
66
|
+
2. **次日开盘介入**:次日早盘低吸挂钩 ETF 中权重排名前 5 的龙头标的;
|
|
67
|
+
3. **波段目标与风控**:博弈 3–5 个交易日日K超跌反弹;若日K跌破托底日最低价则坚决止损。
|
|
68
|
+
|
|
69
|
+
#### 深度解析 3:场景三【赛道量价双击螺旋 (SC-03)】
|
|
70
|
+
- **金融物理学与核心驱动**:个股领涨赛道 $\rightarrow$ 自由流通市值膨胀 $\rightarrow$ ETF 权重占比 $w_{k,i}$ 自然漂移上升 $\rightarrow$ 赛道 ETF 业绩亮眼吸引场外散户追高申购 $\rightarrow$ 新申购资金按更高权重继续买入该龙头,形成自我强化的正反馈双击螺旋。
|
|
71
|
+
- **实战案例对账**:
|
|
72
|
+
- *科沃斯 (2025 Q3)*:权重从 3.79% 增至 5.36%,单季获 ETF 狂买 +673 万股,股价从 58 元冲上 109.7 元翻倍;
|
|
73
|
+
- *中际旭创 (25Q3–26Q2)*:在光通信与创业板 ETF 中权重从 3.67% 飙升至 14.54%,量价齐飞。
|
|
74
|
+
- **全生命周期操盘 SOP**:
|
|
75
|
+
1. **持仓识别**:季报/PCF 权重时序表中个股权重连续 2~3 个季度提升,且北向资金与 ETF 持股数同步共振增长;
|
|
76
|
+
2. **顺势持股**:属于中线主升浪核心加速段,只要挂钩 ETF 每日份额持续净增,让利润奔跑;
|
|
77
|
+
3. **离场警戒**:一旦挂钩 ETF 份额增速放缓甚至转为负增长,或日K高位放量长上影线转为折价,立即减仓锁定利润。
|
|
78
|
+
|
|
79
|
+
#### 深度解析 4:场景四【抛压出清反转买点 (SC-04)】
|
|
80
|
+
- **金融物理学与核心驱动**:个股基本面并未恶化,仅因指数编制调整、权重上限规避或成分股剔除等技术性原因,遭挂钩 ETF 机械式无差别减持砸出“黄金坑”;随后最新数据确认 ETF 抛压出清归零,而北向资金、险资或公司回购在底部全盘接走筹码。
|
|
81
|
+
- **实战案例对账**:
|
|
82
|
+
- *科沃斯 (2026 Q2–Q3)*:26Q2 两大机器人 ETF 机械砍仓 -688 万股砸出大底;26Q3 ETF 抛压耗尽止跌回补 +145 万股,而北向资金单季暴买 +390.38 万股 (+37.1%),随后展开强劲中级反弹。
|
|
83
|
+
- **全生命周期操盘 SOP**:
|
|
84
|
+
1. **识别黄金坑**:上期 ETF 大幅减持砸盘,本期 ETF 减持归零或回补,且最新期外资大幅加仓;
|
|
85
|
+
2. **中线买入**:属于胜率最高的“左侧向右侧切换”买点,安全边际极高、拉升阻力极小,适合中线建仓布局。
|
|
86
|
+
|
|
87
|
+
#### 深度解析 5:场景五【行业被动大潮共振 (SC-05)】
|
|
88
|
+
- **金融物理学与核心驱动**:宏观产业逻辑或重大政策共振下,全市场某一级行业 ETF 出现群体性净申购。由于被动指数基金必须全额复制成分股,行业内所有龙头标的获得全市场无差别的增量资金抬轿。
|
|
89
|
+
- **实战案例对账**:
|
|
90
|
+
- *半导体与电子赛道共振*:半导体ETF (512480)、芯片ETF (159995)、科创芯片ETF (588200) 单日集体录得巨额净申购,行业资金净流入突破 60 亿元,中芯国际、海光信息、圣邦股份凭借行业最高的单亿申购弹性获得高强度被动买盘抢筹。
|
|
91
|
+
- **全生命周期操盘 SOP**:
|
|
92
|
+
1. **行业筛选**:运行系统扫描 31 个申万/中证一级行业,定位 ETF 净申购比例 $\ge 80\%$ 且净流入超 50 亿元的共振赛道;
|
|
93
|
+
2. **龙头聚焦**:切忌买入行业后排杂毛,必须挑选该行业中“单亿申购弹性最高”的前 3 只核心细分龙头(弹性 $\ge 500$ 万元/亿元);
|
|
94
|
+
3. **止盈策略**:当行业整体 ETF 净申购比例跌破 50% 时分批止盈离场。
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### 2. 三大高危反噬与排雷防御场景 (PRD F2.4 & Sentinel)
|
|
99
|
+
|
|
100
|
+
在被动投资大时代,盲目迷信 ETF 资金极易落入陷阱。系统内置严格的风险防御与哨兵机制:
|
|
101
|
+
|
|
102
|
+
| 高危场景代码 | 风险陷阱类型 | 核心量化触发条件 | 市场危害机制 | 严格防御与操盘 SOP |
|
|
103
|
+
|:---:|:---|:---|:---|:---|
|
|
104
|
+
| **TRAP-01** | **ETF 流动性踩踏失血预警**<br>(Liquidity Run Sentinel) | 1. ETF 持股市值占自由流通市值 $>12\%$<br>2. 核心 ETF 连续 5 日定盘净赎回<br>3. 跌破 20日均线且被动净卖盘占日成交 $>8\%$ | 被动抛售打压股价 $\rightarrow$ 基民恐慌赎回 $\rightarrow$ ETF 继续二级市场砸盘 $\rightarrow$ 触发多头止损踩踏,形成灾难性“多杀多”失血挤兑。 | 系统触发 **`⚠️ ETF 踩踏失血风险高危标的`** 警报;**严禁任何形式左侧抄底**;已持仓者应果断止损或启动熔断保护。 |
|
|
105
|
+
| **TRAP-02** | **高位背离接盘陷阱**<br>(Smart Money Exiting) | 1. 股价处于历史高位或已透支估值<br>2. 季报/PCF 显示北向外资/机构单季大幅砍仓<br>3. 挂钩 ETF 持股数却因散户越跌越买创历史新高 | 聪明钱已借道 ETF 的申购流动性完成高位出货派发,场内沉淀的全是无定价权且易恐慌的散户基民;一旦申购资金断流,股价将遭遇腰斩。 | 运行 `etf_flow_tracker.py` 查验 6 期筹码穿透链,凡出现“外资撤退、散户借 ETF 高位接盘”严重背离者,坚决离场规避。 |
|
|
106
|
+
| **TRAP-03** | **低弹性钝化错觉陷阱**<br>(Low Elasticity Illusion) | 1. 个股在挂钩 ETF 中的权重 $<1.5\%$<br>2. 单亿申购弹性 $<300$ 万元/亿元 | 即使挂钩 ETF 获得百亿级天量申购,分配到该股的被动买盘微乎其微,完全无法抵御主动主力的日常抛压。 | 将此类标的判定为“主动资金主导票”,走势 100% 取决于个股基本面与游资博弈,切忌幻想靠 ETF 申购救命或解套。 |
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
### 3. 两大一二级市场定盘套利沉淀场景 (PRD F1.3)
|
|
111
|
+
|
|
112
|
+
坚决杜绝盘中未结算噪音,立足每日 18:30 官方定盘折溢价与一二级市场申赎套利沉淀:
|
|
113
|
+
|
|
114
|
+
1. **持续溢价申购沉淀场景 (Premium Arbitrage Inflow)**:
|
|
115
|
+
- **量化触发条件**:ETF 日K连续 2~3 个交易日收盘定盘维持显著溢价(折溢价率 $\ge +0.3\%$),且官方定盘份额持续净增;
|
|
116
|
+
- **资金传导机制**:套利资金在二级市场溢价卖出 ETF,在一级市场向基金公司申购 ETF 份额(按 PCF 清单在现货市场硬性买入成分股一揽子股票),在收盘定盘后对成分股形成刚性持续净买盘沉淀;
|
|
117
|
+
- **实战指导**:套利沉淀资金对成分股次日开盘及后续交易日具有估值向上修复的压迫力。
|
|
118
|
+
2. **持续折价赎回沉淀场景 (Discount Arbitrage Outflow)**:
|
|
119
|
+
- **量化触发条件**:ETF 日K连续 2~3 个交易日收盘定盘维持显著折价(折溢价率 $\le -0.3\%$),且官方定盘份额持续缩水;
|
|
120
|
+
- **资金传导机制**:套利资金在二级市场折价买入 ETF,向基金公司申请赎回成分股一揽子股票,随后在二级市场无差别抛售变现;
|
|
121
|
+
- **实战指导**:对成分股日K波段形成持续套利抛压,需防范估值向下牵引风险。
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
### 4. 三大事件研究回测情境 (PRD F4.1 Event Study)
|
|
126
|
+
|
|
127
|
+
基于真实历史 K 线对三大经典被动资金事件进行全量回测与容量衰减检验:
|
|
128
|
+
|
|
129
|
+
| 事件代码 | 事件情境名称 | 事件触发定义 | 核心回测观察指标 | 策略应用结论 |
|
|
130
|
+
|:---:|:---|:---|:---|:---|
|
|
131
|
+
| **Event A** | **巨量资金逆向托底** | ETF 单日净申购突破过去 60 日 95 分位数 | T+1 ~ T+20 CAR 走势、5日胜率、盈亏比、最大回撤 | 急跌日托底买入在 T+5 胜率与盈亏比显著,适合博弈超跌反弹。 |
|
|
132
|
+
| **Event B** | **指数调样公告驱动** | 指数调样名单官方公告日 (5月31日 / 11月30日) | 公告后 T+1 ~ T+20 累计超额收益 CAR | 调样公告后被动增量资金具有持续确定性配置红利。 |
|
|
133
|
+
| **Event C** | **生效前抢跑与兑现** | 调样名单生效日前 5 个交易日 | 生效前 5 天至生效日当天尾盘 CAR 及生效后回撤 | **生效日前 5 天冲高,生效日尾盘必须兑现**;生效后追高极易产生显著回撤。 |
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 快速上手
|
|
137
|
+
|
|
138
|
+
### 1. 环境准备
|
|
139
|
+
本项目锁死 **Python 3.12**(适配 `kdata-quant` 二进制 C 扩展 Wheel),统一使用 `uv` 管理依赖:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
uv sync
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 2. 常用终端 CLI 命令
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# 1. 运行主选股推荐引擎 (输出 Top-5 核心利好标的与买点建议)
|
|
149
|
+
uv run python main.py
|
|
150
|
+
|
|
151
|
+
# 2. 启动 Rich TUI 终端全功能交互看板 (资金热力Top-5 + 选股推荐池 + 6期持仓ASCII走势)
|
|
152
|
+
uv run python main.py --tui
|
|
153
|
+
|
|
154
|
+
# 3. 运行全市场选股扫描器 (支持 Markdown / JSON / 场景筛选)
|
|
155
|
+
uv run python system/scripts/recommend_etf_stocks.py --top 10 --markdown
|
|
156
|
+
uv run python system/scripts/recommend_etf_stocks.py --scenario 1 # 仅筛选场景一 (调样重配暴击)
|
|
157
|
+
uv run python system/scripts/recommend_etf_stocks.py --scenario 2 # 仅筛选场景二 (逆向托底护盘)
|
|
158
|
+
uv run python system/scripts/recommend_etf_stocks.py --scenario 3 # 仅筛选场景三 (动量正反馈螺旋)
|
|
159
|
+
uv run python system/scripts/recommend_etf_stocks.py --scenario 4 # 仅筛选场景四 (抛压出清反转)
|
|
160
|
+
uv run python system/scripts/recommend_etf_stocks.py --scenario 5 # 仅筛选场景五 (行业大潮共振)
|
|
161
|
+
|
|
162
|
+
# 4. 运行单股 ETF 资金时序与北向穿透诊断
|
|
163
|
+
uv run python system/scripts/etf_flow_tracker.py 300750
|
|
164
|
+
uv run python system/scripts/etf_flow_tracker.py 603486
|
|
165
|
+
|
|
166
|
+
# 5. 扫描全市场 ETF 真实定盘折溢价时序与一二级套利沉淀信号
|
|
167
|
+
uv run python main.py --arbitrage
|
|
168
|
+
|
|
169
|
+
# 6. 运行真实 K 线事件研究 (Event Study) 回测
|
|
170
|
+
uv run python main.py --backtest A # Event A: 巨额申购托底
|
|
171
|
+
uv run python system/scripts/run_event_study.py --event C # Event C: 调样生效前抢跑兑现
|
|
172
|
+
|
|
173
|
+
# 7. 运行指数定期调样“前置预判” (提前 30–45 天锁定调样名单)
|
|
174
|
+
uv run python system/scripts/rebalance_predictor.py 000300
|
|
175
|
+
|
|
176
|
+
# 8. 启动 FastAPI REST API 微服务 (含交互式 Swagger 文档: http://127.0.0.1:8000/docs)
|
|
177
|
+
uv run python main.py --api --port 8000
|
|
178
|
+
|
|
179
|
+
# 9. 运行全量自动化测试套件
|
|
180
|
+
uv run pytest -v
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Python 开发调用:顶层模块与函数导出
|
|
186
|
+
|
|
187
|
+
所有核心函数已收敛到 `etf_flow` 顶层导出(亦完整保留 `etf_tracker` 兼容别名),支持直接在量化策略或数据流水线中调用:
|
|
188
|
+
|
|
189
|
+
```python
|
|
190
|
+
import etf_flow as etf # 亦兼容 import etf_tracker as etf
|
|
191
|
+
|
|
192
|
+
# 1. 全市场扫描 Top-5 核心利好标的
|
|
193
|
+
recs = etf.scan_and_recommend_stocks(top_n=5, scenario_filter=1)
|
|
194
|
+
for r in recs:
|
|
195
|
+
print(f"[{r.star_rating}] {r.stock_name} ({r.stock_code}) 得分: {r.composite_score} 买盘: +{r.passive_flow_1d_wan}万")
|
|
196
|
+
|
|
197
|
+
# 2. 提取 100% PCF 成分股穿透权重
|
|
198
|
+
weights = etf.get_pcf_stock_weights("510300")
|
|
199
|
+
|
|
200
|
+
# 3. 分析单只 ETF 日终官方定盘折溢价与套利沉淀
|
|
201
|
+
signal = etf.analyze_settled_arbitrage_flow("510300")
|
|
202
|
+
print(signal.signal_desc, signal.arbitrage_pressure_wan)
|
|
203
|
+
|
|
204
|
+
# 4. 测算个股流动性冲击与承接天数
|
|
205
|
+
metrics = etf.calculate_stock_liquidity_impact("600519", 1600.0, 35000.0)
|
|
206
|
+
print(metrics.impact_rating, metrics.days_to_cover)
|
|
207
|
+
|
|
208
|
+
# 5. 指数调样前置预测
|
|
209
|
+
forecast = etf.predict_index_rebalance("000300")
|
|
210
|
+
|
|
211
|
+
# 6. 运行真实 K 线事件研究回测
|
|
212
|
+
engine = etf.EventStudyEngine()
|
|
213
|
+
res = engine.run_event_study("A")
|
|
214
|
+
print(f"胜率: {res.win_rate_pct}% | T+5 CAR: +{res.mean_car_t5}%")
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
👉 **完整的 Python 模块导出清单、函数签名、传参规范与数据模型详见专门文档:[docs/API.md](docs/API.md)**。
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## 系统架构与核心模块对照 (v2.1)
|
|
222
|
+
|
|
223
|
+
| 模块文件 | PRD 功能维度 | 核心量化职责与实现特性 |
|
|
224
|
+
|:---|:---|:---|
|
|
225
|
+
| `src/etf_flow/universe.py` | F1.2 动态标的池 | AUM>10亿、ADV>5000万动态全市场池与 31 个申万一级行业映射 |
|
|
226
|
+
| `src/etf_flow/pcf.py` | F1.1 PCF 清单穿透 | 每日 100% 全成分股高频穿透,覆盖非 Top-10 盲区,Parquet 本地缓存 |
|
|
227
|
+
| `src/etf_flow/scale.py` | F1.2 双所份额对账 | 沪深双交易所官方日频定盘份额无损合并与 1日/5日变动测算 |
|
|
228
|
+
| `src/etf_flow/arbitrage.py` | F1.3 定盘套利沉淀 | 接入官方日终 NAV 与收盘价真实对账,识别连续折溢价套利资金沉淀 |
|
|
229
|
+
| `src/etf_flow/impact.py` | F2.1 流动性冲击模型 | 20日 ADV 冲击度、承接天数 (Days to Cover) 与自由流通市值吸收压力 |
|
|
230
|
+
| `src/etf_flow/rebalance.py` | F2.2 调样前置预测 | 还原四大指数编制规则,每年 4月/10月提前 30-45 天预测调入名单 |
|
|
231
|
+
| `src/etf_flow/sentinel.py` | F2.3 & F2.4 归因与预警 | 国家队/险资/散户归因,严格执行 PRD F2.4 三合一流动性踩踏失血预警 |
|
|
232
|
+
| `src/etf_flow/recommender.py`| F3.1 & F3.2 策略与赋分 | 五大场景化策略矩阵,Score 综合赋分 (0-100),执行 PCF 现金替代折减 |
|
|
233
|
+
| `src/etf_flow/backtest.py` | F4.1 事件研究回测 | 基于真实日K计算 Event A/B/C 累计超额收益 CAR、MDD 与动态容量衰减 |
|
|
234
|
+
| `src/etf_flow/api.py` | F5.3 开放 REST API | FastAPI 高性能微服务网关,支持推荐池、单股画像、套利与回测端点 |
|
|
235
|
+
| `system/scripts/tui_dashboard.py`| F5.1 Rich TUI 终端看板 | 全市场 ETF 资金热力看板、动态推荐池、6 期持仓 ASCII 走势图 |
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## 常用操作 Makefile 命令指南
|
|
241
|
+
|
|
242
|
+
项目内置标准 `Makefile`,支持环境准备、Wheel 打包、分发发布与日常量化运行:
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
# 1. 查看所有支持的操作与参数帮助
|
|
246
|
+
make help
|
|
247
|
+
|
|
248
|
+
# 2. 打包与构建 (输出 Wheel 和源码包)
|
|
249
|
+
make wheel # 仅构建 Wheel 包至 dist/*.whl
|
|
250
|
+
make sdist # 仅构建源码包至 dist/*.tar.gz
|
|
251
|
+
make build # 同时构建 Wheel 与 sdist
|
|
252
|
+
make inspect-wheel # 查看最新生成的 Wheel 包内部文件清单
|
|
253
|
+
|
|
254
|
+
# 3. 发布到仓库
|
|
255
|
+
make publish-dry-run # 模拟发布预演,验证凭据与打包完整性
|
|
256
|
+
make publish-test # 上传发布到 TestPyPI 测试源
|
|
257
|
+
make publish # 上传发布到 PyPI 官方生产源 (可传 TOKEN=xxx)
|
|
258
|
+
|
|
259
|
+
# 4. 环境与依赖
|
|
260
|
+
make sync # 同步锁定依赖
|
|
261
|
+
make dev # 以可编辑模式安装开发包 (uv pip install -e .)
|
|
262
|
+
make test # 运行单元测试套件
|
|
263
|
+
make test-cov # 运行测试并输出代码覆盖率报告
|
|
264
|
+
|
|
265
|
+
# 5. 量化业务运行
|
|
266
|
+
make run # 运行每日利好选股推荐雷达
|
|
267
|
+
make flow STOCK=603486 # 运行单股 ETF 资金穿透诊断
|
|
268
|
+
make recommend # 全市场 ETF 资金流动扫描
|
|
269
|
+
make api # 启动 FastAPI 后端服务
|
|
270
|
+
make clean # 清理所有临时构建缓存与 dist 目录
|
|
271
|
+
```
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## 关联文档索引
|
|
275
|
+
|
|
276
|
+
- 📖 **[docs/API.md](docs/API.md)**:完整 Python API 模块与函数调用手册(所有导出符号签名、传参、返回对象与实战样例)
|
|
277
|
+
- 📋 **[docs/PRD.md](docs/PRD.md)**:完整产品需求文档(业务背景、功能演进矩阵与路线图)
|
|
278
|
+
- 🛠️ **[AGENTS.md](AGENTS.md)**:量化架构设计哲学、数学模型、数据源优先级与 Agent 协作指南
|
etf_flow-0.1.0/README.md
ADDED
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
# ETF Flow (etf-flow)
|
|
2
|
+
|
|
3
|
+
高性能 ETF 资金流动与权重变动跟踪、成分股被动买盘测算与利好选股推荐系统。
|
|
4
|
+
|
|
5
|
+
> **核心设计哲学**:坚决摒弃盘中秒级噪音与未结算分时跳动,全面立足每日 **18:30 交易所官方结算定盘后的日K线、日终法定份额变动、官方 PCF 清单以及多日/周K/调样周期数据**。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 核心数学模型:被动买盘“双引擎”
|
|
10
|
+
|
|
11
|
+
对于任意标的个股 $i$,其接收到的全市场 ETF 被动买卖盘净额($\Delta B_i$)由两大引擎共同决定:
|
|
12
|
+
|
|
13
|
+
$$\Delta B_i = \sum_{k \in \mathcal{U}_{ETF}} \left( \underbrace{\Delta S_k \times P_k \times w_{k, i} \times (1 - c_i)}_{\text{① 流量引擎}} + \underbrace{A_k \times \Delta w_{k, i}}_{\text{② 重配引擎}} \right)$$
|
|
14
|
+
|
|
15
|
+
1. **① 流量引擎**:$\Delta S_k$(当日官方定盘净申购份额)$\times P_k$(日K收盘价)$\times w_{k,i}$(成分股权重);遇现金替代比例 $>30\%$ 时乘以 $(1 - c_i)$ 自动折减;
|
|
16
|
+
2. **② 重配引擎**:$A_k$(存量 ETF 总资产 AUM)$\times \Delta w_{k,i}$(定期调样或高频 PCF 引起的权重跳升产生的存量建仓资金);
|
|
17
|
+
3. **流动性冲击与承接天数**:
|
|
18
|
+
$$\text{DaysToCover}_i = \frac{\Delta \text{Shares}_i}{\text{MedianVolume}_{20d}(i)}, \quad \text{ImpactRatio}_i = \frac{\Delta B_i}{\text{ADV}_{20}(i)} \times 100\%$$
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 全场景量化投资与策略矩阵 (All Quantitative Scenarios & SOP)
|
|
23
|
+
|
|
24
|
+
ETF Tracker 将市场中的被动资金流动、指数编制重配规则、盘后定盘行为与筹码结构穿透,体系化抽象为**五大黄金利好场景**、**三大高危反噬排雷场景**、**两大一二级市场定盘套利沉淀场景**与**三大事件研究回测情境**,提供覆盖全生命周期的量化指标判定与实战操作 SOP。
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
### 1. 五大黄金利好场景与推荐策略矩阵 (PRD F3.1)
|
|
29
|
+
|
|
30
|
+
| 场景代码 | 场景名称 | 核心金融驱动机制 | 关键量化判定阈值 | 最佳买点与生命周期操盘 SOP |
|
|
31
|
+
|:---:|:---|:---|:---|:---|
|
|
32
|
+
| **SC-01** | **存量调样重配暴击**<br>(Rebalance Windfall) | 每年 5月底/11月底指数定期调样,新纳入或权重跳升导致百亿级挂钩 ETF 必须在生效日前硬性被动建仓,触发存量重配暴击($A_{ETF} \times \Delta w_i$)。 | • 预计新增权重 $\Delta w_i \ge 1.0\%$<br>• 挂钩 ETF 总规模 $\ge 100$ 亿元<br>• 流动性冲击度 $\text{Impact} \ge 10\%$<br>• 测算建仓股数 $\ge 3\sim 5$ 倍日成交 | **4月中/10月中**通过调样预测模型潜伏候选股;**5月底/11月底公告当晚**右侧买入,持有至 **6月中/12月中生效日当天尾盘**逢高兑现(切忌生效后追高接盘)。 |
|
|
33
|
+
| **SC-02** | **大跌逆向托底护盘**<br>(Counter-Cyclical Floor) | 市场恐慌急跌时,国家队(中央汇金)、险资 FOF 借道宽基 ETF 巨额净申购($\Delta S \gg 0$),通过高权重成分股硬性托举大盘。 | • 挂钩大宽基单日净申购 $\ge 10\sim 20$ 亿份<br>• 单亿申购弹性 $\ge 500$ 万元/亿元<br>• 单日传导被动买盘 $\ge 3000$ 万元且占成交 $\ge 5\%$ | 急跌日 18:30 官方定盘确认巨额被动托底后,**次日开盘逢低买入**核心龙头(前5大权重股),博弈 3–5 个交易日日K超跌反弹与估值修复。 |
|
|
34
|
+
| **SC-03** | **赛道量价双击螺旋**<br>(Momentum Flywheel) | 赛道领涨龙头自由流通市值自然漂移膨胀 $\rightarrow$ ETF 权重占比持续提升 $\rightarrow$ 场外增量申购追高 $\rightarrow$ 新增资金按更高权重买入该龙头的正反馈飞轮。 | • 核心 ETF 中权重排名前列且领涨<br>• 挂钩 ETF 5 日份额净增 $> 5\%$<br>• 单亿申购弹性 $\ge 500$ 万元/亿元<br>• 季报/PCF 权重时序连续上行且外资共振加仓 | **顺势右侧持仓**核心主升加速段;只要挂钩 ETF 每日份额持续正增长且北向资金未大幅砍仓,坚定持股;以 ETF 份额增速钝化或转负为离场信号。 |
|
|
35
|
+
| **SC-04** | **抛压出清反转买点**<br>(Exhaustion Reversal) | 个股基本面未坏,仅因指数调权被 ETF 机械性砍仓砸出深坑;随后最新数据确认 ETF 砍仓结束(抛压归零),聪明钱(外资/机构)在底部全盘接走筹码。 | • 上期权重骤降砸坑,本期被动卖压归零企稳<br>• 单亿申购弹性 $\ge 500$ 万元/亿元<br>• 最新期北向资金/机构持股大幅正增长 | **中线胜率极高的“左侧向右侧切换”买点**(胜率超 75%),安全边际极高,场内浮筹沉淀充分,无被动抛盘掣肘,适合中线底仓配置。 |
|
|
36
|
+
| **SC-05** | **行业被动大潮共振**<br>(Sector Passive Tide) | 宏观产业催化下,某一级行业出现板块级 ETF 资金集体涌入,行业内挂钩 ETF 呈现百花齐放式同步净申购,增量资金在全行业各龙头股中按权重无差别建仓。 | • 某一级行业下 $\ge 80\%$ ETF 同步定盘净申购<br>• 行业整体单日或 5 日流入 $\ge 50$ 亿元<br>• 个股单亿申购弹性位列该行业前 3 名 | 顺应行业级被动大潮共振加速段,重点布局该行业中**“单亿申购弹性最高”的前 3 只核心细分龙头**,享受被动真金白银持续抬轿溢价。 |
|
|
37
|
+
|
|
38
|
+
#### 深度解析 1:场景一【存量调样重配暴击 (SC-01)】
|
|
39
|
+
- **金融物理学与核心驱动**:根据中证与国证指数编制规则,每年 5 月底与 11 月底锁定定期调样名单并于次月中旬生效。当个股被调入核心指数或权重系数上调时,挂钩该指数的全部存量 ETF 被动基金(千亿级存量资产 $A_k$)受契约约束,必须在生效日前严格建仓到位:
|
|
40
|
+
$$\Delta B_i^{\text{Rebalance}} = \sum_{k} A_k \times \Delta w_{k, i}$$
|
|
41
|
+
- **实战案例对账**:
|
|
42
|
+
- *2026年6月调样*:三花智控调入中证机器人指数前十(抢占 8.37% 权重)、领益智造调入国证机器人第一重仓(6.09%),获挂钩 ETF 十亿级被动硬性买盘建仓。
|
|
43
|
+
- **全生命周期操盘 SOP**:
|
|
44
|
+
1. **前置预判期(4月中旬 / 10月中旬)**:运行 `uv run python system/scripts/rebalance_predictor.py 000300` 提前 30–45 天锁定高概率调入名单,左侧低吸潜伏;
|
|
45
|
+
2. **公告确认期(5月31日 / 11月30日)**:官方名单发布当晚核验确认,右侧跟进加仓;
|
|
46
|
+
3. **生效兑现期(6月 / 12月第二个周五)**:在生效日当天尾盘(14:45–15:00)趁被动基金买入最高峰逢高兑现。**铁律:切忌生效日后追高接盘**(回测数据显示生效后 T+5 往往冲高回落)。
|
|
47
|
+
|
|
48
|
+
#### 深度解析 2:场景二【大跌逆向托底护盘 (SC-02)】
|
|
49
|
+
- **金融物理学与核心驱动**:市场大跌时,中央汇金、社保或险资 FOF 出于平抑波动与战略维稳需求,借道沪深 300、科创 50、上证 50 等大宽基 ETF 天量净申购($\Delta S_k \gg 0$)。基金经理收到申购资金后必须按高权重硬性买入成分股龙头。
|
|
50
|
+
- **实战案例对账**:
|
|
51
|
+
- *2026-11-02 市场调整日*:科创50ETF (588000) 单日净申购 +55.44 亿份,单日向石头科技灌入 +6,227 万元托底资金;创业板+沪深300ETF 同日向中际旭创传导 +8.02 亿元被动买盘。
|
|
52
|
+
- **全生命周期操盘 SOP**:
|
|
53
|
+
1. **盘后定盘核验(当日 18:30)**:运行 `uv run python system/scripts/recommend_etf_stocks.py --scenario 2`,确认宽基 ETF 出现百亿级净申购且传导买盘占个股成交额 $>5\%$;
|
|
54
|
+
2. **次日开盘介入**:次日早盘低吸挂钩 ETF 中权重排名前 5 的龙头标的;
|
|
55
|
+
3. **波段目标与风控**:博弈 3–5 个交易日日K超跌反弹;若日K跌破托底日最低价则坚决止损。
|
|
56
|
+
|
|
57
|
+
#### 深度解析 3:场景三【赛道量价双击螺旋 (SC-03)】
|
|
58
|
+
- **金融物理学与核心驱动**:个股领涨赛道 $\rightarrow$ 自由流通市值膨胀 $\rightarrow$ ETF 权重占比 $w_{k,i}$ 自然漂移上升 $\rightarrow$ 赛道 ETF 业绩亮眼吸引场外散户追高申购 $\rightarrow$ 新申购资金按更高权重继续买入该龙头,形成自我强化的正反馈双击螺旋。
|
|
59
|
+
- **实战案例对账**:
|
|
60
|
+
- *科沃斯 (2025 Q3)*:权重从 3.79% 增至 5.36%,单季获 ETF 狂买 +673 万股,股价从 58 元冲上 109.7 元翻倍;
|
|
61
|
+
- *中际旭创 (25Q3–26Q2)*:在光通信与创业板 ETF 中权重从 3.67% 飙升至 14.54%,量价齐飞。
|
|
62
|
+
- **全生命周期操盘 SOP**:
|
|
63
|
+
1. **持仓识别**:季报/PCF 权重时序表中个股权重连续 2~3 个季度提升,且北向资金与 ETF 持股数同步共振增长;
|
|
64
|
+
2. **顺势持股**:属于中线主升浪核心加速段,只要挂钩 ETF 每日份额持续净增,让利润奔跑;
|
|
65
|
+
3. **离场警戒**:一旦挂钩 ETF 份额增速放缓甚至转为负增长,或日K高位放量长上影线转为折价,立即减仓锁定利润。
|
|
66
|
+
|
|
67
|
+
#### 深度解析 4:场景四【抛压出清反转买点 (SC-04)】
|
|
68
|
+
- **金融物理学与核心驱动**:个股基本面并未恶化,仅因指数编制调整、权重上限规避或成分股剔除等技术性原因,遭挂钩 ETF 机械式无差别减持砸出“黄金坑”;随后最新数据确认 ETF 抛压出清归零,而北向资金、险资或公司回购在底部全盘接走筹码。
|
|
69
|
+
- **实战案例对账**:
|
|
70
|
+
- *科沃斯 (2026 Q2–Q3)*:26Q2 两大机器人 ETF 机械砍仓 -688 万股砸出大底;26Q3 ETF 抛压耗尽止跌回补 +145 万股,而北向资金单季暴买 +390.38 万股 (+37.1%),随后展开强劲中级反弹。
|
|
71
|
+
- **全生命周期操盘 SOP**:
|
|
72
|
+
1. **识别黄金坑**:上期 ETF 大幅减持砸盘,本期 ETF 减持归零或回补,且最新期外资大幅加仓;
|
|
73
|
+
2. **中线买入**:属于胜率最高的“左侧向右侧切换”买点,安全边际极高、拉升阻力极小,适合中线建仓布局。
|
|
74
|
+
|
|
75
|
+
#### 深度解析 5:场景五【行业被动大潮共振 (SC-05)】
|
|
76
|
+
- **金融物理学与核心驱动**:宏观产业逻辑或重大政策共振下,全市场某一级行业 ETF 出现群体性净申购。由于被动指数基金必须全额复制成分股,行业内所有龙头标的获得全市场无差别的增量资金抬轿。
|
|
77
|
+
- **实战案例对账**:
|
|
78
|
+
- *半导体与电子赛道共振*:半导体ETF (512480)、芯片ETF (159995)、科创芯片ETF (588200) 单日集体录得巨额净申购,行业资金净流入突破 60 亿元,中芯国际、海光信息、圣邦股份凭借行业最高的单亿申购弹性获得高强度被动买盘抢筹。
|
|
79
|
+
- **全生命周期操盘 SOP**:
|
|
80
|
+
1. **行业筛选**:运行系统扫描 31 个申万/中证一级行业,定位 ETF 净申购比例 $\ge 80\%$ 且净流入超 50 亿元的共振赛道;
|
|
81
|
+
2. **龙头聚焦**:切忌买入行业后排杂毛,必须挑选该行业中“单亿申购弹性最高”的前 3 只核心细分龙头(弹性 $\ge 500$ 万元/亿元);
|
|
82
|
+
3. **止盈策略**:当行业整体 ETF 净申购比例跌破 50% 时分批止盈离场。
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
### 2. 三大高危反噬与排雷防御场景 (PRD F2.4 & Sentinel)
|
|
87
|
+
|
|
88
|
+
在被动投资大时代,盲目迷信 ETF 资金极易落入陷阱。系统内置严格的风险防御与哨兵机制:
|
|
89
|
+
|
|
90
|
+
| 高危场景代码 | 风险陷阱类型 | 核心量化触发条件 | 市场危害机制 | 严格防御与操盘 SOP |
|
|
91
|
+
|:---:|:---|:---|:---|:---|
|
|
92
|
+
| **TRAP-01** | **ETF 流动性踩踏失血预警**<br>(Liquidity Run Sentinel) | 1. ETF 持股市值占自由流通市值 $>12\%$<br>2. 核心 ETF 连续 5 日定盘净赎回<br>3. 跌破 20日均线且被动净卖盘占日成交 $>8\%$ | 被动抛售打压股价 $\rightarrow$ 基民恐慌赎回 $\rightarrow$ ETF 继续二级市场砸盘 $\rightarrow$ 触发多头止损踩踏,形成灾难性“多杀多”失血挤兑。 | 系统触发 **`⚠️ ETF 踩踏失血风险高危标的`** 警报;**严禁任何形式左侧抄底**;已持仓者应果断止损或启动熔断保护。 |
|
|
93
|
+
| **TRAP-02** | **高位背离接盘陷阱**<br>(Smart Money Exiting) | 1. 股价处于历史高位或已透支估值<br>2. 季报/PCF 显示北向外资/机构单季大幅砍仓<br>3. 挂钩 ETF 持股数却因散户越跌越买创历史新高 | 聪明钱已借道 ETF 的申购流动性完成高位出货派发,场内沉淀的全是无定价权且易恐慌的散户基民;一旦申购资金断流,股价将遭遇腰斩。 | 运行 `etf_flow_tracker.py` 查验 6 期筹码穿透链,凡出现“外资撤退、散户借 ETF 高位接盘”严重背离者,坚决离场规避。 |
|
|
94
|
+
| **TRAP-03** | **低弹性钝化错觉陷阱**<br>(Low Elasticity Illusion) | 1. 个股在挂钩 ETF 中的权重 $<1.5\%$<br>2. 单亿申购弹性 $<300$ 万元/亿元 | 即使挂钩 ETF 获得百亿级天量申购,分配到该股的被动买盘微乎其微,完全无法抵御主动主力的日常抛压。 | 将此类标的判定为“主动资金主导票”,走势 100% 取决于个股基本面与游资博弈,切忌幻想靠 ETF 申购救命或解套。 |
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### 3. 两大一二级市场定盘套利沉淀场景 (PRD F1.3)
|
|
99
|
+
|
|
100
|
+
坚决杜绝盘中未结算噪音,立足每日 18:30 官方定盘折溢价与一二级市场申赎套利沉淀:
|
|
101
|
+
|
|
102
|
+
1. **持续溢价申购沉淀场景 (Premium Arbitrage Inflow)**:
|
|
103
|
+
- **量化触发条件**:ETF 日K连续 2~3 个交易日收盘定盘维持显著溢价(折溢价率 $\ge +0.3\%$),且官方定盘份额持续净增;
|
|
104
|
+
- **资金传导机制**:套利资金在二级市场溢价卖出 ETF,在一级市场向基金公司申购 ETF 份额(按 PCF 清单在现货市场硬性买入成分股一揽子股票),在收盘定盘后对成分股形成刚性持续净买盘沉淀;
|
|
105
|
+
- **实战指导**:套利沉淀资金对成分股次日开盘及后续交易日具有估值向上修复的压迫力。
|
|
106
|
+
2. **持续折价赎回沉淀场景 (Discount Arbitrage Outflow)**:
|
|
107
|
+
- **量化触发条件**:ETF 日K连续 2~3 个交易日收盘定盘维持显著折价(折溢价率 $\le -0.3\%$),且官方定盘份额持续缩水;
|
|
108
|
+
- **资金传导机制**:套利资金在二级市场折价买入 ETF,向基金公司申请赎回成分股一揽子股票,随后在二级市场无差别抛售变现;
|
|
109
|
+
- **实战指导**:对成分股日K波段形成持续套利抛压,需防范估值向下牵引风险。
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
### 4. 三大事件研究回测情境 (PRD F4.1 Event Study)
|
|
114
|
+
|
|
115
|
+
基于真实历史 K 线对三大经典被动资金事件进行全量回测与容量衰减检验:
|
|
116
|
+
|
|
117
|
+
| 事件代码 | 事件情境名称 | 事件触发定义 | 核心回测观察指标 | 策略应用结论 |
|
|
118
|
+
|:---:|:---|:---|:---|:---|
|
|
119
|
+
| **Event A** | **巨量资金逆向托底** | ETF 单日净申购突破过去 60 日 95 分位数 | T+1 ~ T+20 CAR 走势、5日胜率、盈亏比、最大回撤 | 急跌日托底买入在 T+5 胜率与盈亏比显著,适合博弈超跌反弹。 |
|
|
120
|
+
| **Event B** | **指数调样公告驱动** | 指数调样名单官方公告日 (5月31日 / 11月30日) | 公告后 T+1 ~ T+20 累计超额收益 CAR | 调样公告后被动增量资金具有持续确定性配置红利。 |
|
|
121
|
+
| **Event C** | **生效前抢跑与兑现** | 调样名单生效日前 5 个交易日 | 生效前 5 天至生效日当天尾盘 CAR 及生效后回撤 | **生效日前 5 天冲高,生效日尾盘必须兑现**;生效后追高极易产生显著回撤。 |
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 快速上手
|
|
125
|
+
|
|
126
|
+
### 1. 环境准备
|
|
127
|
+
本项目锁死 **Python 3.12**(适配 `kdata-quant` 二进制 C 扩展 Wheel),统一使用 `uv` 管理依赖:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
uv sync
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### 2. 常用终端 CLI 命令
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# 1. 运行主选股推荐引擎 (输出 Top-5 核心利好标的与买点建议)
|
|
137
|
+
uv run python main.py
|
|
138
|
+
|
|
139
|
+
# 2. 启动 Rich TUI 终端全功能交互看板 (资金热力Top-5 + 选股推荐池 + 6期持仓ASCII走势)
|
|
140
|
+
uv run python main.py --tui
|
|
141
|
+
|
|
142
|
+
# 3. 运行全市场选股扫描器 (支持 Markdown / JSON / 场景筛选)
|
|
143
|
+
uv run python system/scripts/recommend_etf_stocks.py --top 10 --markdown
|
|
144
|
+
uv run python system/scripts/recommend_etf_stocks.py --scenario 1 # 仅筛选场景一 (调样重配暴击)
|
|
145
|
+
uv run python system/scripts/recommend_etf_stocks.py --scenario 2 # 仅筛选场景二 (逆向托底护盘)
|
|
146
|
+
uv run python system/scripts/recommend_etf_stocks.py --scenario 3 # 仅筛选场景三 (动量正反馈螺旋)
|
|
147
|
+
uv run python system/scripts/recommend_etf_stocks.py --scenario 4 # 仅筛选场景四 (抛压出清反转)
|
|
148
|
+
uv run python system/scripts/recommend_etf_stocks.py --scenario 5 # 仅筛选场景五 (行业大潮共振)
|
|
149
|
+
|
|
150
|
+
# 4. 运行单股 ETF 资金时序与北向穿透诊断
|
|
151
|
+
uv run python system/scripts/etf_flow_tracker.py 300750
|
|
152
|
+
uv run python system/scripts/etf_flow_tracker.py 603486
|
|
153
|
+
|
|
154
|
+
# 5. 扫描全市场 ETF 真实定盘折溢价时序与一二级套利沉淀信号
|
|
155
|
+
uv run python main.py --arbitrage
|
|
156
|
+
|
|
157
|
+
# 6. 运行真实 K 线事件研究 (Event Study) 回测
|
|
158
|
+
uv run python main.py --backtest A # Event A: 巨额申购托底
|
|
159
|
+
uv run python system/scripts/run_event_study.py --event C # Event C: 调样生效前抢跑兑现
|
|
160
|
+
|
|
161
|
+
# 7. 运行指数定期调样“前置预判” (提前 30–45 天锁定调样名单)
|
|
162
|
+
uv run python system/scripts/rebalance_predictor.py 000300
|
|
163
|
+
|
|
164
|
+
# 8. 启动 FastAPI REST API 微服务 (含交互式 Swagger 文档: http://127.0.0.1:8000/docs)
|
|
165
|
+
uv run python main.py --api --port 8000
|
|
166
|
+
|
|
167
|
+
# 9. 运行全量自动化测试套件
|
|
168
|
+
uv run pytest -v
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Python 开发调用:顶层模块与函数导出
|
|
174
|
+
|
|
175
|
+
所有核心函数已收敛到 `etf_flow` 顶层导出(亦完整保留 `etf_tracker` 兼容别名),支持直接在量化策略或数据流水线中调用:
|
|
176
|
+
|
|
177
|
+
```python
|
|
178
|
+
import etf_flow as etf # 亦兼容 import etf_tracker as etf
|
|
179
|
+
|
|
180
|
+
# 1. 全市场扫描 Top-5 核心利好标的
|
|
181
|
+
recs = etf.scan_and_recommend_stocks(top_n=5, scenario_filter=1)
|
|
182
|
+
for r in recs:
|
|
183
|
+
print(f"[{r.star_rating}] {r.stock_name} ({r.stock_code}) 得分: {r.composite_score} 买盘: +{r.passive_flow_1d_wan}万")
|
|
184
|
+
|
|
185
|
+
# 2. 提取 100% PCF 成分股穿透权重
|
|
186
|
+
weights = etf.get_pcf_stock_weights("510300")
|
|
187
|
+
|
|
188
|
+
# 3. 分析单只 ETF 日终官方定盘折溢价与套利沉淀
|
|
189
|
+
signal = etf.analyze_settled_arbitrage_flow("510300")
|
|
190
|
+
print(signal.signal_desc, signal.arbitrage_pressure_wan)
|
|
191
|
+
|
|
192
|
+
# 4. 测算个股流动性冲击与承接天数
|
|
193
|
+
metrics = etf.calculate_stock_liquidity_impact("600519", 1600.0, 35000.0)
|
|
194
|
+
print(metrics.impact_rating, metrics.days_to_cover)
|
|
195
|
+
|
|
196
|
+
# 5. 指数调样前置预测
|
|
197
|
+
forecast = etf.predict_index_rebalance("000300")
|
|
198
|
+
|
|
199
|
+
# 6. 运行真实 K 线事件研究回测
|
|
200
|
+
engine = etf.EventStudyEngine()
|
|
201
|
+
res = engine.run_event_study("A")
|
|
202
|
+
print(f"胜率: {res.win_rate_pct}% | T+5 CAR: +{res.mean_car_t5}%")
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
👉 **完整的 Python 模块导出清单、函数签名、传参规范与数据模型详见专门文档:[docs/API.md](docs/API.md)**。
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## 系统架构与核心模块对照 (v2.1)
|
|
210
|
+
|
|
211
|
+
| 模块文件 | PRD 功能维度 | 核心量化职责与实现特性 |
|
|
212
|
+
|:---|:---|:---|
|
|
213
|
+
| `src/etf_flow/universe.py` | F1.2 动态标的池 | AUM>10亿、ADV>5000万动态全市场池与 31 个申万一级行业映射 |
|
|
214
|
+
| `src/etf_flow/pcf.py` | F1.1 PCF 清单穿透 | 每日 100% 全成分股高频穿透,覆盖非 Top-10 盲区,Parquet 本地缓存 |
|
|
215
|
+
| `src/etf_flow/scale.py` | F1.2 双所份额对账 | 沪深双交易所官方日频定盘份额无损合并与 1日/5日变动测算 |
|
|
216
|
+
| `src/etf_flow/arbitrage.py` | F1.3 定盘套利沉淀 | 接入官方日终 NAV 与收盘价真实对账,识别连续折溢价套利资金沉淀 |
|
|
217
|
+
| `src/etf_flow/impact.py` | F2.1 流动性冲击模型 | 20日 ADV 冲击度、承接天数 (Days to Cover) 与自由流通市值吸收压力 |
|
|
218
|
+
| `src/etf_flow/rebalance.py` | F2.2 调样前置预测 | 还原四大指数编制规则,每年 4月/10月提前 30-45 天预测调入名单 |
|
|
219
|
+
| `src/etf_flow/sentinel.py` | F2.3 & F2.4 归因与预警 | 国家队/险资/散户归因,严格执行 PRD F2.4 三合一流动性踩踏失血预警 |
|
|
220
|
+
| `src/etf_flow/recommender.py`| F3.1 & F3.2 策略与赋分 | 五大场景化策略矩阵,Score 综合赋分 (0-100),执行 PCF 现金替代折减 |
|
|
221
|
+
| `src/etf_flow/backtest.py` | F4.1 事件研究回测 | 基于真实日K计算 Event A/B/C 累计超额收益 CAR、MDD 与动态容量衰减 |
|
|
222
|
+
| `src/etf_flow/api.py` | F5.3 开放 REST API | FastAPI 高性能微服务网关,支持推荐池、单股画像、套利与回测端点 |
|
|
223
|
+
| `system/scripts/tui_dashboard.py`| F5.1 Rich TUI 终端看板 | 全市场 ETF 资金热力看板、动态推荐池、6 期持仓 ASCII 走势图 |
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## 常用操作 Makefile 命令指南
|
|
229
|
+
|
|
230
|
+
项目内置标准 `Makefile`,支持环境准备、Wheel 打包、分发发布与日常量化运行:
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
# 1. 查看所有支持的操作与参数帮助
|
|
234
|
+
make help
|
|
235
|
+
|
|
236
|
+
# 2. 打包与构建 (输出 Wheel 和源码包)
|
|
237
|
+
make wheel # 仅构建 Wheel 包至 dist/*.whl
|
|
238
|
+
make sdist # 仅构建源码包至 dist/*.tar.gz
|
|
239
|
+
make build # 同时构建 Wheel 与 sdist
|
|
240
|
+
make inspect-wheel # 查看最新生成的 Wheel 包内部文件清单
|
|
241
|
+
|
|
242
|
+
# 3. 发布到仓库
|
|
243
|
+
make publish-dry-run # 模拟发布预演,验证凭据与打包完整性
|
|
244
|
+
make publish-test # 上传发布到 TestPyPI 测试源
|
|
245
|
+
make publish # 上传发布到 PyPI 官方生产源 (可传 TOKEN=xxx)
|
|
246
|
+
|
|
247
|
+
# 4. 环境与依赖
|
|
248
|
+
make sync # 同步锁定依赖
|
|
249
|
+
make dev # 以可编辑模式安装开发包 (uv pip install -e .)
|
|
250
|
+
make test # 运行单元测试套件
|
|
251
|
+
make test-cov # 运行测试并输出代码覆盖率报告
|
|
252
|
+
|
|
253
|
+
# 5. 量化业务运行
|
|
254
|
+
make run # 运行每日利好选股推荐雷达
|
|
255
|
+
make flow STOCK=603486 # 运行单股 ETF 资金穿透诊断
|
|
256
|
+
make recommend # 全市场 ETF 资金流动扫描
|
|
257
|
+
make api # 启动 FastAPI 后端服务
|
|
258
|
+
make clean # 清理所有临时构建缓存与 dist 目录
|
|
259
|
+
```
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## 关联文档索引
|
|
263
|
+
|
|
264
|
+
- 📖 **[docs/API.md](docs/API.md)**:完整 Python API 模块与函数调用手册(所有导出符号签名、传参、返回对象与实战样例)
|
|
265
|
+
- 📋 **[docs/PRD.md](docs/PRD.md)**:完整产品需求文档(业务背景、功能演进矩阵与路线图)
|
|
266
|
+
- 🛠️ **[AGENTS.md](AGENTS.md)**:量化架构设计哲学、数学模型、数据源优先级与 Agent 协作指南
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "etf-flow"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "ETF tracking, quantitative analysis and opportunity radar tool"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.12,<3.13"
|
|
7
|
+
dependencies = [
|
|
8
|
+
"fastapi>=0.110.0",
|
|
9
|
+
"kdata-quant>=1.3.7",
|
|
10
|
+
"mootdx2>=1.5.4",
|
|
11
|
+
"rich>=13.0.0",
|
|
12
|
+
"uvicorn>=0.28.0",
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
[dependency-groups]
|
|
16
|
+
dev = [
|
|
17
|
+
"pytest>=8.0.0",
|
|
18
|
+
"pytest-cov>=7.1.0",
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
[build-system]
|
|
22
|
+
requires = ["setuptools>=61.0"]
|
|
23
|
+
build-backend = "setuptools.build_meta"
|
|
24
|
+
|
|
25
|
+
[tool.setuptools.packages.find]
|
|
26
|
+
where = ["src"]
|
etf_flow-0.1.0/setup.cfg
ADDED