老版 StockSight 用到 A 股,缺的是哪六样?
先看清缺口,再谈怎么补。
| 缺口 | 老版 StockSight 的实现 | 换到 A 股后的后果 | 补法 |
|---|---|---|---|
| A 股数据源 | 只有 Twitter 流与 Yahoo 新闻页 | 抓不到任何 A 股标的的新闻 | 换用东方财富、巨潮资讯等公开源(B 路线走 akshare) |
| 中文分词 | nltk.word_tokenize,面向英文 | 中文标题分词结果不可用,token 数门槛失准 | 换 jieba 等中文分词;token 门槛按字数重设 |
| 中文情绪模型 | TextBlob + VADER(实测对中文全为 0) | 所有中文标题都被判中性 | 换 SnowNLP 或中文金融模型(见情绪模型页) |
| 白名单词表 | 13 个 token,围绕 Tesla / Elon Musk | 所有 A 股新闻都因「不含默认 token」被丢弃 | 按标的与板块重建词表 |
| 交易日历 | 无 | 无法判断某条新闻落在哪个交易日前 | 引入交易日历,做「新闻 → 下一交易日」映射 |
| 涨跌停与停牌 | 无相关逻辑 | 涨跌停日的情绪与价格关系被误读 | 按主板/创业板/科创板/ST 分别设阈值 |
这六项里,前三项决定「能不能跑」,后三项决定「结论能不能用」。很多教程只解决前三项,然后直接输出结论。
A 股新闻时间与交易时间怎么对齐?对不齐会怎样
这是 A 股场景里最容易犯、后果最严重的一类错误。
| 时间点 | 含义 | 老项目的做法 | 正确做法 |
|---|---|---|---|
| 新闻发布时间 | 媒体或交易所实际发布的时间 | 没有单独字段,抓取时统一打一个当前时间 | 必须单独保存原始发布时间,且区分时区 |
| 抓取入库时间 | 你的程序什么时候拿到这条数据 | datetime.utcnow().isoformat() | 与发布时间分开存;延迟量本身就是数据质量指标 |
| 信号生成时间 | 情绪分数/聚合信号产出时间 | 与入库时间几乎相同 | 明确到「用于哪一天的决策」 |
| 可交易时间 | A 股 T+1,且受涨跌停与停牌限制 | 无概念 | 盘后信息只能映射到下一交易日 |
| 收益观察窗口 | 信号后 1 日 / 5 日 / 10 日 | 无概念 | 分窗口统计,不要只看一个周期 |
老版 StockSight 用 UTC 时间打戳(utcnow),而 A 股交易时间按北京时间。换算时要注意 15:00 收盘对应 UTC 07:00,跨日会对齐错误。以你所用数据源的时区标注为准。
同一条新闻为什么会被重复抓取?重复会怎样扭曲情绪信号
中文财经新闻的转载密度远高于英文源,而去重正好是老项目最弱的一环。
| 重复类型 | 表现 | 对情绪统计的影响 | 处理方式 |
|---|---|---|---|
| 同源转载 | 同一篇稿子被多个平台以不同标题发出 | 正面/负面计数被同一事件多次计入 | 按正文指纹(正文哈希)去重,而不是按标题字面 |
| 标题微改 | 标题加前缀「重磅」「独家」 | 标题去重完全失效 | 归一化后再比:去标点、去修饰词、去平台名 |
| 滚动更新 | 同一事件连续发多条进展 | 早先的负面判断被后续更正覆盖不了 | 按事件 ID 聚合,保留最新版本并标记曾被修正 |
| 进程重启 | 老项目用内存列表去重,重启后清空 | 同一批新闻被重复写入 | 把去重键持久化,或用存储层的唯一约束 |
| 链接跟踪 | 开启外链跟随后,同一篇文章从多个入口进入 | 正文被重复打分 | 在入库前统一做正文级去重,而不是在抓取端 |
if htext not in self.headlines,即内存中的标题字符串精确匹配。标题微改一次就绕过,进程重启即清空。这个实现对英文推特流的问题不大,放到中文新闻转载场景会直接失真。公告、财报与媒体新闻的权重怎么定?为什么不该等权相加
它们的信息权威性与时效性完全不同,混在一张情绪均值里会互相稀释。
| 层级 | 来源示例 | 权威性 | 时效性 | 建议权重 |
|---|---|---|---|---|
| 交易所公告 | 巨潮资讯、交易所网站 | 最高(一手、有法律效力) | 有明确发布时间,通常盘后 | 最高,且必须单独成组统计 |
| 定期报告 | 年报、半年报、季报 | 高(经审计或经披露) | 低频、集中在披露季 | 高,但应与「业绩预告」分开看 |
| 业绩预告/快报 | 公司主动披露 | 中高(未经审计) | 集中在特定时段 | 中高,注意与最终财报的差异 |
| 风险提示类 | 关注函、立案调查、退市风险警示 | 高 | 随时 | 高,且应触发独立告警而非并入均值 |
| 财经媒体报道 | 门户、平台转述 | 中(可能二次加工) | 高频 | 中,需要去重后再统计 |
| 社交媒体讨论 | 股吧、评论 | 低(情绪噪声大) | 高频 | 低,或作为独立信号而非同一指标 |
B 路线的 Skill 文档里写了「优先免费公开公告源(巨潮资讯、东方财富公告),普通新闻只作为兜底背景」,方向与本表一致。但它的输出仍然是一个聚合均值,没有按层级分别加权——需要你自己在调用侧分层统计。以该 Skill 的官方文件为准。
涨跌停、ST 与停牌会如何改变同一个情绪信号的解读
这些约束在英文市场里形态不同,直接用会出错。
| 制度因素 | 影响 | 如果不处理会怎样 | 建议判据 |
|---|---|---|---|
| 涨跌停限制 | 涨跌停当日价格无法反映真实供需 | 把涨停当成「情绪到顶」或「强势买入」 | 涨跌停日单独标记,不与其他交易日混算收益 |
| 板块阈值不同 | 主板 10%、创业板/科创板 20%、ST 5% 等 | 用统一比例判断涨跌停会漏判 | 按板块与是否 ST 分别取阈值 |
| ST 与退市风险 | 风险等级本就不同 | 把 ST 股的日常波动当成异常事件 | ST/退市风险标的单独分组 |
| 停牌 | 无成交、无价格,但可能仍有新闻 | 把停牌期间的情绪计入「当期信号」 | 停牌期样本单独标记;恢复交易日单列 |
| T+1 | 当日买入不能当日卖出 | 用当日涨跌幅衡量「信号当日收益」 | 收益从下一交易日起算 |
| 交易日历与节假日 | 春节等长假无法交易 | 把长假前最后一天当成普通交易日 | 引入交易日历,判定「下一交易日」 |
把 A 股新闻做成可用信号需要哪些步骤
前两步做完再谈模型,否则后面全部白做。
固定数据源与字段口径
选定公告源与新闻源各一个起步,明确每条记录至少要有「原始发布时间、标题、正文摘要、来源、标的代码」五个字段。缺发布时间的数据直接不入库。
做正文级去重
对正文做归一化后取哈希,作为去重键持久化保存。标题去重不够用,这一点在中文财经新闻里尤其明显。
按层级打标签
给每条新闻打上「交易所公告 / 定期报告 / 业绩预告 / 风险提示 / 媒体报道 / 社交讨论」之一,后面统计时分组处理,不要混算。
选中文情绪模型并建校准集
用情绪模型页的五步流程。至少要有人工判断过的几十条样本作为参照,否则无法判断模型是否在你的场景里有效。
对齐交易日历
把每条新闻映射到「可使用的第一个交易日」,盘后信息一律顺延。这一步做完,你的信号时间戳才有意义。
分窗口观察,不急着下结论
按信号后 1 / 5 / 10 个交易日分窗口统计,并单独列出涨跌停日与停牌期。任何单一窗口的良好表现都不足以支撑「信号有效」。
A 股情绪分析有哪些看上去合理、实际会出错的判断
这些判断在英文语境里问题不大,放到 A 股会直接改变结论方向。
| 看起来合理的做法 | 在 A 股会怎样 | 后果 | 替代做法 |
|---|---|---|---|
| 用抓取时间当作新闻时间 | 回溯抓取历史新闻时,所有新闻都变成「今天」 | 历史时间序列被压成一瞬间,无法做任何时序分析 | 以数据源给出的发布时间为准,缺失的一律不入库 |
| 盘后新闻当天就计入当日情绪 | 这条信息在当日盘中并不存在 | 典型的未来信息泄露,回测结果虚高 | 盘后信息顺延到下一交易日 |
| 按标题去重 | 转载会改标题 | 同一事件被计多次,情绪均值被放大 | 按正文指纹去重 |
| 把公告和媒体新闻放进同一个均值 | 两者权威性、时效性差异极大 | 一条权威风险提示被大量转述稿稀释掉 | 分层统计,风险提示类独立告警 |
| 用统一比例判断涨跌停 | 主板、创业板、科创板、ST 阈值不同 | 漏判涨跌停,把受限日当自由交易日 | 按板块与是否 ST 分别取阈值 |
| 停牌期间照常计入情绪序列 | 有新闻但无成交、无价格 | 信号与价格错配,统计口径混乱 | 停牌期单独标记,恢复日单列 |
这六条有一个共同点:它们都不会报错。程序照常运行、照常输出结论,只是结论不可用。因此在 A 股场景里,「跑通了」和「结论可用」之间隔着一整套数据治理工作。
关于 StockSight 的 A 股适配常见问题有哪些
有没有现成的 A 股版 StockSight?
没有以这个名字发布的 A 股版本。B 路线(gaaiyun/stocksight-skill)提供了 A 股新闻源与中文模型路由,是三者中最接近的,但它没有公告分层、去重与交易日历逻辑。其余需要自己补。以两个 Skill 仓库的官方文件为准。
为什么一定要单独存新闻发布时间?
因为抓取时间与发布时间经常相差数小时甚至数天(历史回溯时更明显)。如果只存抓取时间,你无法判断这条信息在某个交易时点是否已经存在,时间对齐就无从谈起,样本外验证也做不了。这是判据问题,不是存储洁癖。
标题去重为什么不够?
因为中文财经新闻的转载会改标题:加「重磅」「独家」「解读」等前缀,或换一种表述。只比标题字符串时,同一条稿子会被当成多条独立事件,情绪计数被放大。所以要按正文指纹去重。以你所用数据源的实际情况为准。
公告的情绪分数一定更可信吗?
权威性更高不等于情绪更明确。公告语言高度格式化,通用情绪模型往往给不出强极性(例如「拟回购股份不超过10亿元」在实测里被判成负面)。分层的作用是让你能分别观察,而不是自动提升可信度。以模型实测结果为准。
涨跌停日该怎么处理?
建议单独标记并按板块取阈值(主板 10%、创业板与科创板 20%、ST 5% 等,具体以交易所现行规则为准),在统计收益时剔除或单列。因为涨跌停日的价格无法反映真实的供需,用它计算收益会系统性失真。
本页有没有跑过真实标的的回测?
没有。本页是方法论整理与判据说明,本站未对任何具体标的做过回测,也不提供任何收益数字。所有涉及「怎么判断」的内容都是可自行检验的流程,不是结论。要做回测得先按上一节六步把数据准备好。