From 9fc9bb1e2da4139cf6d8df7e7ab0bc1ee56bfdc9 Mon Sep 17 00:00:00 2001 From: hmo Date: Sat, 15 Aug 2026 07:31:29 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20build=5Fpanel=5Fhk=E8=A1=A5mcap=5Fq?= =?UTF-8?q?=E5=B8=82=E5=80=BC=E5=88=86=E4=BD=8D=E8=AE=A1=E7=AE=97(?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E5=B8=82=E5=80=BC=C3=97=E4=BB=B7=E6=A0=BC?= =?UTF-8?q?=E6=AF=94=E5=8F=8D=E6=8E=A8+=E6=AF=8F=E6=97=A5=E5=88=86?= =?UTF-8?q?=E4=BD=8D)=E2=80=94=E2=80=94=E4=BF=AE=E5=A4=8Dhk=5Fpe=5Fmom?= =?UTF-8?q?=E9=9B=B6=E5=91=BD=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/profile-scripts/build_panel_hk.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/deploy/profile-scripts/build_panel_hk.py b/deploy/profile-scripts/build_panel_hk.py index 0b027972..a14f8abe 100644 --- a/deploy/profile-scripts/build_panel_hk.py +++ b/deploy/profile-scripts/build_panel_hk.py @@ -100,6 +100,15 @@ def main(): flow = pd.DataFrame(columns=["code","date","flow1"]) print(f"资金流: {len(flow)} 条", flush=True) + # 市值(当前市值×价格比反推历史,总股本短期不变) + print("加载市值...", flush=True) + conn = sqlite3.connect(DB) + fund_mc = pd.read_sql( + "SELECT code, mcap_total FROM stock_fundamentals WHERE length(code)=5", conn) + conn.close() + fund_mc = fund_mc.dropna() + # 每只股票最近收盘价(面板尾部)作为反推基准——在面板构建后统一计算 + # 构建面板 rows = [] for idx, code in enumerate(codes): @@ -145,12 +154,21 @@ def main(): print(f" 面板 {idx+1}/{len(codes)}", flush=True) panel = pd.concat(rows, ignore_index=True) - for col in ["sec_above","news3","flow5","mcap_q","limit_up"]: + # 市值:当前市值×价格比反推历史(总股本短期不变)+ 每日市值分位 + fund_mc = fund_mc.dropna() + last_px = panel.sort_values("date").groupby("code")["close"].last().rename("last_close") + fm = fund_mc.merge(last_px, on="code", how="inner") + fm = fm[fm["last_close"] > 0] + panel = panel.merge(fm[["code", "mcap_total", "last_close"]], on="code", how="left") + panel = panel[panel["last_close"] > 0] + panel["mcap"] = panel["mcap_total"] * panel["close"] / panel["last_close"] + panel["mcap_q"] = panel.groupby("date")["mcap"].rank(pct=True) + for col in ["sec_above", "news3", "flow5", "limit_up"]: panel[col] = np.nan panel.to_pickle("/tmp/panel_12d_hk.pkl") print(f"\n港股面板v2: {len(panel)} 行 × {len(panel.columns)} 列", flush=True) - print("新增: sec_ret20(行业动量) + pe_q/pb_q(估值分位) + flow1(当日资金流)", flush=True) - print("仍缺: 资金流flow5(港股无历史)/新闻news3/mcap_q/行业above(后续补)", flush=True) + print("新增: sec_ret20(行业动量) + pe_q/pb_q(估值分位) + flow1(资金流) + mcap_q(市值分位)", flush=True) + print("仍缺: flow5(港股无历史)/news3/行业above(后续补)", flush=True) if __name__ == "__main__": main()