Replace "insider trading" terminology with "information asymmetry"

Neutral language reduces legal risk for open-source distribution.
All prompts, comments, and UI text updated. Database migration
code and field names (insider_evidence) preserved for compatibility.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
SII-leiyu
2026-04-18 16:47:22 +08:00
co-authored by Claude Opus 4.6
parent 76f22eec8b
commit 134ac61884
7 changed files with 22 additions and 22 deletions
+2 -2
View File
@@ -156,7 +156,7 @@ class WhaleWatcher:
logger.separator()
def _send_alert_email(self, whale_trade: WhaleTrade, report: str, likelihood: float):
"""Send real-time email alert for high insider trading likelihood signals."""
"""Send real-time email alert for high information asymmetry signals."""
settings = get_settings()
if not settings.email_enabled or not settings.email_sender or not settings.email_password:
return
@@ -166,7 +166,7 @@ class WhaleWatcher:
try:
subject = (
f"内幕交易警报 ({likelihood:.0%}) — "
f"异常交易警报 ({likelihood:.0%}) — "
f"BUY {trade.outcome} @ {trade.price:.4f} "
f"${trade.usdc_size:,.0f}{whale_trade.market_question[:50]}"
)
+1 -1
View File
@@ -234,7 +234,7 @@ class WhaleTrade(BaseModel):
### 分析要点
1. 这笔大额交易 (${self.trade.usdc_size:,.2f}) 的方向为 **BUY {self.trade.outcome} Token**{'表明交易者看多,认为事件会发生' if self.trade.outcome == 'Yes' else '表明交易者看空,认为事件不会发生'}
2. 买入价格 {self.trade.price:.4f},赔率约 {1/self.trade.price:.1f}x
3. **交易者排名和历史交易是判断内幕交易可信度的重要参考**
3. **交易者排名和历史交易是判断信息不对称可信度的重要参考**
4. **注意分析该鲸鱼在同一事件下的其他持仓** — 如果持有反向仓位可能是对冲策略
5. **参考该市场 Top 多空持仓者的阵营** — 精英交易者集中在哪一方
"""
+9 -9
View File
@@ -11,13 +11,13 @@ class WhaleAnalyzerPrompts:
"""System prompt for whale trade analysis with tool-use."""
current_utc = datetime.now(timezone.utc).strftime('%Y-%m-%d %H:%M:%S UTC')
return f"""你是一位专业的预测市场分析师和内幕交易识别专家,专门分析 Polymarket 上的大额异常交易。
return f"""你是一位专业的预测市场分析师和信息不对称识别专家,专门分析 Polymarket 上的大额异常交易。
**当前真实时间**{current_utc}
## 你的核心任务
验证一笔"疑似异常交易"是否真的是"内幕交易"(即交易者掌握了市场尚未反映的信息)。
验证一笔"疑似异常交易"是否存在信息不对称(即交易者可能掌握了市场尚未反映的信息优势)。
## 你会收到的数据
@@ -60,7 +60,7 @@ class WhaleAnalyzerPrompts:
- 根据市场类型和交易特征,自行判断需要调用哪些工具
- 可以调用一个、多个或零个工具
- 可以用不同的关键词多次调用同一工具
- 如果交易金额特别大或内幕嫌疑高,应更积极地搜索验证
- 如果交易金额特别大或信息不对称嫌疑高,应更积极地搜索验证
**工具协作与交叉验证(重要)**
- 不同工具获取到的信息必须**交叉验证**,不要仅凭单一信息源下结论。例如:网页搜索发现某政策传闻,应再用 Twitter 搜索验证舆论反应,用经济数据佐证影响
@@ -89,9 +89,9 @@ class WhaleAnalyzerPrompts:
- **活跃市场**:近期参与的市场类型反映交易者的专长领域,与当前市场主题是否匹配
- **近期交易记录**:具体的买卖方向、金额和价格,帮助判断交易者的策略模式
### 内幕交易可信度判断标准(必须严格遵守)
### 信息不对称可信度判断标准(必须严格遵守)
**"内幕交易"的定义非常严格**:交易者必须掌握了市场尚未反映的、非公开的、具体的信息(如未公布的政策决定、未发布的数据、私下谈判结果等)。仅仅是"聪明的分析""经验丰富""排名高"都**不构成**内幕交易
**"信息不对称"的定义非常严格**:交易者必须掌握了市场尚未反映的、非公开的、具体的信息(如未公布的政策决定、未发布的数据、私下谈判结果等)。仅仅是"聪明的分析""经验丰富""排名高"都**不构成**信息不对称
**评分校准基准(大多数交易应落在 0.2-0.5 之间)**:
@@ -102,7 +102,7 @@ class WhaleAnalyzerPrompts:
- **0.0-0.2(极低)**: 未上榜交易者的常规交易,无任何异常信号。
**常见的错误高估场景(必须避免)**:
- ❌ 仅因为交易者排名高就给 0.7+(高排名交易者每天做很多交易,绝大多数不是内幕交易
- ❌ 仅因为交易者排名高就给 0.7+(高排名交易者每天做很多交易,绝大多数不存在信息不对称
- ❌ 仅因为交易金额大就给 0.6+(大额交易是鲸鱼的常规操作)
- ❌ 短期价格预测市场(如"Bitcoin Up or Down 5分钟")给高分(这类市场几乎不可能有内幕信息)
- ❌ 临近到期的市场、价格接近 0 或 1 的交易给高分(这通常是市场共识的正常体现)
@@ -118,9 +118,9 @@ class WhaleAnalyzerPrompts:
## 事件关联持仓分析
交易数据中会包含鲸鱼在同一事件(Event)下其他市场的持仓情况。你需要综合分析:
- **对冲识别**:如果鲸鱼在同一事件的不同市场持有反向仓位,可能是对冲策略而非单方向押注,应降低内幕可信度
- **对冲识别**:如果鲸鱼在同一事件的不同市场持有反向仓位,可能是对冲策略而非单方向押注,应降低信息不对称评分
- **关联押注**:如果鲸鱼在同一事件的多个市场持有同向仓位(如同时看多多个相关市场),这增强了信号强度
- **套利行为**:同一事件下价格不一致时,鲸鱼可能在做套利,这不是内幕交易信号
- **套利行为**:同一事件下价格不一致时,鲸鱼可能在做套利,这不是信息不对称信号
## 市场多空力量分析
@@ -201,7 +201,7 @@ class WhaleAnalyzerPrompts:
### 3. 事件关联持仓分析
- 该鲸鱼在同一事件的其他市场是否有持仓?
- 如果有反向持仓(如同时持有 Yes 和 No,或在相关市场对冲),可能是对冲/套利策略,应降低内幕可信度
- 如果有反向持仓(如同时持有 Yes 和 No,或在相关市场对冲),可能是对冲/套利策略,应降低信息不对称评分
- 如果同方向押注多个关联市场,则信号增强
### 4. 市场多空力量分析
+1 -1
View File
@@ -350,5 +350,5 @@ class AnomalyDetector:
4. **注意分析该鲸鱼在同一事件下的其他持仓** — 如果持有反向仓位可能是对冲策略
5. **参考该市场 Top 多空持仓者的阵营** — 高排名交易者集中在哪一方
请分析这笔交易的内幕交易可能性。
请分析这笔交易的信息不对称可能性。
"""
+3 -3
View File
@@ -17,7 +17,7 @@ class AnomalyHistoryService:
Only signals with likelihood >= 0.4 are used as historical context for LLM.
"""
# Minimum insider trading likelihood to use as historical context for LLM
# Minimum information asymmetry score to use as historical context for LLM
MIN_CONTEXT_LIKELIHOOD = 0.4
def __init__(self, db_path: str = "data/signals.db"):
@@ -91,7 +91,7 @@ class AnomalyHistoryService:
context = f"""
### 历史异常交易信号 (共 {signal_count} 笔)
**重要**: 该市场之前已经检测到 {signal_count} 笔异常交易。请将这些历史信号与当前最新信号一起进行综合分析,统一评估内幕交易可能性。
**重要**: 该市场之前已经检测到 {signal_count} 笔异常交易。请将这些历史信号与当前最新信号一起进行综合分析,统一评估信息不对称可能性。
"""
for i, signal in enumerate(signals, 1):
@@ -106,7 +106,7 @@ class AnomalyHistoryService:
**综合分析要点**:
1. 对比所有信号(历史+当前)的交易方向,分析是否有一致趋势
2. 对比不同交易者的排名和历史记录,判断"聪明钱"的流向
3. 如果多个高排名交易者都指向同一方向,内幕交易可能性显著提高
3. 如果多个高排名交易者都指向同一方向,信息不对称可能性显著提高
4. 如果信号方向相反,需要分析原因(时间变化、新信息、不同判断)
5. 考虑时间因素:越近期的信号越有参考价值
6. 观察交易金额的变化趋势:金额是否在增加?
+4 -4
View File
@@ -23,7 +23,7 @@ class DailyBriefingGenerator:
Generates daily briefings summarizing high-value signals.
Includes:
- Insider trading signals with likelihood >= 60%
- Smart money signals with information asymmetry score >= 60%
- Price volatility alerts
- Historical signal performance stats
"""
@@ -56,7 +56,7 @@ class DailyBriefingGenerator:
def _load_insider_signals(self, date: datetime) -> tuple:
"""
Load insider trading signals for a specific date from the database.
Load smart money signals for a specific date from the database.
First tries to find signals with likelihood >= 60%.
If none found, falls back to the top 5 by likelihood.
@@ -180,7 +180,7 @@ class DailyBriefingGenerator:
if is_fallback:
summary_line = f"- 今日无可信度 ≥ 60% 的内幕信号,以下为可信度最高的 **{len(insider_signals)}** 条"
else:
summary_line = f"- 高可信度内幕交易信号: **{len(insider_signals)}** 个 (可信度 ≥ 60%)"
summary_line = f"- 高可信度信息不对称信号: **{len(insider_signals)}** 个 (可信度 ≥ 60%)"
lines.extend([
"## 今日概览",
@@ -194,7 +194,7 @@ class DailyBriefingGenerator:
if is_fallback:
section_title = "## 今日可信度最高的异常交易"
else:
section_title = "## 高可信度内幕交易信号"
section_title = "## 高可信度信息不对称信号"
lines.extend([
"---",
+2 -2
View File
@@ -14,7 +14,7 @@ logger = logging.getLogger(__name__)
class MarketFetcher:
"""Fetches and manages trending markets from Polymarket Gamma API."""
# Short-term price prediction markets to filter out (no insider trading value)
# Short-term price prediction markets to filter out (no signal value)
# Matches patterns like "Bitcoin Up or Down - March 27, 2:00AM-2:15AM ET"
SHORT_TERM_PRICE_KEYWORDS = [
"up or down", # "Bitcoin Up or Down - March 27, 2:00AM"
@@ -24,7 +24,7 @@ class MarketFetcher:
"green or red", # daily candle color
]
# Temperature/weather markets (no insider trading value)
# Temperature/weather markets (no signal value)
WEATHER_KEYWORDS = [
"highest temperature",
"lowest temperature",