沪深港通数据实战:从北向资金到择时信号的全链路量化(第 11 篇):自研北向择时综合指标:净流入、成分股与排名共振
一、前言
前 10 篇分别打通了「资金面」(第 1、2 篇)、「成分股情绪」(第 3 篇)、「排名持续度」(第 8 篇)三条线索。本篇是择时综合层:把这三个单因子按权重合成一个可量化的北向择时综合打分,落库 ht_composite,作为第 12 篇实战流水线的输出目标。
二、因子来源(均来自本系列前文落库表)
| 资金面 | ht_bx_trend | signal | 第 2 篇北向净流入动量信号(−1/0/1) |
| 成分股情绪 | ht_hgtc / ht_sgtc | pc | 第 3 篇北向成分股平均涨跌幅 |
| 排名持续度 | ht_bxpm | zqszzf | 第 8 篇北向周期市值涨幅 |
三、自研综合指标
综合打分(演示用线性加权,权重可按样本外调优):
score = 0.4 * 资金面信号 + 0.3 * 成分股情绪归一 + 0.3 * 排名持续度归一
- 成分股情绪归一:mean(pc) / 10(涨跌幅百分比压缩到 ≈[−1,1])。
- 排名持续度归一:mean(zqszzf) / 10。
- 三者同向为正时 score 显著为正,代表「资金在买 + 标的走强 + 持续加仓」共振。
四、数据表设计
CREATE TABLE ht_composite (ts TEXT, bx_signal REAL, board REAL, rank REAL, score REAL);
五、完整代码
import sqlite3, pandas as pd, logging
from datetime import datetime
DB_PATH = "quant.db"
LOG_FILE = "season4_article11.log"
logging.basicConfig(filename=LOG_FILE, level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s")
def _safe_read(sql):
try:
conn = sqlite3.connect(DB_PATH)
df = pd.read_sql(sql, conn)
conn.close()
return df
except Exception:
return pd.DataFrame()
def composite_signal():
trend = _safe_read("SELECT signal FROM ht_bx_trend ORDER BY t DESC LIMIT 1")
hg = _safe_read("SELECT pc FROM ht_hgtc")
sg = _safe_read("SELECT pc FROM ht_sgtc")
rank = _safe_read("SELECT zqszzf FROM ht_bxpm")
w_bx = int(trend["signal"].iloc[0]) if not trend.empty else 0
pc_series = pd.concat([hg, sg])["pc"] if (not hg.empty or not sg.empty) else pd.Series(dtype=float)
w_board = pd.to_numeric(pc_series, errors="coerce").mean() / 10.0 if len(pc_series) else 0.0
w_rank = pd.to_numeric(rank["zqszzf"], errors="coerce").mean() / 10.0 if not rank.empty else 0.0
score = 0.4 * w_bx + 0.3 * w_board + 0.3 * w_rank
conn = sqlite3.connect(DB_PATH)
conn.execute("""CREATE TABLE IF NOT EXISTS ht_composite (
ts TEXT, bx_signal REAL, board REAL, rank REAL, score REAL)""")
conn.execute("INSERT INTO ht_composite VALUES (?,?,?,?,?)",
(datetime.now().isoformat(), float(w_bx), float(w_board),
float(w_rank), float(score)))
conn.commit(); conn.close()
logging.info("composite score=%.4f", score)
print(f"资金面={w_bx} 成分股情绪={w_board:.3f} 排名持续度={w_rank:.3f} "
f"综合打分={score:.3f}")
return score
if __name__ == "__main__":
composite_signal()
六、业务关键点
- 本篇是「聚合层」,依赖前文的表已存在;用 _safe_read 兜底,缺表时该因子记为 0,不会整体崩溃。
- 权重 0.4/0.3/0.3 仅作演示,实盘应当用历史样本做归一与调参,避免过拟合。
- 打分的「共振」思想可扩展到第 9、10 篇的南北长周期因子,做成多周期版本。
七、拓展练习
八、下篇预告
下一篇《综合实战流水线:数据调度与北向看板》将把全系列 21 个接口用统一调度串起来,并用一个通用落库函数 + 调度框架,输出北向看板,完成本季收官。
免责申明:文中所有数据处理逻辑仅为编程演示,仅为数据演示,不构成投资建议。市场有风险,投资需谨慎。
网硕互联帮助中心

![[AI工程]Jev 决策模型第二篇:三原语、一次多问与置信度路由,从 Playground 到能上线的代码-网硕互联帮助中心](https://www.wsisp.com/helps/wp-content/uploads/2026/10/20260930182734-6abd5496850ec-220x150.png)


评论前必须登录!
注册