← 返回博客列表

【Python量化实战全攻略 #22】涨跌停、连板情绪手册:情绪指标构建(附代码)

2026年10月20日 09:27 · 智兔数服 · Python量化实战全攻略

摘要:【Python量化实战全攻略 #22】涨跌停、连板情绪手册:情绪指标构建(附代码) 手册定位:模块三第 6 篇。市场情绪是择时的「温度表」——涨停数量多、连板高度高代表风险偏好强;反之恐慌。本篇讲用涨跌停/连板数据构

手册定位:模块三第 6 篇。市场情绪是择时的「温度表」——涨停数量多、连板高度高代表风险偏好强;反之恐慌。本篇讲用涨跌停/连板数据构建情绪指标。
数据来源复用 #01 涨跌股池(/hs/pool/ztgc/{date}、/hs/pool/dtgc/{date})+ #02 历史K线。

1. 你将得到什么

  • 每日涨停数、跌停数、连板高度的取数;
  • 情绪温度指数(涨停/跌停比 + 连板高度归一)的构建;
  • 用情绪指标做「冰点买入、沸点减仓」的反向择时;
  • 情绪指标的 4 个坑(牛熊基准不同、一字板、新股、样本偏差)。

2. 取数约定(复用)

信号 来源端点 见
涨停股池 /hs/pool/ztgc/{日期} #01
跌停股池 /hs/pool/dtgc/{日期} #01

3. 数据来源(复用,不重复罗列)

详见 #01 实时行情接口手册(涨跌股池 /hs/pool/*)。

4. 核心模板函数(自包含可跑)

import pandas as pd
import numpy as np

_MOCK = True


def sentiment_index(zt_count, dt_count, max_board, window=20):
    ratio = zt_count / max(dt_count, 1)
    r_norm = np.log1p(ratio) / (np.log1p(ratio) + 1)
    b_norm = min(max_board / 10.0, 1.0)
    return 0.6 * r_norm + 0.4 * b_norm


def board_height_today(stocks_with_board):
    return max((b for _, b in stocks_with_board), default=0)


def run_check():
    temp = sentiment_index(80, 10, 7)
    h = board_height_today([("600519", 1), ("000001", 7), ("600036", 3)])
    assert 0 <= temp <= 1 and h == 7
    print("校验通过 | 情绪温度=%.2f 最高连板=%d板" % (temp, h))
    return temp


if __name__ == "__main__":
    run_check()

5. 跑通示例

temp = run_check()
print("当前情绪:", "冰点-可考虑" if temp < 0.2 else ("沸点-注意风险" if temp > 0.8 else "中性"))

6. 坑与注意事项

  1. 牛熊基准不同:用滚动分位而非绝对值,避免牛市误判。
  2. 一字板:一字涨停无法买入,要区分「可参与涨停」与「一字板」。
  3. 新股/ST:新股连板、ST 涨跌幅不同,计入情绪要剔除或单独处理。
  4. 样本偏差:情绪指标只在有涨跌停制度的 A 股有效。

7. 小结与下一篇预告

情绪指标补上「市场温度」维度。下一篇讲多信号综合择时打分——把 #17–#22 所有择时信号加权合成。

下一篇预告:《【Python量化实战全攻略 #23】多信号综合择时打分手册:加权合成(附代码)》

8. 免责声明

本文为择时方法示例,演示数据为虚构,不构成投资建议。


关于数据来源:本文情绪指标所需的涨跌停股池接口来自智兔数服(www.zhituapi.com)官方文档(详见本系列 #01),覆盖 200+ 已验证路径,注册可领免费 token 做研究测试。
更多实战手册见技术博客:zhituapi.com/blog.html。
本系列《Python量化实战全攻略》共 32 篇,下一篇讲多信号综合择时。

想亲自试一下?免费获取证书