This commit is contained in:
aaron 2026-03-03 01:06:30 +08:00
parent 27bd4e97e9
commit 9424dffe00
3 changed files with 111 additions and 41 deletions

View File

@ -60,17 +60,32 @@ class NewsAnalyzer:
**分析要求**:
1. market_impact: 对市场的潜在影响high/medium/low
- **high**: 对市场或公司有**实质性深远影响**的事件
* 改变行业格局或公司生存状态
* 监管政策重大变化批准禁止调查
* 系统性风险事件破产退市重大欺诈
- **medium**: 对价格有**短期影响**但不会改变长期趋势的事件
* 财报业绩管理层变动一般并购
* 评级调整业务合作或重组
- **low**: 常规信息影响有限
* 分析师观点价格波动一般评论
**判断原则**: 问自己"这条新闻会改变市场/公司的长期格局吗?" 如果会high如果只是短期波动medium如果无关紧要low
**high重大影响- 请严格判断只有以下情况才标记为 high**
- 监管层面ETF批准/拒绝交易所封禁/解禁央行政策重大变化
- 企业层面破产/退市/重大并购>100亿美元财务造假
- 技术层面严重安全漏洞被盗>1亿美元网络暂停
- 宏观层面重大地缘政治事件经济数据远超预期
**以下情况不应该标记为 high**
- 普通价格波动涨跌<10%
- 分析师观点/评级调整
- CEO发表常规评论
- 一般业务合作/投资
- 常规财报发布非意外业绩
- **medium**: 对价格有**短期影响**但不会改变长期趋势的事件
* 财报业绩管理层变动一般并购机构评级调整
* 业务合作技术升级普通投资新闻
- **low**: 常规信息影响有限
* 分析师观点一般评论价格波动市场常规动态
**判断原则**:
1. 问自己"这条新闻会改变市场/公司的长期格局吗?"
2. 如果会high如果只是短期波动medium如果无关紧要low
3. 宁可判断为 medium也不要过度判断为 high
4. 价格波动类新闻除非涨跌>15%否则不应是 high
2. impact_type: 对价格的影响方向bullish=利好, bearish=利空, neutral=中性
3. sentiment: 新闻情绪positive=正面, negative=负面, neutral=中性
@ -120,12 +135,25 @@ class NewsAnalyzer:
]
```
**market_impact 判断标准**:
- **high**: 对市场或公司有**实质性深远影响**的事件改变行业格局或公司生存状态
- **medium**: 对价格有**短期影响**但不会改变长期趋势的事件财报管理层变动一般并购等
**market_impact 判断标准严格**:
**high重大影响- 请严格判断**
- 监管ETF批准/拒绝交易所封禁/解禁央行政策重大变化
- 企业破产/退市重大并购>100亿美元财务造假
- 技术严重安全漏洞被盗>1亿美元网络暂停
- 宏观重大地缘政治事件经济数据远超预期
**以下情况不应该标记为 high**
- 普通价格波动涨跌<10%
- 分析师观点/评级调整
- CEO发表常规评论
- 一般业务合作/投资
- 常规财报发布非意外业绩
- **medium**: 对价格有**短期影响**但不会改变长期趋势
- **low**: 常规信息影响有限
**判断原则**: 问自己"这条新闻会改变市场/公司的长期格局吗?" 如果会high如果只是短期波动medium
**判断原则**: 问自己"这条新闻会改变市场/公司的长期格局吗?" 如果会high否则medium/low
请只输出 JSON 数组不要包含其他解释
"""
@ -359,23 +387,23 @@ class NewsAnalyzer:
"""
score = 0.0
# 市场影响
impact_weights = {'high': 50, 'medium': 30, 'low': 10}
score += impact_weights.get(analysis.get('market_impact', 'low'), 10)
# 市场影响(更严格的权重)
impact_weights = {'high': 50, 'medium': 25, 'low': 5} # 降低 low 和 medium 的权重
score += impact_weights.get(analysis.get('market_impact', 'low'), 5)
# 方向性(利空利好比中性重要)
if analysis.get('impact_type') in ['bullish', 'bearish']:
score += 15
score += 10 # 从 15 降低到 10
# 置信度
score += (analysis.get('confidence', 50) / 100) * 10
# 置信度(降低权重)
score += (analysis.get('confidence', 50) / 100) * 8 # 从 10 降低到 8
# 质量分数
score += quality_score * 20
# 质量分数(保持)
score += quality_score * 15 # 从 20 降低到 15
# 是否有相关代码
# 是否有相关代码(提高重要性)
if analysis.get('relevant_symbols'):
score += 5
score += 12 # 从 5 提高到 12
return score

View File

@ -243,7 +243,7 @@ class NewsAgent:
self.stats['total_analyzed'] += analyzed_count
logger.info(f"分析了 {analyzed_count} 条文章")
# 6. 发送通知(仅批量发送)
# 6. 发送通知(仅批量发送)- 增加过滤条件
if high_priority_articles:
# 按优先级排序
high_priority_articles.sort(
@ -251,12 +251,37 @@ class NewsAgent:
reverse=True
)
# 额外过滤:只推送真正重要的新闻
truly_important_articles = []
for article in high_priority_articles:
impact = article.get('market_impact', 'low')
priority = article.get('priority', 0)
confidence = article.get('llm_analyzed', False) and article.get('relevant_symbols')
# 推送条件(满足其一即可):
# 1. high 影响 + 优先级 >= 55
# 2. high 影响 + 有明确相关代码
# 3. 优先级 >= 60特别重要
should_notify = (
(impact == 'high' and priority >= 55) or
(impact == 'high' and confidence) or
(priority >= 60)
)
if should_notify:
truly_important_articles.append(article)
# 批量发送最多10条
await self.notifier.notify_news_batch(high_priority_articles[:10])
for article in high_priority_articles[:10]:
if truly_important_articles:
await self.notifier.notify_news_batch(trulyy_important_articles[:10])
for article in truly_important_articles[:10]:
self.db_service.mark_as_notified(article['id'])
self.stats['total_notified'] += 1
logger.info(f"推送了 {len(trulyy_important_articles)} 条真正重要的新闻(从 {len(high_priority_articles)} 条 high 中筛选)")
else:
logger.info(f"没有达到推送标准的新闻({len(high_priority_articles)} 条 high 但不够重要)")
self.stats['last_notify_time'] = datetime.utcnow().isoformat()
logger.info("=" * 60)

View File

@ -193,30 +193,47 @@ def get_enabled_sources(category: str = None) -> list:
# 关键词配置 - 用于第一级过滤
CRYPTO_KEYWORDS = {
'high_impact': [
# 监管相关
'SEC', 'regulation', 'ban', 'approve', 'ETF', 'legal',
'监管', '批准', '合法化', '禁令',
# 监管相关(只保留真正重大的)
'SEC ETF', 'ETF approved', 'ETF rejected', 'regulation ban',
'监管禁令', 'ETF批准', 'ETF拒绝',
# 重大事件
'hack', 'exploit', 'bankruptcy', 'acquisition', 'merger',
'blackrock', 'grayscale', 'fidelity', '比特大陆', '币安',
# 重大事件(只保留真正重大的)
'hack $', 'exploit $', ' $ billion hack', # 需要金额上下文,避免普通新闻
'bankruptcy', '破产', 'shut down', '暂停交易',
'exchange collapse', '交易所倒闭',
# 市场动态
'all-time high', ' ATH ', 'crash', 'surge', 'plunge',
# 超级机构(重大新闻才推送)
'BlackRock ETF', 'Grayscale ETF', 'Fidelity ETF',
'贝莱德ETF', '灰度ETF',
# 重大安全事故
'bridge exploit', 'smart contract hack', '$ million stolen',
'跨链桥攻击', '智能合约漏洞',
],
'medium_impact': [
# 一般监管
'SEC', 'regulation', 'legal', '合规', '监管',
'approve', 'ban', '禁令',
# 市场动态(常见的价格波动)
'ATH', 'all-time high', 'crash', 'surge', 'plunge',
'历史新高', '暴跌', '暴涨', '突破',
# 技术更新
'upgrade', 'fork', 'airdrop', 'launch',
'升级', '分叉', '空投', '上线',
# 并购/合作
'partnership', 'acquisition', 'merger',
'合作', '并购', '收购',
# 宏观经济
'fed', 'inflation', 'recession', 'interest rate',
'美联储', '通胀', '加息', '降息',
],
'medium_impact': [
'partnership', 'integration', 'listing', 'delisting',
'合作', '上线', '下架',
# 机构和钱包
'whale', 'wallet', 'exchange',
'巨鲸', '钱包', '交易所',
]
}