fix: build_panel_hk补mcap_q市值分位计算(当前市值×价格比反推+每日分位)——修复hk_pe_mom零命中

This commit is contained in:
hmo
2026-08-15 07:31:29 +08:00
parent bc284b1503
commit 9fc9bb1e2d
+21 -3
View File
@@ -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()