关于 edge-signal-aggregator
将多个 edge 探测技能的输出汇总为加权排序面板的技能。它保留信号来源、合并重叠项,并标出相互矛盾的信号供人工检查。
主要功能
- 01加权综合置信度评分
- 02合并重叠信号
- 03检测矛盾信号
- 04保留来源追溯链接
- 05可配置权重和置信度门槛
- 06生成 JSON 与 Markdown 报告
适用场景
- 01汇总多个分析技能的输出
- 02筛选优先深入研究的 edge 想法
- 03在配置投资前检查冲突信号
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ tradermonty/ claude-trading-skills --skill edge-signal-aggregator安装后在 Claude Code 中输入/edge-signal-aggregator确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
requirements.txtassets/default_weights.yamlreferences/signal-weighting-framework.mdscripts/aggregate_signals.pyscripts/tests/conftest.pytest_aggregate_signals.py详细介绍
Edge Signal Aggregator
概述
将多个上游边缘发现技能的输出合并为一个加权信心度仪表板。此技能会应用可配置的信号权重、对重叠主题进行去重、标记不同技能之间的矛盾,并按综合信心度评分对边缘想法进行排名。最终结果是一个按优先级排序的边缘想法候选清单,并附有指向各贡献技能的来源链接。
适用场景
- 运行多个边缘发现技能后,希望获得统一视图
- 整合来自 edge-candidate-agent、theme-detector、sector-analyst 和 institutional-flow-tracker 的信号
- 根据多个信号来源做出投资组合配置决策之前
- 识别不同分析方法之间的矛盾
- 确定哪些边缘想法值得深入研究
前提条件
- Python 3.9+
- 无需 API 密钥(处理来自其他技能的本地 JSON/YAML 文件)
- 依赖项:
pyyaml(大多数环境中已包含)
工作流
步骤 1:收集上游技能输出
收集要聚合的上游技能输出文件:
reports/edge_candidate_*.json,来自 edge-candidate-agentreports/edge_concepts_*.yaml,来自 edge-concept-synthesizerreports/theme_detector_*.json,来自 theme-detectorreports/sector_analyst_*.json,来自 sector-analystreports/institutional_flow_*.json,来自 institutional-flow-trackerreports/edge_hints_*.yaml,来自 edge-hint-extractor
步骤 2:运行信号聚合
执行聚合脚本,并传入上游输出的路径:
python3 skills/edge-signal-aggregator/scripts/aggregate_signals.py \
--edge-candidates reports/edge_candidate_agent_*.json \
--edge-concepts reports/edge_concepts_*.yaml \
--themes reports/theme_detector_*.json \
--sectors reports/sector_analyst_*.json \
--institutional reports/institutional_flow_*.json \
--hints reports/edge_hints_*.yaml \
--output-dir reports/
可选:使用自定义权重配置:
python3 skills/edge-signal-aggregator/scripts/aggregate_signals.py \
--edge-candidates reports/edge_candidate_agent_*.json \
--weights-config skills/edge-signal-aggregator/assets/custom_weights.yaml \
--output-dir reports/
步骤 3:查看聚合仪表板
打开生成的报告并查看:
- 排名靠前的边缘想法 - 按综合信心度评分排序
- 信号来源 - 各想法由哪些技能贡献
- 矛盾 - 标记相互冲突的信号,供人工审核
- 去重日志 - 合并的重叠主题
步骤 4:对高信心度信号采取行动
按最低信心度阈值筛选候选清单:
python3 skills/edge-signal-aggregator/scripts/aggregate_signals.py \
--edge-candidates reports/edge_candidate_agent_*.json \
--min-conviction 0.7 \
--output-dir reports/
输出格式
JSON 报告
{
"schema_version": "1.1",
"generated_at": "2026-03-02T07:00:00Z",
"config": {
"weights": {
"edge_candidate_agent": 0.25,
"edge_concept_synthesizer": 0.20,
"theme_detector": 0.15,
"sector_analyst": 0.15,
"institutional_flow_tracker": 0.15,
"edge_hint_extractor": 0.10
},
"min_conviction": 0.5,
"dedup_similarity_threshold": 0.8
},
"summary": {
"total_input_signals": 42,
"unique_signals_after_dedup": 28,
"contradictions_found": 3,
"signals_above_threshold": 12,
"invalid_signals_dropped": 2,
"idempotency_check": {
"total_input_signals": 42,
"unique_evidence_ids": 28,
"duplicate_copies_merged": 14,
"independent_units_total": 30
}
},
"ranked_signals": [
{
"rank": 1,
"signal_id": "sig_001",
"title": "AI Infrastructure Capex Acceleration",
"composite_score": 0.87,
"evidence_id": "ticket_2026-03-01_001",
"score_scale_assumed": false,
"contributing_skills": [
{
"skill": "edge_candidate_agent",
"signal_ref": "ticket_2026-03-01_001",
"raw_score": 0.92,
"weighted_contribution": 0.23,
"evidence_id": "ticket_2026-03-01_001",
"event_fingerprint": "sha1-of-title-and-tickers"
},
{
"skill": "theme_detector",
"signal_ref": "theme_ai_infra",
"raw_score": 0.85,
"weighted_contribution": 0.13
}
],
"tickers": ["NVDA", "AMD", "AVGO"],
"direction": "LONG",
"time_horizon": "3-6 months",
"confidence_breakdown": {
"multi_skill_agreement": 0.30,
"signal_strength": 0.35,
"recency": 0.22
}
}
],
"contradictions": [
{
"contradiction_id": "contra_001",
"description": "Conflicting sector view on Energy",
"skill_a": {
"skill": "sector_analyst",
"signal": "Energy sector bearish rotation",
"direction": "SHORT"
},
"skill_b": {
"skill": "institutional_flow_tracker",
"signal": "Heavy institutional buying in XLE",
"direction": "LONG"
},
"resolution_hint": "Check timeframe mismatch (short-term vs long-term)"
}
],
"deduplication_log": [
{
"merged_into": "edge_candidate_agent:ticket_001",
"duplicates_removed": ["edge_candidate_agent:ticket_001@reports/ticket_001.json"],
"similarity_score": 1.0,
"reason": "same evidence re-ingested",
"selection_rule": "newest timestamp wins; ties, missing, or unparsable timestamps keep the highest raw_score, then a stable key",
"retained_copy": {
"signal_ref": "ticket_001",
"source_file": "reports/rerun.json",
"raw_score": 0.5,
"timestamp": "2026-10-10T00:00:00Z"
},
"discarded_copies": [
{
"signal_ref": "ticket_001",
"source_file": "reports/ticket_001.json",
"raw_score": 0.9,
"timestamp": "2026-10-09T00:00:00Z"
}
]
},
{
"merged_into": "edge_candidate_agent:ticket_001",
"duplicates_removed": ["theme_detector:ai_compute"],
"similarity_score": 0.9
}
],
"invalid_signals": [
{
"skill": "theme_detector",
"signal_ref": "broken_theme",
"title": "Theme with a corrupted score",
"reason": "non_finite",
"declared_scale": null,
"raw_value_repr": "nan",
"source_file": "reports/theme_detector_2026-03-01.json"
}
],
"scale_assumptions_report": [
{
"skill": "theme_detector",
"signal_ref": "ai_compute",
"value": 7.2,
"normalized_value": 0.072,
"assumed_scale": "0-100",
"source_file": "reports/theme_detector.json"
}
]
}
Producer 契约(可选键,schema 1.1)
每个 producer 条目(ticket、concept、theme、sector row、flow、hint)都可以携带:
evidence_id— 底层证据的稳定标识符。若没有此键,则根据 skill、signal reference、标题、tickers 和方向生成确定性回退值(排除时间戳,以防刷新时间戳伪造新身份)。重新摄取相同证据(相同 skill +evidence_id)绝不会增加加成:所有副本都会合并为一个。副本不同时,以最新观测为准:保留时间戳最新的副本,时间戳按解析后的带时区日期时间进行比较(仅日期值和不带时区的值均按 UTC 读取)。若时间戳相同、缺失或无法解析,则依次采用最高raw_score,再按稳定键(signal_ref、source_file)确定,因此摄取顺序不会改变结果。只有 ISO-8601 字符串(或YYYY-MM-DD)会参与排序;epoch 数字和20261010之类的紧凑格式视为缺失时间戳。其余完全相同的情况按标题、方向、tickers 以及 signal 的规范化转储进行区分。若某个副本携带的分数早于保留副本,则会被丢弃,因此较新的低分会替换较旧的高分。被丢弃副本的分数和时间戳会列在deduplication_log[].discarded_copies中。完全相同的副本不会改变分数。score_scale—"0-1"或"0-100",声明原始分数的范围。声明的范围会严格执行:NaN/无穷大/负值/超范围值会被拒绝并归入invalid_signals,绝不会转换成最高置信度。存在但无法解析的声明(""、"foo")也会被拒绝(missing_scale)。若省略此键,则 (1, 100] 范围内的值会除以 100,并标记score_scale_assumed: true,同时添加一条scale_assumptions_report记录(value为原始输入,normalized_value为使用的 0-1 分数);大于 100 的值会被拒绝。
一致性规则(Issue #510)
一致性加成按合并信号贡献者中的 distinct evidence_ids、distinct event_fingerprints 和 distinct skills 三者最小值计算,即 agreement_tier = min(distinct evidence_ids, distinct event_fingerprints, distinct skills):tier 2 可获得双 skill 加成,tier 3+ 可获得三项及以上加成。重新摄取的重复项不会获得加成;另一 skill 重述同一事件(规范化标题 + tickers 相同)只计一次。已知限制:事件指纹基于词汇,因此即使改述后的词集互不重叠,仍会获得一致性加成——对跨 skill 的改述应进行独立验证。合并后的重复项不再按副本获得加成(merge_bonus_per_duplicate 已弃用且会被忽略)。
Markdown 报告
Markdown 报告提供易于阅读的仪表板:
# Edge Signal Aggregator Dashboard
**Generated:** 2026-03-02 07:00 UTC
## Summary
- Total Input Signals: 42
- Unique After Dedup: 28
- Contradictions: 3
- High Conviction (>=0.5): 12
## Top 10 Edge Ideas by Conviction
### 1. AI Infrastructure Capex Acceleration (Score: 0.87)
- **Tickers:** NVDA, AMD, AVGO
- **Direction:** LONG | **Horizon:** 3-6 months
- **Contributing Skills:**
- edge-candidate-agent: 0.92 (ticket_2026-03-01_001)
- theme-detector: 0.85 (theme_ai_infra)
- **Confidence Breakdown:** Agreement 0.30 | Strength 0.35 | Recency 0.22
...
## Contradictions Requiring Review
### Energy Sector Conflict
- **sector-analyst:** Bearish rotation (SHORT)
- **institutional-flow-tracker:** Heavy buying XLE (LONG)
- **Hint:** Check timeframe mismatch
## Deduplication Summary
- 14 signals merged into 8 unique themes
- Average similarity of merged signals: 0.89
报告保存在 reports/ 中,文件名为:
edge_signal_aggregator_YYYY-MM-DD_HHMMSS.jsonedge_signal_aggregator_YYYY-MM-DD_HHMMSS.md
资源
scripts/aggregate_signals.py-- 主聚合脚本,包含 CLI 接口references/signal-weighting-framework.md-- 默认权重和评分方法的依据assets/default_weights.yaml-- 默认 skill 权重配置
核心原则
- 来源追踪 —— 每条汇总信号都会关联到其来源技能和原始参考
- 透明呈现矛盾 —— 标记而非隐藏相互冲突的信号,以便做出明智的决策
- 权重可配置 —— 默认权重反映了典型的可靠性,但可按用户自定义
- 去重但不丢失信息 —— 合并后的信号仍保留对所有原始来源的引用
- 输出可执行 —— 提供经过排序的列表,其中每个想法都包含清晰的股票代码、方向和时间范围
- 幂等聚合 —— 重新摄取相同证据绝不会抬高分数;只有来自不同技能且对应不同事件的信号一致时,才计为一致性加分
- 严格的分数验证 —— NaN/无穷大、负数和超出范围的分数都会被拒绝并报告,绝不会被转换为最高置信度