Claude Skill

trade-gate

交易决策关卡——任何买入/加仓/卖出/减仓动作发生前,先过一遍写死的检查关卡, 打分给出判定,判定与实际执行不一致的记为违规,落盘 JSON 供复盘统计。三个 入口:买入漏斗(六层打分,硬门+软分)、卖出触发器(复用用户既有的 6/27 持有计划触发线、周期见顶清单、爆仓潮反向保护)、巡检(对长桥全部持仓批量跑 卖出触发器)。不拦截下单(本仓库长桥只读),约束力来自违规账单而非技术拦截。 Triggers: 我想买 X、我想加仓 X、我想卖 X、我想减 X、要不要止盈、要不要止损、 巡检、跑一遍卖出检查、算一下违规账单、我该不该现在动这只票、trade

LLM Mart · 0 points · 8 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download kansoku-trade-kansoku-.claude_skills_trade-gate-4994657.zip · 12 KB
Part of kansoku-trade/kansoku — 11 skills

Install

skills CLI npx skills add https://github.com/kansoku-trade/kansoku/tree/main/.claude/skills/trade-gate
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install kansoku-trade-kansoku@llmmart
Git git clone https://github.com/kansoku-trade/kansoku.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole kansoku-trade/kansoku collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

trade-gate

把交易纪律从"自觉"变成"流程":买入/加仓过六层打分漏斗,卖出/减仓过触发器 矩阵,巡检模式对全部持仓批量跑触发器。每次决策(含被否决的)落盘一条 JSON; 下次运行时自动核对实际成交、回填是否违规;"算一下违规账单"时统计违规笔数与 盈亏对比。

Scope:本 skill 不下单,只判定+记录。约束力来自"违规的那些亏了多少"这笔 账,不来自程序拦截。三种记录类型的完整字段定义见 references/schema.md——本文件只讲工作流,不重复 字段表。

When to use

  • "我想买 MU" / "我想加仓 NVDA" → 买入漏斗
  • "我想卖 DRAM" / "我想减仓 SMH" / "要不要止盈" → 卖出触发器
  • "/trade-gate 巡检" / "跑一遍卖出检查" / 暴跌日主动跑一遍全持仓 → 巡检模式
  • "算一下违规账单" → 违规统计(见 Step 6)
  • Not for 无买卖意图的纯行情/基本面提问——那是 longbridge-quote / longbridge-fundamental 等单一 lens 的事
  • Not for 第一次认识一只票的六镜头建档——那是 stock-deep-dive(本 skill 的能力圈硬门失败时会反过来调用它)

Step 0 — 运行前必读

每次运行,无论走哪个入口,先读 journal/lessons.md。 这是过去复盘沉淀的 教训清单,每一条都是用真实亏损换来的;如果某条教训适用于当前这笔决策,在 输出里明说(如"该止损位已避开某扎堆区,参照 lessons 2026-07-06")。

同时判断入口:用户话里出现"买/加仓" → Step 1;"卖/减仓/止盈/止损"→ Step 2; "巡检" → Step 3;"违规账单" → Step 6。入口含糊(比如只说"这只票怎么办"且 用户已持仓)时,先问清是评估买入还是评估卖出,不要猜。

Step 1 — 买入漏斗(六层)

① 能力圈(硬门)

检查 stocks/{SYMBOL}.md 是否存在且非空(六镜头笔记)。

  • 不存在或为空 → 不打分,直接终止本次流程,落盘一条 verdict: "rejected_hard_gate" 记录(circle: "fail",其余分项字段为 null),然后建议:先跑 stock-deep-dive 建立六镜头笔记,笔记建好后再回来 跑一次 trade-gate。
  • 存在且非空 → circle: "pass",继续下一层。

② 可证伪逻辑(0–2 分)

问用户一句话:"为什么会涨?"+"什么情况算我错了?"(thesis + falsifier)。

  • 逻辑清楚 + 写出证伪条件 = 2
  • 只有逻辑,没写证伪条件 = 0
  • 逻辑含糊(比如"感觉要涨") = 1

用户拒绝写证伪条件:不代填、不猜,falsifier 记为空字符串,logic 按上述 标准打 0 分,照常往下走(这不是硬门,只是拉低软分)。

③ 估值与周期(0–2 分)

拉两样东西:

  1. 周期见顶清单当前触发数——从 Claude memory 读取 project-ai-memory-cycle-top-signals 这条记忆里记录的 11 条信号,逐条核对 最新状态(不要凭记忆里的旧状态直接报数,凡是能用 longbridge 数据核实的都 现查一遍)。
  2. 股价相对 52 周区间与均线的位置——longbridge kline <SYM>.US --period day 之类调用,判断是否处于历史高位/均线极端偏离。

打分:触发 0–1 条且位置不极端 = 2;触发 2 条 = 1;触发 ≥3 条 = 0。

④ 技术与买点(0–2 分)

  • 日 K + 分时定性放量/缩量——对齐前几日同时段成交量再下结论,不要拿全天 量粗暴对比分时量(这是 market-session-tracker 沿用下来的既有纪律)。
  • 检查是否处于爆仓潮未洗净期——三判据同 Step 2 的「反向保护」小节,触发即 视为技术层减分项。
  • 把 journal/lessons.md 里跟当前标的/setup 相关的技术教训逐条核对一遍, 有相关的就在输出里点名。

打分:量价配合且无未洗净爆仓潮 = 2;有一项存疑 = 1;缩量阴跌中接飞刀或处于 未洗净爆仓潮 = 0。

⑤ 仓位与集中度(0–2 分)

拉 longbridge positions --format json + longbridge portfolio --format json (不要问用户持仓和现金,直接查长桥——这是仓库级别的强制规则)。算本笔 加仓后 AI/半导体主线(NVDA/MRVL/SMH/DRAM/QQQM 等高度重叠的持仓)的合计真实 敞口——按穿透后的合计算,不按单票算,因为这几个标的对同一条主线有重叠 敞口。

