云计算百科
云计算领域专业知识百科平台

沪深港通数据实战:从北向资金到择时信号的全链路量化(第 11 篇):自研北向择时综合指标:净流入、成分股与排名共振

沪深港通数据实战:从北向资金到择时信号的全链路量化(第 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 篇的南北长周期因子,做成多周期版本。

七、拓展练习

  • 把三个因子各自做 z-score 标准化后再加权,削弱量纲差异。
  • 用 ht_composite.score 历史序列做分位切分,定义「强看多 / 中性 / 强看空」三区。
  • 将本篇 score 与沪深 300 后续 N 日收益做相关性检验,评估因子有效性。
  • 八、下篇预告

    下一篇《综合实战流水线:数据调度与北向看板》将把全系列 21 个接口用统一调度串起来,并用一个通用落库函数 + 调度框架,输出北向看板,完成本季收官。

    免责申明:文中所有数据处理逻辑仅为编程演示,仅为数据演示,不构成投资建议。市场有风险,投资需谨慎。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 沪深港通数据实战:从北向资金到择时信号的全链路量化(第 11 篇):自研北向择时综合指标:净流入、成分股与排名共振
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!