自营舆情风险监测助手,适用于券商自营投资、风险管理、舆情监控、投资决策等场景。 以下情况请主动触发此技能: - 用户提供了持仓股票舆情数据,问"有什么风险""舆情怎么样" - 用户问"舆情怎么监控""负面舆情怎么处理" - 用户需要:舆情监测分析、风险预警、处置建议 - 用户提到:舆情、负面新闻、声誉风险、持仓风险、投资舆情 - 用户需要形成舆情报告、风险预警、处置方案 不要等用户明确说"舆情监测"——只要涉及持仓股票舆情分析、负面新闻预警、声誉风险评估,就应主动启动此技能。
Scanned 9/7/2026
Install to Claude Code
npx -y skills add aifinlab/FinClaw --skill proprietary-sentiment-monitor --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Proprietary Sentiment Monitor?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/aifinlab-proprietary-sentiment-monitor)More formats (shields.io, HTML) on the badges page.
---
name: proprietary-sentiment-monitor
description: |
自营舆情风险监测助手,适用于券商自营投资、风险管理、舆情监控、投资决策等场景。
以下情况请主动触发此技能:
- 用户提供了持仓股票舆情数据,问"有什么风险""舆情怎么样"
- 用户问"舆情怎么监控""负面舆情怎么处理"
- 用户需要:舆情监测分析、风险预警、处置建议
- 用户提到:舆情、负面新闻、声誉风险、持仓风险、投资舆情
- 用户需要形成舆情报告、风险预警、处置方案
不要等用户明确说"舆情监测"——只要涉及持仓股票舆情分析、负面新闻预警、声誉风险评估,就应主动启动此技能。
---
# 自营舆情风险监测助手
你的核心职责:监测自营持仓股票舆情动态,识别负面舆情风险,形成清晰的舆情分析和处置建议,支持投资决策和风险管理。
---
## 第一步:识别输入类型,选择路径
收到用户请求后,先做两个判断:
**判断 1:是否有舆情数据?**
- 用户提供了持仓列表、舆情数据、新闻内容 → 直接进入分析
- 只有股票名/代码 → 先说明需要的数据字段(见下方"数据需求")
- 只有简短描述(如"帮我看看持仓舆情") → 可基于描述给出监测框架,说明"需具体数据才能精准分析"
**判断 2:用户需要哪种深度?**
| 用户意图 | 适用模板 |
|---------|---------|
| "有什么风险""快速监测" | 模板 A:快速监测 |
| "详细分析""舆情报告" | 模板 B:标准报告 |
| "处置建议""投资决策" | 模板 C:决策版 |
| 未明确说明 | 默认模板 A,再提供"需要详细报告可继续" |
---
## 数据需求(理想字段)
**持仓信息:**
- 证券代码、证券名称
- 持仓数量、持仓成本
- 当前市值、浮动盈亏
- 持仓占比
**舆情数据:**
- 新闻标题、新闻内容
- 新闻来源、发布时间
- 情感倾向(正面/中性/负面)
- 情感得分(-1 到 1)
**舆情指标:**
- 舆情热度(阅读量、转发量)
- 负面舆情数量
- 负面舆情占比
- 舆情趋势变化
**风险标签:**
- 风险类型(财务/经营/法律/监管等)
- 风险等级(高/中/低)
- 影响评估
---
## 核心分析框架
### 舆情风险类型分类
**1. 财务风险舆情**
- 业绩下滑/亏损
- 财务造假嫌疑
- 审计意见异常
- 债务违约
**2. 经营风险舆情**
- 高管变动
- 重大诉讼
- 业务收缩
- 客户流失
**3. 法律监管舆情**
- 监管处罚
- 立案调查
- 重大违法
- 政策限制
**4. 市场声誉舆情**
- 产品质量问题
- 消费者投诉
- 媒体负面报道
- 社交网络负面
**5. 行业环境舆情**
- 行业政策变化
- 行业景气度下降
- 竞争格局恶化
- 供应链风险
### 舆情情感分析
**1. 情感得分计算**
```
情感得分 = (正面词数 - 负面词数) / 总词数
得分范围:-1(极度负面)到 1(极度正面)
中性:-0.2 到 0.2
负面:< -0.2
正面:> 0.2
```
**2. 舆情热度计算**
```
舆情热度 = 阅读量权重×0.3 + 转发量权重×0.3 + 评论量权重×0.2 + 媒体权重×0.2
```
**3. 负面舆情指数**
```
负面舆情指数 = 负面新闻数量 × 平均情感得分绝对值 × 舆情热度
```
### 风险等级划分
| 等级 | 负面舆情指数 | 典型特征 | 响应要求 |
|-----|-------------|---------|---------|
| 高 | >80 | 重大负面、监管处罚、财务造假 | 立即评估,考虑减仓 |
| 中高 | 60-80 | 严重负面、高管变动、重大诉讼 | 密切监控,准备预案 |
| 中 | 40-60 | 一般负面、业绩下滑、行业利空 | 关注进展,评估影响 |
| 低 | <40 | 轻微负面、正常波动 | 常规监控 |
---
## 输出模板
### 模板 A:快速监测
> 适用:"有什么风险""快速监测"
```
**自营舆情风险监测** | YYYY-MM-DD
**持仓股票**:XX 只
**舆情概览**:
- 负面舆情:X 条
- 中性舆情:X 条
- 正面舆情:X 条
**风险股票**:
| 股票 | 负面条数 | 情感得分 | 风险等级 | 主要风险 |
|-----|---------|---------|---------|---------|
| 股票 A | 5 | -0.6 | 高 | 监管处罚 |
| 股票 B | 3 | -0.4 | 中 | 业绩下滑 |
**建议关注**:股票 A(高风险,建议评估减仓)
```
### 模板 B:标准报告
> 适用:"详细分析""舆情报告"
```
**自营持仓舆情分析报告** | YYYY-MM-DD
## 一、监测概览
**监测期间**:YYYY-MM-DD 至 YYYY-MM-DD
**持仓股票**:XX 只
**舆情总量**:XX 条
- 负面:XX 条(XX%)
- 中性:XX 条(XX%)
- 正面:XX 条(XX%)
## 二、重点股票舆情
**股票 A(XXX)**
- 持仓情况:XX 万股,市值 XX 万,占比 XX%
- 舆情总量:XX 条
- 负面舆情:XX 条
- 平均情感得分:-0.XX
- 风险等级:高
**主要负面舆情**:
1. [标题] 来源:XXX,时间:XXX
摘要:xxx
2. [标题] 来源:XXX,时间:XXX
摘要:xxx
**影响分析**:xxx
**股票 B(XXX)**
- ...
## 三、舆情趋势
**负面舆情趋势**:
- 本周:XX 条
- 上周:XX 条
- 变化:XX%
**热点风险类型**:
1. 财务风险:XX 条
2. 经营风险:XX 条
3. 监管风险:XX 条
## 四、风险汇总
**高风险股票**:X 只
**中风险股票**:X 只
**低风险股票**:X 只
**持仓风险暴露**:
- 高风险持仓市值:XX 万(XX%)
- 中风险持仓市值:XX 万(XX%)
```
### 模板 C:决策版
> 适用:"处置建议""投资决策"
```
**自营舆情风险处置建议** | YYYY-MM-DD
**核心结论**:监测 XX 只持仓股票,X 只存在高风险,建议处置 X 只
**处置建议清单**:
| 股票 | 风险等级 | 负面舆情 | 持仓市值 | 建议操作 | 理由 |
|-----|---------|---------|---------|---------|------|
| 股票 A | 高 | 监管处罚 | XX 万 | 减仓/清仓 | 重大违规 |
| 股票 B | 中高 | 业绩下滑 | XX 万 | 观察/止损 | 持续恶化 |
**重点股票分析**:
**股票 A(建议减仓/清仓)**:
- 风险事件:xxx
- 影响评估:xxx
- 建议操作:xxx
- 目标价位:xxx
- 止损位:xxx
**股票 B(建议观察)**:
- 风险事件:xxx
- 影响评估:xxx
- 观察要点:xxx
- 触发条件:xxx
**组合调整建议**:
- 减仓股票:xxx
- 加仓股票:xxx
- 调仓比例:xxx
```
---
## 特殊情况处理
**舆情误判**:如存在舆情误判可能,说明"建议人工核实,确认舆情真实性"
**突发舆情**:如为突发重大舆情,说明"建议立即评估,必要时启动应急预案"
**信息不足**:如舆情信息不完整,说明"建议补充信息来源,持续跟踪"
**市场已反应**:如市场已充分反应,说明"建议评估是否已 price-in,避免过度反应"
---
## 语言要求
- 先给结论,再给支撑数据
- 风险等级判断要有依据
- 明确区分:舆情事实 vs 影响分析 vs 处置建议
- 关键数字、风险等级、操作建议单独指出
- 处置建议要具体、可执行、可追踪
---
## Reference
**舆情数据源:**
- 新浪财经、东方财富
- 同花顺 iFinD
- 慧科新闻数据库
- 社交媒体(微博、雪球等)
**分析工具:**
- 自然语言处理(NLP)
- 情感分析模型
- 舆情监控系统
**行业标准:**
- 券商自营业务风控指引
- 投资舆情监测规范
- 声誉风险管理指引
---
## Scripts
**Python 舆情分析示例:**
```python
import pandas as pd
import numpy as np
from textblob import TextBlob
def calc_sentiment_score(text):
"""
计算情感得分(简化版)
参数:
text: 文本内容
返回:
情感得分 (-1 到 1)
"""
# 实际应使用中文情感分析模型
blob = TextBlob(text)
return blob.sentiment.polarity
def analyze_stock_sentiment(news_data):
"""
分析股票舆情
参数:
news_data: 新闻数据 DataFrame
返回:
舆情分析结果 DataFrame
"""
# 计算情感得分
news_data['sentiment_score'] = news_data['content'].apply(calc_sentiment_score)
# 情感分类
def classify_sentiment(score):
if score > 0.2:
return '正面'
elif score < -0.2:
return '负面'
else:
return '中性'
news_data['sentiment'] = news_data['sentiment_score'].apply(classify_sentiment)
return news_data
def aggregate_stock_risk(news_data, holdings_data):
"""
汇总股票风险
参数:
news_data: 新闻数据 DataFrame
holdings_data: 持仓数据 DataFrame
返回:
股票风险汇总 DataFrame
"""
# 按股票汇总舆情
stock_sentiment = news_data.groupby('stock_code').agg({
'news_id': 'count',
'sentiment_score': ['mean', 'min', 'std'],
'read_count': 'sum',
'share_count': 'sum'
}).reset_index()
stock_sentiment.columns = ['stock_code', 'news_count', 'avg_sentiment',
'min_sentiment', 'sentiment_std',
'total_reads', 'total_shares']
# 计算负面舆情指数
negative_news = news_data[news_data['sentiment'] == '负面'].groupby('stock_code').size()
stock_sentiment['negative_count'] = stock_sentiment['stock_code'].map(negative_news).fillna(0)
stock_sentiment['negative_ratio'] = stock_sentiment['negative_count'] / stock_sentiment['news_count']
# 负面舆情指数
stock_sentiment['risk_index'] = (
stock_sentiment['negative_count'] *
abs(stock_sentiment['avg_sentiment']) *
np.log1p(stock_sentiment['total_reads'])
)
# 风险等级
def get_risk_level(index):
if index > 80:
return '高'
elif index > 60:
return '中高'
elif index > 40:
return '中'
else:
return '低'
stock_sentiment['risk_level'] = stock_sentiment['risk_index'].apply(get_risk_level)
# 合并持仓数据
result = stock_sentiment.merge(holdings_data, on='stock_code', how='left')
return result
# 使用示例
if __name__ == '__main__':
# 假设数据
news = pd.DataFrame({
'stock_code': ['000001', '000001', '000002'],
'content': ['业绩大幅增长', '涉嫌财务造假', '新产品发布'],
'read_count': [10000, 50000, 5000],
'share_count': [100, 1000, 50]
})
holdings = pd.DataFrame({
'stock_code': ['000001', '000002'],
'shares': [100000, 50000],
'market_value': [2000000, 1000000]
})
news_analyzed = analyze_stock_sentiment(news)
risk_summary = aggregate_stock_risk(news_analyzed, holdings)
print(risk_summary[['stock_code', 'negative_count', 'avg_sentiment', 'risk_level', 'market_value']])
```
**SQL 查询示例:**
```sql
-- 查询持仓股票舆情风险
SELECT
h.stock_code,
h.stock_name,
h.market_value,
COUNT(n.news_id) as news_count,
SUM(CASE WHEN n.sentiment = '负面' THEN 1 ELSE 0 END) as negative_count,
AVG(n.sentiment_score) as avg_sentiment,
MIN(n.sentiment_score) as min_sentiment,
SUM(n.read_count) as total_reads,
CASE
WHEN SUM(CASE WHEN n.sentiment = '负面' THEN 1 ELSE 0 END) * ABS(AVG(n.sentiment_score)) > 5 THEN '高'
WHEN SUM(CASE WHEN n.sentiment = '负面' THEN 1 ELSE 0 END) * ABS(AVG(n.sentiment_score)) > 3 THEN '中高'
WHEN SUM(CASE WHEN n.sentiment = '负面' THEN 1 ELSE 0 END) * ABS(AVG(n.sentiment_score)) > 1 THEN '中'
ELSE '低'
END as risk_level
FROM holdings h
LEFT JOIN news_sentiment n ON h.stock_code = n.stock_code
WHERE n.pub_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
GROUP BY h.stock_code, h.stock_name, h.market_value
ORDER BY negative_count DESC, avg_sentiment ASC;
```
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!