打分:不加杠杆且加仓后现金未清零 = 2;现金基本用尽(<本笔金额的 50%) = 1; 需要杠杆或超出名义上限 = 0。

⑥ 退出预设(硬门)

要求用户在下单前写死:止损位(具体价格数字)+ 机械减仓规则(比如"跌破止损 减半,反抽不站上前低清仓")。

  • 任一项写不出来 → exit: "fail",直接否决(verdict: "rejected_hard_gate"), 不再看软分。
  • 两项都写出来 → exit: "pass"。

判定与输出

  • 硬门(①⑥)任一 fail → verdict: "rejected_hard_gate",soft_total: null。
  • 两个硬门都 pass 时,soft_total = ②③④⑤ 四项之和(0–8):
    • soft_total ≥ 6 → verdict: "buy_staged"(可买,分批)
    • soft_total 4–5 → verdict: "watch"(观望或试探仓)
    • soft_total < 4 → verdict: "rejected"

输出必须包含:六层分项得分(硬门用 pass/fail,软分用数字)、判定、每项依据的 关键数据(带 source + at,即 key_data)、若 buy_staged 则附 plan(止损、机械减仓规则、名义上限、建议的分批节奏)。然后落盘(见 Step 4)。

Step 2 — 卖出触发器

对单票(或巡检模式下的每个持仓)逐项检查,任一触发即在输出中高亮并给出对应 动作建议。不发明新规则,只把用户已有规则编成可执行检查项:

1. 6/27 持有计划触发线 A/B/C/D

来源:用户 2026-06-27 定的持有计划(memory project-hold-through-plan-2026-06-27)。四条线:

  • A 基本面恶化——查 longbridge-fundamental / 财报数据
  • B SMH < $560——查 longbridge quote SMH.US
  • C 连续 3 日机构派发——查 longbridge-capital-flow
  • D 美联储转向加息——查 fred 联邦基金利率/点阵图相关序列

四个布尔值都要给出,拿不到数据的那项写"未获取到",不猜。

2. 周期见顶清单触发数(11 条)

同 Step 1③,从 memory project-ai-memory-cycle-top-signals 读取 11 条信号, 现查触发状态而非照抄旧记忆里的数字。触发数变化时,按用户自己定的减仓规则 给建议(比如"触发数从 2 条变 3 条,按既定规则该减一档")。

3. 原文六分类兜底

  • logic_falsified(逻辑证伪)——对照买入时写的 falsifier 是否已经发生, 能从数据判
  • valuation_bubble(估值泡沫)——能从数据判
  • mechanical_trim_due(机械减仓到点)——对照买入时的 trim_rule,能从数据判
  • stop_hit(止损触及)——对照买入时的 stop,能从数据判
  • opportunity_cost(机会成本)——列为问句,让用户自答,不强行给布尔值
  • position_imbalance(仓位失衡)——列为问句,让用户自答

4. 反向保护——爆仓潮检查

无论以上触发几条,都先查这一项。判据(来源 journal/lessons.md 2026-07-13 那条教训,三取二 = 洗净):

  1. SK Hynix / KOSPI 连续两天不创新低——用 korea-market skill 查
  2. 韩国追保比例掉头回落——用 korea-market skill 查
  3. 美股存储链放量阳线——用 longbridge 查 MU/美光供应链相关标的

三项里满足 ≥2 项才算洗净。未洗净时(in_unclean_flush: true),无论 上面 1–3 触发几条,判定恒为 verdict: "blocked_by_flush",并在输出里附上 提示:"不要卖在爆仓潮里,要卖在洗净后的反弹里"——这条反向保护优先级高于其他 所有触发信号。

韩国数据取不到时,flush_check 输出"未获取到",不阻塞主流程(既不算洗净也 不算未洗净,只是提示这块信息缺口,verdict 按其余触发器正常判定)。

判定

未处于未洗净爆仓潮时,综合 1–3 的触发情况给出:exit(应清仓)/ trim(应减仓)/ hold(暂不动)。三个类别的具体归类没有额外的数字公式—— 参照第 1、2 条触发的严重程度 + 第 3 条命中数量做综合判断,并在输出里写清楚 "为什么是这个判定",而不是套死板算式(卖出端本来就是复用用户已有规则,不 新增打分体系)。

落盘见 Step 4。

Step 3 — 巡检模式

触发词:"/trade-gate 巡检"、"跑一遍卖出检查",或暴跌日主动建议跑一次。

  1. 拉 longbridge positions --format json 取全部持仓。
  2. 先跑一次 Step 2 第 4 项(爆仓潮检查)——这是全局性判据,只需要查一次, 所有持仓共用同一份结果。
  3. 对每个持仓分别跑 Step 2 的第 1–3 项,得到各自的 triggers + verdict。
  4. 输出一张汇总表:每个持仓 × 每组触发器的状态(未触发 / 触发 / 数据未获取 到),触发项展开说明;顶部先亮出爆仓潮检查的全局结论。
  5. 落盘一条 action: "patrol" 记录(结构见 schema.md,flush_check 在顶层, 每个持仓的 triggers 不重复写 flush_check)。

Step 4 — 落盘

三种记录类型(买入/卖出/巡检)的完整字段定义、verdict 枚举、scores / triggers 结构,全部在 references/schema.md,这里 不重复。落盘路径:

journal/decisions/YYYY-MM-DD-SYMBOL-buy.json
journal/decisions/YYYY-MM-DD-SYMBOL-sell.json
journal/decisions/YYYY-MM-DD-patrol.json

journal/ 是 git 忽略目录,journal/decisions/ 子目录当前也不存在——第一次 运行时若目录不存在,先建目录再写文件,不要因为目录不存在就跳过落盘。

同日同票第二次决策,文件名追加序号(-2,然后 -3……),永远不覆盖已有 文件。executed / violation 两个字段决策当下一律写 null,由 Step 5 的 核对逻辑回填。

Step 5 — 执行核对(不靠自觉汇报)

