1. 课程导入与数据准备

在开始任何计算之前,先要回答一个看似简单却决定成败的问题:我们究竟要比较什么?本课程的分析目标是——观察板块融资余额的变化方向与节奏,与板块指数的涨跌表现之间,是否存在稳定的同步、领先或背离关系。融资余额代表杠杆资金在该板块上的持仓意愿,板块指数代表整体价格结果,两者一个偏“资金行为”,一个偏“价格结果”,把它们放在同一时间轴上对照,才能看出资金是“追涨”“抄底”还是“撤退”。

需要先明确三个基本对象。第一,融资余额:投资者通过融资买入证券后尚未偿还的金额,通常以每日收盘后的交易所披露数据为准,单位为元或亿元。它只统计融资(做多杠杆),不含融券,因此是“多头杠杆存量”的代理变量。第二,板块指数:由一篮子成分股按既定权重编制的价格指数,用于刻画板块整体涨跌,需固定使用同一编制方案与同一基期,避免中途换指数导致不可比。第三,行情数据:包括指数日线的开高低收、成交量、成交额等,本课程主要用到收盘价与成交额。

方向约定:全文统一以“融资余额较前一交易日增加为正、减少为负”为口径;指数涨跌以收盘价环比计算。所有图示与计算均遵循这一约定,不中途切换参照系。

数据来源上,融资余额来自交易所每日公布的融资融券明细(可按标的汇总到板块),板块指数与行情来自行情终端或公开数据接口。实操中最容易踩的坑是时间对齐:融资余额是T日收盘后披露、反映T日交易结果,指数收盘价也是T日结果,二者可以直接按交易日对齐;但若使用“T+1日才可查”的披露节奏,就必须按数据所属交易日而非查询日对齐,否则会人为制造一天的错位,把同步关系误判成领先关系。

下面这张图给出本节的数据准备链路:从三类原始数据出发,经过交易日对齐与板块归属汇总,形成一张“日期—融资余额—指数收盘—成交额”的对照宽表,作为后续所有分析的唯一数据底座。

板块融资余额—行情对照:数据准备链路 融资融券明细 交易所每日披露 字段:标的、融资余额 板块指数行情 行情终端 / 数据接口 字段:收盘价、成交额 成分股与权重 板块归属映射表 用于标的→板块汇总 按板块汇总融资余额 Σ 成分股融资余额 统一交易日历 剔除停牌、非交易日 按交易日对齐 以数据所属日为准 对照宽表(唯一数据底座) 日期 融资余额 余额变化 指数收盘 成交额 2024-06-03 128.6亿 +1.9亿 3124.5 486亿

环境搭建不必复杂,一个可复现的最小工作区即可:Python 环境加 pandas、numpy、matplotlib,数据以 CSV 落盘,目录按 raw/(原始数据)、clean/(对齐后宽表)、fig/(图表输出)三层组织。原始数据保留不动,所有清洗在对齐环节完成,保证任何一步都能回溯。

下面给出一个可直接运行的对齐示例。假设已取得某板块成分股融资余额明细 margin.csv(字段:日期、代码、融资余额)与指数行情 index.csv(字段:日期、收盘、成交额),核心是把标的汇总到板块、再与行情按交易日内连接:

import pandas as pd

margin = pd.read_csv("raw/margin.csv", parse_dates=["日期"])
index  = pd.read_csv("raw/index.csv",  parse_dates=["日期"])

# 1) 标的汇总到板块:同一交易日所有成分股融资余额求和
board = (margin.groupby("日期", as_index=False)["融资余额"]
               .sum()
               .rename(columns={"融资余额": "板块融资余额"}))

# 2) 计算余额日变化(正=增加,负=减少)
board = board.sort_values("日期")
board["余额变化"] = board["板块融资余额"].diff()

# 3) 与指数行情按交易日内连接,只保留双方都有的交易日
df = pd.merge(board, index, on="日期", how="inner").sort_values("日期")

# 4) 计算指数日涨跌幅(%)
df["指数涨跌幅"] = df["收盘"].pct_change() * 100

df.to_csv("clean/board_margin_index.csv", index=False)
print(df.head())
print("样本区间:", df["日期"].min(), "至", df["日期"].max(), "共", len(df), "个交易日")

运行后应重点检查三件事,而不是急着看相关性。其一,样本量与区间:打印出的交易日数量是否与预期一致,若明显偏少,多半是内连接时日期格式或时区不一致导致匹配失败。其二,缺失与断点:用 df.isna().sum() 检查各列空值,尤其首个交易日的“余额变化”和“指数涨跌幅”必然为空,属正常,不应填补为0。其三,量级合理性:板块融资余额应是亿元级、指数收盘应在合理点位、成交额不应为负,若出现数量级异常,通常是单位(元与亿元)或汇总口径(重复计入同一标的)出错。

常见错误:把“查询日”当作“数据所属日”对齐,会让融资余额整体后移一天,从而在图上呈现出虚假的“融资余额领先指数一天”。判断方法很简单——若领先关系恰好等于一个交易日且非常整齐,优先怀疑对齐错误,而不是急于下结论。

数据准备完成后,建议先画一张最朴素的“双轴时序图”做肉眼体检:左轴为板块融资余额,右轴为指数收盘,观察两条曲线的大致形态是否同向、拐点是否接近、有无明显背离区间。这一步不追求结论,只用于发现数据异常(如某日余额突跳、指数长期横盘而余额剧烈波动),为后续的滚动相关、变化率对照和背离识别打下可信基础。至此,分析目标、对象定义、数据来源与对齐口径都已确定,后续所有章节都将在这张宽表上展开。