第十一章:新闻与舆情信息

做量化交易这些年,我越来越觉得——市场不只是数字的游戏,更是人心的博弈。新闻和舆情,说白了就是市场情绪的体温计。你想想看,一条突发新闻能让股价瞬间跳水,一条推特能让币圈翻天。这些信息里到底藏着多少交易价值?今天我们就来拆解一下。

11.1 新闻情绪分析

新闻情绪分析,就是把文字变成数字。我刚开始做的时候,以为这玩意儿很简单——正面词加分,负面词减分呗。后来发现,事情远没那么简单。

11.1.1 情感词典法

最基础的做法,是用情感词典。比如Loughran-McDonald词典,专门为金融文本设计的。我习惯把它作为基线模型,快速验证想法。

# 一个简单的新闻情绪打分
import pandas as pd
from nltk.sentiment import SentimentIntensityAnalyzer

def news_sentiment_score(text):
    sia = SentimentIntensityAnalyzer()
    scores = sia.polarity_scores(text)
    return scores['compound']  # -1到1之间

嗯,这里要注意:词典法对反讽、否定句的处理很差。比如“这家公司业绩没有下滑”——词典可能给出负面评分,但实际是正面消息。

避坑指南: 我曾经用词典法分析财报电话会议记录,结果发现“没有亏损”被判定为负面。后来我加了否定词反转规则,准确率才上去。

11.1.2 深度学习法

现在主流做法是用预训练模型,比如BERT、FinBERT。我个人偏好FinBERT,它在金融语料上微调过,对专业术语的理解更准。

from transformers import pipeline

# 加载FinBERT模型
sentiment_pipeline = pipeline(
    "sentiment-analysis",
    model="ProsusAI/finbert"
)

result = sentiment_pipeline("公司Q3营收超预期,同比增长30%")
print(result)  # 输出: [{'label': 'positive', 'score': 0.98}]

深度学习模型的好处是能理解上下文。比如“这家公司被做空机构盯上了”——词典法可能只看到“做空”是负面,但模型能结合“盯上”这个动词,判断出整体情绪确实偏空。

11.2 社交媒体舆情指标

社交媒体这块,我重点看三个维度:量、情绪、异常。

指标 含义 我常用的阈值
讨论量 特定标的的帖子数量 超过5日均值3倍为异常
情绪得分 正面/负面帖子比例 低于0.3为极度悲观
分歧度 情绪得分的标准差 高于0.6说明市场分歧大
传播速度 每小时新增帖子数 超过100条/小时需关注

我记得有一次,某只股票在Reddit上的讨论量突然暴增,但情绪得分很低。我当时觉得是散户在发泄不满,没当回事。结果第二天开盘暴跌12%——原来是有内部消息提前泄露了。从那以后,我把“讨论量+情绪得分”的组合指标作为必看项。

我的经验: 社交媒体数据噪音很大。我习惯先做去重(去掉机器人发的重复帖子),再做时间衰减(越近的帖子权重越高)。

11.3 新闻事件驱动的交易策略

事件驱动策略,核心就一句话:市场对新闻的反应,比新闻本身更重要

11.3.1 事件分类与响应模式

我一般把事件分成三类:

  • 预期内事件:比如财报发布,市场已有预期。这时候“利好出尽是利空”很常见。
  • 超预期事件:比如突然宣布收购。这类事件往往有持续影响。
  • 黑天鹅事件:比如监管突袭。这类事件需要快速止损。

举个例子。某公司财报超预期,但股价反而跌了。为什么?因为市场预期的是“超预期20%”,实际只超了5%。这就是预期差。我习惯用“实际值 vs 分析师预期”的差值来量化这种偏差。

# 事件驱动策略的简单框架
def event_driven_strategy(news_event, market_data):
    # 计算预期差
    surprise = (news_event['actual'] - news_event['expected']) / news_event['expected']
    
    # 判断市场反应
    if surprise > 0.1 and market_data['volume'] > 1.5 * market_data['avg_volume']:
        # 超预期且放量,做多
        return 'long'
    elif surprise < -0.1 and market_data['volume'] > 1.5 * market_data['avg_volume']:
        # 低于预期且放量,做空
        return 'short'
    else:
        # 预期内,观望
        return 'hold'

11.3.2 事件衰减模型

新闻的影响力会随时间衰减。我常用的衰减函数是指数衰减:

import numpy as np

def news_decay_weight(t, half_life=60):
    """
    t: 新闻发生后的分钟数
    half_life: 半衰期,默认60分钟
    """
    return np.exp(-np.log(2) * t / half_life)

嗯,这里有个坑:不同事件的半衰期不一样。财报影响可能持续几天,而一条推特可能半小时就失效了。我建议根据事件类型动态调整半衰期。

11.4 新闻信息衰减速度

信息衰减速度,说白了就是“这条新闻还能管多久”。我做过一个实验:统计了1000条新闻对股价的影响时长。

新闻类型 平均影响时长 半衰期
财报新闻 3-5天 120分钟
行业政策 1-2周 240分钟
公司公告 1-2天 60分钟
社交媒体传闻 30分钟-2小时 15分钟
宏观数据 1-3天 90分钟

你看,社交媒体传闻的半衰期只有15分钟。这意味着什么?如果你看到一条推特后5分钟才下单,可能已经错过了最佳时机。所以我做舆情策略时,对社交数据的延迟要求特别高——最好在1秒内完成采集和分析。

核心观点: 新闻的价值 = 信息含量 × 时效性。一条过时的新闻,再重磅也没用。

知识体系总览

下面这张图,是我对本章内容的总结。你可以把它当作一个快速索引。

新闻与舆情信息分析框架 新闻情绪分析 • 情感词典法(Loughran-McDonald) • 深度学习法(FinBERT) • 否定词反转规则 • 上下文理解能力 社交媒体舆情指标 • 讨论量(异常检测) • 情绪得分(正负比例) • 分歧度(标准差) • 传播速度(每小时增量) 事件驱动交易策略 • 预期内事件(利好出尽是利空) • 超预期事件(持续影响) • 黑天鹅事件(快速止损) • 预期差量化模型 新闻信息衰减速度 • 指数衰减模型 • 动态半衰期调整 • 不同类型新闻衰减曲线 • 时效性 vs 信息含量 核心:市场对新闻的反应,比新闻本身更重要

这张图把四个模块串起来了。从左到右看:先做情绪分析,再结合社交媒体指标,然后设计事件驱动策略,最后别忘了考虑信息衰减。每一步都有坑,但每一步也都有机会。

一个小建议: 刚开始做舆情策略时,别贪多。先盯住一个数据源(比如财报新闻),把情绪分析做扎实了,再扩展到社交媒体。我见过太多人一上来就想全抓,结果哪个都没吃透。

好了,这一章的内容就到这里。新闻和舆情这块,说白了就是跟市场情绪打交道。你如果能比别人早5分钟读懂情绪,早5分钟判断衰减速度,那这5分钟就是你的超额收益来源。