每次运行本 skill 的任何入口(买入/卖出/巡检都算一次运行),开始正式流程 之前,先做一遍这个核对:

  1. 找出 journal/decisions/ 里所有 executed: null 的记录,仅限 action 为 buy 或 sell 的记录;action: "patrol" 的记录跳过(巡检不涉及买卖执行)。
  2. 对每条记录的 symbol,拉 longbridge 的成交记录(订单/成交历史),比对 决策日期之后到今天之间是否有对应成交。
  3. 按 schema.md「执行核对回填规则」表逐条判定并回填 executed / violation, 直接改写对应的 JSON 文件(只追加/修改这两个字段,不动其他判定字段)。
  4. 5 个交易日仍无成交的记录,回填 executed: false, violation: false(放弃 执行不算违规)。

这一步是静默的账本维护,不需要单独汇报给用户,除非发现了新的违规(则在本次 运行的输出末尾提一句"顺带核对出一笔违规:……")。

Step 6 — 违规账单统计

触发词:"算一下违规账单"。

  1. 读 journal/decisions/ 下全部 JSON。
  2. 过滤 violation: true 的记录。
  3. 对每条记录的 symbol 调 longbridge-profit-analysis 取已实现/未实现盈亏。
  4. 输出:违规笔数、违规合计盈亏;守规笔数(executed: true, violation: false) 合计盈亏;两者对比结论(比如"违规的那几笔平均亏 X%,守规的平均赚 Y%")。

阶段一由 Claude 现场读 JSON 现算,不写统计脚本;如果将来 JSON 文件多到现算 吃力,再补一个 stdlib-only 的统计脚本(不在本次范围内)。

错误处理

  • 长桥调用失败 → 对应层/对应触发项记"数据未获取到",该层不给分也不猜, 判定降级为"观望"(买入端)或该触发项标"数据未获取到"(卖出/巡检端),并在 输出里注明缺口。禁止用记忆填数——这是仓库级反幻觉规则,本 skill 同样 适用:拿不到实时数据时,绝不能拿 Claude memory 里的旧结论当作本次的 key_data。
  • 韩国数据取不到 → 爆仓潮检查输出"未获取到",不阻塞主流程,verdict 按 其余触发器正常判定。
  • 用户拒绝写证伪条件或止损位 → 按硬门规则处理:②记 0 分(不阻塞),⑥ 直接否决(阻塞),两种情况都照常落盘。

Anti-patterns

  • ❌ 能力圈笔记不存在时跳过硬门直接打分——必须先终止并建议跑 stock-deep-dive
  • ❌ 拿不到长桥数据时用记忆/猜测填 key_data,而不是老实写"数据未获取到"
  • ❌ 爆仓潮未洗净时仍然给出 exit/trim 判定——反向保护必须覆盖其他触发器
  • ❌ 询问用户持仓/现金/成本价——直接查长桥(longbridge-positions / longbridge-portfolio)
  • ❌ 巡检模式对每个持仓重复查一遍爆仓潮判据——这是全局判据,查一次复用
  • ❌ 决策当下就填写 executed/violation——这两个字段只能由下次运行时的 核对逻辑回填
  • ❌ 覆盖已有的决策 JSON 文件——同日同票第二次决策必须追加序号
  • ❌ 周期见顶清单直接照抄 memory 里的旧触发状态,不现查最新数据
  • ❌ 卖出端发明新的判定规则,而不是复用 6/27 持有计划 / 周期见顶清单 / lessons.md 里已有的规则
  • ❌ 忘记 journal/decisions/ 目录首次不存在时要先建目录

Related skills

  • stock-deep-dive — 能力圈硬门失败时的补救路径(建立六镜头笔记)
  • longbridge-positions / longbridge-portfolio — 仓位与集中度层、执行核对 的持仓与账户数据来源
  • longbridge-capital-flow — 卖出触发线 C(机构派发)、技术层放量定性
  • korea-market — 爆仓潮反向保护判据①②
  • fred — 卖出触发线 D(美联储转向)
  • longbridge-profit-analysis — 违规账单统计的盈亏数据来源
  • market-session-tracker — 巡检模式的日常延伸场景(暴跌日先跑 patrol 再决定 是否转入更细的 session 监控)
  • intraday-signal — 本 skill 的结构模板来源;两者互补而非替代, intraday-signal 给方向判断,trade-gate 给纪律关卡
