mcpField
E
edge-signal-aggregator

edge-signal-aggregator

github.com/tradermonty数据与数据库3.4k3.2k 次安装2 天前更新
代码仓库

关于 edge-signal-aggregator

将多个 edge 探测技能的输出汇总为加权排序面板的技能。它保留信号来源、合并重叠项,并标出相互矛盾的信号供人工检查。

主要功能

  1. 01加权综合置信度评分
  2. 02合并重叠信号
  3. 03检测矛盾信号
  4. 04保留来源追溯链接
  5. 05可配置权重和置信度门槛
  6. 06生成 JSON 与 Markdown 报告

适用场景

  1. 01汇总多个分析技能的输出
  2. 02筛选优先深入研究的 edge 想法
  3. 03在配置投资前检查冲突信号

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/tradermonty/claude-trading-skills --skill edge-signal-aggregator

安装后在 Claude Code 中输入/edge-signal-aggregator确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

requirements.txt
assets/
default_weights.yaml
references/
signal-weighting-framework.md
scripts/
aggregate_signals.py
scripts/tests/
conftest.py
test_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-agent
  • reports/edge_concepts_*.yaml,来自 edge-concept-synthesizer
  • reports/theme_detector_*.json,来自 theme-detector
  • reports/sector_analyst_*.json,来自 sector-analyst
  • reports/institutional_flow_*.json,来自 institutional-flow-tracker
  • reports/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:查看聚合仪表板

打开生成的报告并查看:

  1. 排名靠前的边缘想法 - 按综合信心度评分排序
  2. 信号来源 - 各想法由哪些技能贡献
  3. 矛盾 - 标记相互冲突的信号,供人工审核
  4. 去重日志 - 合并的重叠主题
步骤 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.json
  • edge_signal_aggregator_YYYY-MM-DD_HHMMSS.md

资源

  • scripts/aggregate_signals.py -- 主聚合脚本,包含 CLI 接口
  • references/signal-weighting-framework.md -- 默认权重和评分方法的依据
  • assets/default_weights.yaml -- 默认 skill 权重配置

核心原则

  1. 来源追踪 —— 每条汇总信号都会关联到其来源技能和原始参考
  2. 透明呈现矛盾 —— 标记而非隐藏相互冲突的信号,以便做出明智的决策
  3. 权重可配置 —— 默认权重反映了典型的可靠性,但可按用户自定义
  4. 去重但不丢失信息 —— 合并后的信号仍保留对所有原始来源的引用
  5. 输出可执行 —— 提供经过排序的列表,其中每个想法都包含清晰的股票代码、方向和时间范围
  6. 幂等聚合 —— 重新摄取相同证据绝不会抬高分数;只有来自不同技能且对应不同事件的信号一致时,才计为一致性加分
  7. 严格的分数验证 —— NaN/无穷大、负数和超出范围的分数都会被拒绝并报告,绝不会被转换为最高置信度

评论

支持 Markdown