Files (kansoku)
  • references
    • schema.md 13.6 KB
      # trade-gate 决策记录 JSON schema
      
      三种记录类型,落盘路径分别是:
      
      ```
      journal/decisions/YYYY-MM-DD-SYMBOL-buy.json
      journal/decisions/YYYY-MM-DD-SYMBOL-sell.json
      journal/decisions/YYYY-MM-DD-patrol.json
      ```
      
      `journal/` 整个目录被 git 忽略,`journal/decisions/` 目录本身也不存在于仓库里——第一次落盘时若目录不存在,先建目录再写文件。同一天同一只票如果跑了第二次决策(比如上午否决、下午改口再问一次),文件名追加序号:`YYYY-MM-DD-SYMBOL-buy-2.json`。**永远不覆盖已有文件**,序号从 2 开始往上找第一个不存在的文件名。
      
      ## 通用字段(三种记录共有)
      
      | 字段        | 类型            | 说明                                                                                                           |
      | ----------- | --------------- | -------------------------------------------------------------------------------------------------------------- |
      | `date`      | string          | 决策发生的美股交易日,`YYYY-MM-DD`                                                                             |
      | `symbol`    | string          | 标的代码,不带交易所后缀(如 `MU`);patrol 记录省略此字段,改用 `positions` 数组                              |
      | `action`    | string          | `buy` \| `sell` \| `patrol`                                                                                    |
      | `key_data`  | array           | 支撑判定的关键数据点,见下方「key_data 元素」                                                                  |
      | `executed`  | boolean \| null | 执行核对结果,决策当下永远是 `null`,由下次运行时回填;仅适用于 buy 和 sell 记录                               |
      | `violation` | boolean \| null | 违规判定,决策当下永远是 `null`,由下次运行时回填;仅适用于 buy 和 sell 记录(巡检不是一次决策,没有对应成交) |
      
      ### key_data 元素
      
      ```json
      {
        "at": "2026-07-14T09:30:00-04:00",
        "fact": "MU 现价 $142.30,20日均线 $138",
        "source": "longbridge kline"
      }
      ```
      
      - `fact`:一句话事实陈述,带具体数字。
      - `source`:数据来自哪个工具/skill(如 `longbridge kline`、`longbridge-capital-flow`、`korea-market`、`memory`)。
      - `at`:数据取得的时间戳(ISO 8601,带时区)。
      
      若某一层因长桥调用失败拿不到数据,`key_data` 里对应条目写 `"fact": "数据未获取到"`,不得用记忆或猜测填充(见 CLAUDE.md 反幻觉规则)。
      
      ## 买入记录(`action: "buy"`)
      
      ```json
      {
        "action": "buy",
        "date": "2026-07-14",
        "emotion": "有点追高的不安,但逻辑没变",
        "executed": null,
        "falsifier": "用户写下的证伪条件:什么情况算我错了",
        "key_data": [
          {
            "fact": "MU 现价 $142.30,20日均线 $138",
            "source": "longbridge kline",
            "at": "2026-07-14T09:30:00-04:00"
          }
        ],
        "plan": {
          "stop": 58.5,
          "trim_rule": "跌破止损减半,反抽不站上前低清仓",
          "size_cap_usd": 600,
          "staging": "分两批,首批 60%,回踩不破位加第二批"
        },
        "scores": {
          "circle": "pass",
          "logic": 2,
          "cycle": 1,
          "technical": 2,
          "position": 1,
          "exit": "pass"
        },
        "soft_total": 6,
        "symbol": "MU",
        "thesis": "用户原话:为什么会涨",
        "verdict": "buy_staged",
        "violation": null
      }
      ```
      
      ### `scores` 字段(六层打分)
      
      对应设计文档「买入漏斗(六层)」:
      
      | 键          | 对应层            | 取值                 | 说明                                                                                                                            |
      | ----------- | ----------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
      | `circle`    | ①能力圈(硬门)   | `"pass"` \| `"fail"` | `stocks/{SYMBOL}.md` 六镜头笔记是否存在且非空;`fail` 时终止流程,不产出软分,直接落盘一条 `verdict: "rejected_hard_gate"` 记录 |
      | `logic`     | ②可证伪逻辑       | `0` \| `1` \| `2`    | 有逻辑+有证伪条件=2;只有逻辑没证伪条件=0;逻辑含糊=1                                                                           |
      | `cycle`     | ③估值与周期       | `0` \| `1` \| `2`    | 周期见顶清单触发 0–1 条且位置不极端=2;触发 2 条=1;触发 ≥3 条=0                                                                |
      | `technical` | ④技术与买点       | `0` \| `1` \| `2`    | 量价配合且无未洗净爆仓潮=2;有一项存疑=1;缩量阴跌接飞刀或爆仓潮未洗净=0                                                        |
      | `position`  | ⑤仓位与集中度     | `0` \| `1` \| `2`    | 不加杠杆且加仓后现金未清零=2;现金基本用尽(<本笔金额 50%)=1;需杠杆或超名义上限=0                                             |
      | `exit`      | ⑥退出预设(硬门) | `"pass"` \| `"fail"` | 止损位+机械减仓规则是否写死;`fail` 时直接否决,不看软分                                                                        |
      
      `soft_total` = `logic + cycle + technical + position` 之和(0–8),仅在两处硬门都 `pass` 时才有意义;硬门任一 `fail` 时 `soft_total` 写 `null`。
      
      ### `verdict` 枚举(买入)
      
      | 值                   | 触发条件                                      |
      | -------------------- | --------------------------------------------- |
      | `rejected_hard_gate` | ① 或 ⑥ 任一硬门 `fail`                        |
      | `rejected`           | 硬门都过,`soft_total < 4`                    |
      | `watch`              | 硬门都过,`soft_total` 为 4–5(观望或试探仓) |
      | `buy_staged`         | 硬门都过,`soft_total ≥ 6`(可买,分批)      |
      
      ### `plan` 字段
      
      只在 `verdict` 为 `watch`(试探仓可选)或 `buy_staged` 时必须完整填写:
      
      - `stop`:止损价,数字。
      - `trim_rule`:机械减仓规则,一句话。
      - `size_cap_usd`:本笔名义金额上限(美元)。
      - `staging`:分批节奏说明。
      
      `rejected` / `rejected_hard_gate` 时 `plan` 整体写 `null`。
      
      ## 卖出记录(`action: "sell"`)
      
      ```json
      {
        "action": "sell",
        "date": "2026-07-14",
        "emotion": "看着账户回撤有点慌,但纪律说等",
        "executed": null,
        "falsifier": null,
        "key_data": [
          {
            "fact": "SK Hynix 连续两日创新低,未满足条件①",
            "source": "korea-market",
            "at": "2026-07-14T21:00:00+09:00"
          }
        ],
        "plan": {
          "stop": null,
          "trim_rule": "洗净后再执行既定减仓比例",
          "size_cap_usd": null,
          "staging": "等三取二条件满足再卖"
        },
        "symbol": "MU",
        "thesis": "用户原话:为什么想卖",
        "triggers": {
          "hold_plan": { "A": false, "B": false, "C": true, "D": false },
          "cycle_top_list": { "fired_count": 2, "total": 11, "items": ["#1 供给扩张", "#9 消费上限"] },
          "six_category": {
            "logic_falsified": false,
            "valuation_bubble": false,
            "mechanical_trim_due": true,
            "stop_hit": false,
            "opportunity_cost": "问句:有没有更好的去处?",
            "position_imbalance": "问句:这只票占比是否过重?"
          },
          "flush_check": {
            "in_unclean_flush": true,
            "criteria": {
              "korea_no_new_low_2d": false,
              "margin_call_ratio_falling": true,
              "us_dram_volume_up_candle": false
            },
            "cleared_count": 1
          }
        },
        "verdict": "blocked_by_flush",
        "violation": null
      }
      ```
      
      ### `triggers` 字段(卖出专属,替代买入的 `scores`)
      
      - `hold_plan`:6/27 持有计划触发线 A/B/C/D 四个布尔值(A 基本面恶化 / B SMH < $560 / C 连续 3 日机构派发 / D 美联储转向加息)。
      - `cycle_top_list`:周期见顶清单(11 条,来源 memory `project-ai-memory-cycle-top-signals`)当前触发数 `fired_count` / `total`,以及触发条目名称列表 `items`。
      - `six_category`:原文六分类兜底。前四项(`logic_falsified` / `valuation_bubble` / `mechanical_trim_due` / `stop_hit`)是布尔值,能从数据直接判;后两项(`opportunity_cost` / `position_imbalance`)是问句字符串,列给用户自答,不强行给布尔值。
      - `flush_check`:爆仓潮反向保护检查。`criteria` 三项对应 lessons 7-13 的三取二判据:① `korea_no_new_low_2d`(SK Hynix / KOSPI 连续两日不创新低)② `margin_call_ratio_falling`(韩国追保比例回落)③ `us_dram_volume_up_candle`(美股存储链放量阳线)。`cleared_count` = 三项里 `true` 的个数;`cleared_count ≥ 2` 才算洗净(`in_unclean_flush: false`)。
      
      ### `verdict` 枚举(卖出)
      
      | 值                 | 触发条件                                                                                       |
      | ------------------ | ---------------------------------------------------------------------------------------------- |
      | `blocked_by_flush` | `flush_check.in_unclean_flush: true`——无论其余触发几条,爆仓潮未洗净的提示优先,其余判定先挂起 |
      | `exit`             | 未处于未洗净爆仓潮,且触发条件指向应清仓(如 A/B/C/D 命中且六分类多条同时命中,或止损触及)    |
      | `trim`             | 未处于未洗净爆仓潮,机械减仓到点或部分触发,建议减仓而非清仓                                   |
      | `hold`             | 未处于未洗净爆仓潮,触发条件不足以支持卖出动作                                                 |
      
      `flush_check.in_unclean_flush` 为 `true` 时,`verdict` 恒为 `blocked_by_flush`,即使其他触发器显示应该 `exit`——反向保护优先级最高。
      
      ### `plan` 字段(卖出)
      
      复用买入相同的四个键,语义按卖出场景调整:`stop` 卖出场景通常为 `null`(止损已经是触发条件之一,不是待设目标);`trim_rule` 描述具体减仓比例/节奏;`size_cap_usd` 卖出场景通常为 `null`;`staging` 描述分批卖出或等待洗净的节奏。
      
      ## 巡检记录(`action: "patrol"`,`journal/decisions/YYYY-MM-DD-patrol.json`)
      
      巡检是对全部持仓的一次性扫描,没有单一 `verdict`——每个持仓各自的触发情况才是输出主体。
      
      ```json
      {
        "action": "patrol",
        "date": "2026-07-14",
        "flush_check": {
          "in_unclean_flush": true,
          "criteria": {
            "korea_no_new_low_2d": false,
            "margin_call_ratio_falling": true,
            "us_dram_volume_up_candle": false
          },
          "cleared_count": 1
        },
        "key_data": [
          {
            "fact": "长桥持仓:MU/NVDA/SMH/DRAM/QQQM 共 5 个标的",
            "source": "longbridge positions",
            "at": "2026-07-14T09:00:00-04:00"
          }
        ],
        "positions": [
          {
            "symbol": "MU",
            "triggers": {
              "hold_plan": { "A": false, "B": false, "C": true, "D": false },
              "cycle_top_list": {
                "fired_count": 2,
                "total": 11,
                "items": ["#1 供给扩张", "#9 消费上限"]
              },
              "six_category": {
                "logic_falsified": false,
                "valuation_bubble": false,
                "mechanical_trim_due": true,
                "stop_hit": false,
                "opportunity_cost": "问句",
                "position_imbalance": "问句"
              }
            },
            "verdict": "blocked_by_flush"
          }
        ]
      }
      ```
      
      - `flush_check` 提到顶层,因为爆仓潮判据是全局性的(韩国/美股大盘数据),对所有持仓共用一份,不必每个持仓各查一次。
      - `positions[]` 每个元素的 `triggers` 结构与卖出记录的 `triggers` 一致(缺省 `flush_check` 字段,因为已提到顶层),外加一个 `verdict`,取值枚举同卖出记录的四值;`hold_plan` / `six_category` 里若某数据源当次没拿到,对应布尔值改写字符串 `"未获取到"` 而非猜测。
      
      ## 执行核对回填规则(`executed` / `violation`)
      
      不在决策当下填写,下次任何入口运行时,自动拉长桥**成交记录**,与所有 `executed: null` 的决策记录做 5 个交易日内的比对回填:
      
      | 情形                                                                                          | `executed` | `violation` | 备注                                |
      | --------------------------------------------------------------------------------------------- | ---------- | ----------- | ----------------------------------- |
      | 判定「可买/可卖」且成交价/数量在预设内                                                        | `true`     | `false`     | —                                   |
      | 判定「否决/观望/hold/blocked_by_flush」但实际成交了                                           | `true`     | `true`      | 附一条 `key_data` 说明实际成交价/量 |
      | 判定「可买/可卖」但成交偏离预设(超出 `size_cap_usd`、无视 `staging`、未按 `trim_rule` 执行) | `true`     | `true`      | 附偏离说明                          |
      | 过了 5 个交易日仍无对应成交                                                                   | `false`    | `false`     | 放弃执行不算违规                    |
      
      回填只追加字段,不改动原有的 `scores`/`triggers`/`plan` 等判定字段——决策记录是判定当下的快照,事后核对是追加的事实层。
      
      ## 违规账单统计
      
      "算一下违规账单" 时:读 `journal/decisions/*.json` 全部文件,过滤 `violation: true` 的记录,对每条记录的 `symbol` 调 `longbridge-profit-analysis` 取已实现/未实现盈亏,输出:违规笔数、违规合计盈亏、守规笔数(`executed: true, violation: false`)合计盈亏、两者对比结论。阶段一由 Claude 现场读取 JSON 并计算,不写脚本。
      
  • SKILL.md 15.2 KB
    ---
    name: trade-gate
    description: >
      交易决策关卡——任何买入/加仓/卖出/减仓动作发生前,先过一遍写死的检查关卡,
      打分给出判定,判定与实际执行不一致的记为违规,落盘 JSON 供复盘统计。三个
      入口:买入漏斗(六层打分,硬门+软分)、卖出触发器(复用用户既有的 6/27
      持有计划触发线、周期见顶清单、爆仓潮反向保护)、巡检(对长桥全部持仓批量跑
      卖出触发器)。不拦截下单(本仓库长桥只读),约束力来自违规账单而非技术拦截。
      Triggers: 我想买 X、我想加仓 X、我想卖 X、我想减 X、要不要止盈、要不要止损、
      巡检、跑一遍卖出检查、算一下违规账单、我该不该现在动这只票、trade decision
      gate, buy funnel, sell trigger, position patrol, violation ledger.
    ---
    
    # trade-gate
    
    把交易纪律从"自觉"变成"流程":买入/加仓过六层打分漏斗,卖出/减仓过触发器
    矩阵,巡检模式对全部持仓批量跑触发器。每次决策(含被否决的)落盘一条 JSON;
    下次运行时自动核对实际成交、回填是否违规;"算一下违规账单"时统计违规笔数与
    盈亏对比。
    
    > **Scope**:本 skill 不下单,只判定+记录。约束力来自"违规的那些亏了多少"这笔
    > 账,不来自程序拦截。三种记录类型的完整字段定义见
    > [`references/schema.md`](references/schema.md)——本文件只讲工作流,不重复
    > 字段表。
    
    ## When to use
    
    - "我想买 MU" / "我想加仓 NVDA" → 买入漏斗
    - "我想卖 DRAM" / "我想减仓 SMH" / "要不要止盈" → 卖出触发器
    - "/trade-gate 巡检" / "跑一遍卖出检查" / 暴跌日主动跑一遍全持仓 → 巡检模式
    - "算一下违规账单" → 违规统计(见 Step 6)
    - **Not** for 无买卖意图的纯行情/基本面提问——那是 `longbridge-quote` /
      `longbridge-fundamental` 等单一 lens 的事
    - **Not** for 第一次认识一只票的六镜头建档——那是 `stock-deep-dive`(本 skill
      的能力圈硬门失败时会反过来调用它)
    
    ## Step 0 — 运行前必读
    
    **每次运行,无论走哪个入口,先读 `journal/lessons.md`。** 这是过去复盘沉淀的
    教训清单,每一条都是用真实亏损换来的;如果某条教训适用于当前这笔决策,在
    输出里明说(如"该止损位已避开某扎堆区,参照 lessons 2026-07-06")。
    
    同时判断入口:用户话里出现"买/加仓" → Step 1;"卖/减仓/止盈/止损"→ Step 2;
    "巡检" → Step 3;"违规账单" → Step 6。入口含糊(比如只说"这只票怎么办"且
    用户已持仓)时,先问清是评估买入还是评估卖出,不要猜。
    
    ## Step 1 — 买入漏斗(六层)
    
    ### ① 能力圈(硬门)
    
    检查 `stocks/{SYMBOL}.md` 是否存在且非空(六镜头笔记)。
    
    - **不存在或为空** → 不打分,直接终止本次流程,落盘一条
      `verdict: "rejected_hard_gate"` 记录(`circle: "fail"`,其余分项字段为
      `null`),然后建议:先跑 `stock-deep-dive` 建立六镜头笔记,笔记建好后再回来
      跑一次 trade-gate。
    - **存在且非空** → `circle: "pass"`,继续下一层。
    
    ### ② 可证伪逻辑(0–2 分)
    
    问用户一句话:"为什么会涨?"+"什么情况算我错了?"(`thesis` + `falsifier`)。
    
    - 逻辑清楚 + 写出证伪条件 = 2
    - 只有逻辑,没写证伪条件 = 0
    - 逻辑含糊(比如"感觉要涨") = 1
    
    用户拒绝写证伪条件:不代填、不猜,`falsifier` 记为空字符串,`logic` 按上述
    标准打 0 分,照常往下走(这不是硬门,只是拉低软分)。
    
    ### ③ 估值与周期(0–2 分)
    
    拉两样东西:
    
    1. 周期见顶清单当前触发数——**从 Claude memory 读取**
       `project-ai-memory-cycle-top-signals` 这条记忆里记录的 11 条信号,逐条核对
       最新状态(不要凭记忆里的旧状态直接报数,凡是能用 longbridge 数据核实的都
       现查一遍)。
    2. 股价相对 52 周区间与均线的位置——`longbridge kline <SYM>.US --period day`
       之类调用,判断是否处于历史高位/均线极端偏离。
    
    打分:触发 0–1 条且位置不极端 = 2;触发 2 条 = 1;触发 ≥3 条 = 0。
    
    ### ④ 技术与买点(0–2 分)
    
    - 日 K + 分时定性放量/缩量——**对齐前几日同时段成交量再下结论**,不要拿全天
      量粗暴对比分时量(这是 `market-session-tracker` 沿用下来的既有纪律)。
    - 检查是否处于爆仓潮未洗净期——三判据同 Step 2 的「反向保护」小节,触发即
      视为技术层减分项。
    - 把 `journal/lessons.md` 里跟当前标的/setup 相关的技术教训逐条核对一遍,
      有相关的就在输出里点名。
    
    打分:量价配合且无未洗净爆仓潮 = 2;有一项存疑 = 1;缩量阴跌中接飞刀或处于
    未洗净爆仓潮 = 0。
    
    ### ⑤ 仓位与集中度(0–2 分)
    
    拉 `longbridge positions --format json` + `longbridge portfolio --format json`
    (**不要问用户持仓和现金,直接查长桥**——这是仓库级别的强制规则)。算本笔
    加仓后 AI/半导体主线(NVDA/MRVL/SMH/DRAM/QQQM 等高度重叠的持仓)的合计真实
    敞口——**按穿透后的合计算,不按单票算**,因为这几个标的对同一条主线有重叠
    敞口。
    
    打分:不加杠杆且加仓后现金未清零 = 2;现金基本用尽(<本笔金额的 50%) = 1;
    需要杠杆或超出名义上限 = 0。
    
    ### ⑥ 退出预设(硬门)
    
    要求用户在下单前写死:止损位(具体价格数字)+ 机械减仓规则(比如"跌破止损
    减半,反抽不站上前低清仓")。
    
    - 任一项写不出来 → `exit: "fail"`,直接否决(`verdict: "rejected_hard_gate"`),
      不再看软分。
    - 两项都写出来 → `exit: "pass"`。
    
    ### 判定与输出
    
    - 硬门(①⑥)任一 `fail` → `verdict: "rejected_hard_gate"`,`soft_total: null`。
    - 两个硬门都 `pass` 时,`soft_total` = ②③④⑤ 四项之和(0–8):
      - `soft_total ≥ 6` → `verdict: "buy_staged"`(可买,分批)
      - `soft_total` 4–5 → `verdict: "watch"`(观望或试探仓)
      - `soft_total < 4` → `verdict: "rejected"`
    
    输出必须包含:六层分项得分(硬门用 pass/fail,软分用数字)、判定、每项依据的
    关键数据(带 `source` + `at`,即 `key_data`)、若 `buy_staged` 则附
    `plan`(止损、机械减仓规则、名义上限、建议的分批节奏)。然后落盘(见 Step 4)。
    
    ## Step 2 — 卖出触发器
    
    对单票(或巡检模式下的每个持仓)逐项检查,任一触发即在输出中高亮并给出对应
    动作建议。**不发明新规则,只把用户已有规则编成可执行检查项:**
    
    ### 1. 6/27 持有计划触发线 A/B/C/D
    
    来源:用户 2026-06-27 定的持有计划(memory
    `project-hold-through-plan-2026-06-27`)。四条线:
    
    - A 基本面恶化——查 `longbridge-fundamental` / 财报数据
    - B SMH < $560——查 `longbridge quote SMH.US`
    - C 连续 3 日机构派发——查 `longbridge-capital-flow`
    - D 美联储转向加息——查 `fred` 联邦基金利率/点阵图相关序列
    
    四个布尔值都要给出,拿不到数据的那项写"未获取到",不猜。
    
    ### 2. 周期见顶清单触发数(11 条)
    
    同 Step 1③,从 memory `project-ai-memory-cycle-top-signals` 读取 11 条信号,
    现查触发状态而非照抄旧记忆里的数字。触发数变化时,按用户自己定的减仓规则
    给建议(比如"触发数从 2 条变 3 条,按既定规则该减一档")。
    
    ### 3. 原文六分类兜底
    
    - `logic_falsified`(逻辑证伪)——对照买入时写的 `falsifier` 是否已经发生,
      能从数据判
    - `valuation_bubble`(估值泡沫)——能从数据判
    - `mechanical_trim_due`(机械减仓到点)——对照买入时的 `trim_rule`,能从数据判
    - `stop_hit`(止损触及)——对照买入时的 `stop`,能从数据判
    - `opportunity_cost`(机会成本)——列为问句,让用户自答,不强行给布尔值
    - `position_imbalance`(仓位失衡)——列为问句,让用户自答
    
    ### 4. 反向保护——爆仓潮检查
    
    无论以上触发几条,都先查这一项。判据(来源 `journal/lessons.md` 2026-07-13
    那条教训,三取二 = 洗净):
    
    1. SK Hynix / KOSPI 连续两天不创新低——用 `korea-market` skill 查
    2. 韩国追保比例掉头回落——用 `korea-market` skill 查
    3. 美股存储链放量阳线——用 `longbridge` 查 MU/美光供应链相关标的
    
    三项里满足 ≥2 项才算洗净。**未洗净时**(`in_unclean_flush: true`),无论
    上面 1–3 触发几条,判定恒为 `verdict: "blocked_by_flush"`,并在输出里附上
    提示:"不要卖在爆仓潮里,要卖在洗净后的反弹里"——这条反向保护优先级高于其他
    所有触发信号。
    
    韩国数据取不到时,`flush_check` 输出"未获取到",不阻塞主流程(既不算洗净也
    不算未洗净,只是提示这块信息缺口,`verdict` 按其余触发器正常判定)。
    
    ### 判定
    
    未处于未洗净爆仓潮时,综合 1–3 的触发情况给出:`exit`(应清仓)/
    `trim`(应减仓)/ `hold`(暂不动)。三个类别的具体归类没有额外的数字公式——
    参照第 1、2 条触发的严重程度 + 第 3 条命中数量做综合判断,并在输出里写清楚
    "为什么是这个判定",而不是套死板算式(卖出端本来就是复用用户已有规则,不
    新增打分体系)。
    
    落盘见 Step 4。
    
    ## Step 3 — 巡检模式
    
    触发词:"/trade-gate 巡检"、"跑一遍卖出检查",或暴跌日主动建议跑一次。
    
    1. 拉 `longbridge positions --format json` 取全部持仓。
    2. 先跑一次 Step 2 第 4 项(爆仓潮检查)——这是全局性判据,只需要查一次,
       所有持仓共用同一份结果。
    3. 对每个持仓分别跑 Step 2 的第 1–3 项,得到各自的 `triggers` + `verdict`。
    4. 输出一张汇总表:每个持仓 × 每组触发器的状态(未触发 / 触发 / 数据未获取
       到),触发项展开说明;顶部先亮出爆仓潮检查的全局结论。
    5. 落盘一条 `action: "patrol"` 记录(结构见 schema.md,`flush_check` 在顶层,
       每个持仓的 `triggers` 不重复写 `flush_check`)。
    
    ## Step 4 — 落盘
    
    三种记录类型(买入/卖出/巡检)的完整字段定义、`verdict` 枚举、`scores` /
    `triggers` 结构,全部在 [`references/schema.md`](references/schema.md),这里
    不重复。落盘路径:
    
    ```
    journal/decisions/YYYY-MM-DD-SYMBOL-buy.json
    journal/decisions/YYYY-MM-DD-SYMBOL-sell.json
    journal/decisions/YYYY-MM-DD-patrol.json
    ```
    
    `journal/` 是 git 忽略目录,`journal/decisions/` 子目录当前也不存在——**第一次
    运行时若目录不存在,先建目录再写文件**,不要因为目录不存在就跳过落盘。
    
    同日同票第二次决策,文件名追加序号(`-2`,然后 `-3`……),永远不覆盖已有
    文件。`executed` / `violation` 两个字段决策当下一律写 `null`,由 Step 5 的
    核对逻辑回填。
    
    ## Step 5 — 执行核对(不靠自觉汇报)
    
    **每次运行本 skill 的任何入口**(买入/卖出/巡检都算一次运行),开始正式流程
    之前,先做一遍这个核对:
    
    1. 找出 `journal/decisions/` 里所有 `executed: null` 的记录,**仅限 `action` 为
       `buy` 或 `sell` 的记录**;`action: "patrol"` 的记录跳过(巡检不涉及买卖执行)。
    2. 对每条记录的 `symbol`,拉 `longbridge` 的成交记录(订单/成交历史),比对
       决策日期之后到今天之间是否有对应成交。
    3. 按 schema.md「执行核对回填规则」表逐条判定并回填 `executed` / `violation`,
       直接改写对应的 JSON 文件(只追加/修改这两个字段,不动其他判定字段)。
    4. 5 个交易日仍无成交的记录,回填 `executed: false, violation: false`(放弃
       执行不算违规)。
    
    这一步是静默的账本维护,不需要单独汇报给用户,除非发现了新的违规(则在本次
    运行的输出末尾提一句"顺带核对出一笔违规:……")。
    
    ## Step 6 — 违规账单统计
    
    触发词:"算一下违规账单"。
    
    1. 读 `journal/decisions/` 下全部 JSON。
    2. 过滤 `violation: true` 的记录。
    3. 对每条记录的 `symbol` 调 `longbridge-profit-analysis` 取已实现/未实现盈亏。
    4. 输出:违规笔数、违规合计盈亏;守规笔数(`executed: true, violation: false`)
       合计盈亏;两者对比结论(比如"违规的那几笔平均亏 X%,守规的平均赚 Y%")。
    
    阶段一由 Claude 现场读 JSON 现算,不写统计脚本;如果将来 JSON 文件多到现算
    吃力,再补一个 stdlib-only 的统计脚本(不在本次范围内)。
    
    ## 错误处理
    
    - **长桥调用失败** → 对应层/对应触发项记"数据未获取到",该层不给分也不猜,
      判定降级为"观望"(买入端)或该触发项标"数据未获取到"(卖出/巡检端),并在
      输出里注明缺口。**禁止用记忆填数**——这是仓库级反幻觉规则,本 skill 同样
      适用:拿不到实时数据时,绝不能拿 Claude memory 里的旧结论当作本次的
      `key_data`。
    - **韩国数据取不到** → 爆仓潮检查输出"未获取到",不阻塞主流程,`verdict` 按
      其余触发器正常判定。
    - **用户拒绝写证伪条件或止损位** → 按硬门规则处理:②记 0 分(不阻塞),⑥
      直接否决(阻塞),两种情况都照常落盘。
    
    ## Anti-patterns
    
    - ❌ 能力圈笔记不存在时跳过硬门直接打分——必须先终止并建议跑 `stock-deep-dive`
    - ❌ 拿不到长桥数据时用记忆/猜测填 `key_data`,而不是老实写"数据未获取到"
    - ❌ 爆仓潮未洗净时仍然给出 `exit`/`trim` 判定——反向保护必须覆盖其他触发器
    - ❌ 询问用户持仓/现金/成本价——直接查长桥(`longbridge-positions` /
      `longbridge-portfolio`)
    - ❌ 巡检模式对每个持仓重复查一遍爆仓潮判据——这是全局判据,查一次复用
    - ❌ 决策当下就填写 `executed`/`violation`——这两个字段只能由下次运行时的
      核对逻辑回填
    - ❌ 覆盖已有的决策 JSON 文件——同日同票第二次决策必须追加序号
    - ❌ 周期见顶清单直接照抄 memory 里的旧触发状态,不现查最新数据
    - ❌ 卖出端发明新的判定规则,而不是复用 6/27 持有计划 / 周期见顶清单 /
      lessons.md 里已有的规则
    - ❌ 忘记 `journal/decisions/` 目录首次不存在时要先建目录
    
    ## Related skills
    
    - `stock-deep-dive` — 能力圈硬门失败时的补救路径(建立六镜头笔记)
    - `longbridge-positions` / `longbridge-portfolio` — 仓位与集中度层、执行核对
      的持仓与账户数据来源
    - `longbridge-capital-flow` — 卖出触发线 C(机构派发)、技术层放量定性
    - `korea-market` — 爆仓潮反向保护判据①②
    - `fred` — 卖出触发线 D(美联储转向)
    - `longbridge-profit-analysis` — 违规账单统计的盈亏数据来源
    - `market-session-tracker` — 巡检模式的日常延伸场景(暴跌日先跑 patrol 再决定
      是否转入更细的 session 监控)
    - `intraday-signal` — 本 skill 的结构模板来源;两者互补而非替代,
      intraday-signal 给方向判断,trade-gate 给纪律关卡
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related