watchlist-manager

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Watchlist Manager (US markets)

Watchlist Manager(美国市场)

Maintains a single source-of-truth watchlist file that the
price-alerts
and
watchlist-brief
skills read. Informational tool only. Never place, modify, or cancel a trade. Editing the watchlist is not trading.
维护一个作为单一事实来源的观察名单文件,
price-alerts
和
watchlist-brief
skills 会读取该文件。 仅用于信息管理。绝不执行、修改或取消交易。 编辑观察名单不属于交易行为。

File location

文件位置

  1. $WATCHLIST_FILE
    if set, else
    ./watchlist.json
    in the working directory (YAML
    watchlist.yaml
    works if PyYAML is installed).
  2. If none exists, create it from
    examples/watchlist.json
    structure with an empty
    tickers
    list. Ask before overwriting an existing file.
  1. 如果已设置
    $WATCHLIST_FILE
    ,则使用该路径;否则使用工作目录中的
    ./watchlist.json
    (如果安装了 PyYAML,YAML 格式的
    watchlist.yaml
    也受支持)。
  2. 如果文件不存在,则根据
    examples/watchlist.json
    的结构创建文件,并将
    tickers
    列表设为空。覆盖已有文件前应先询问。

Schema (version 1)

Schema(版本 1)

json
{
  "version": 1,
  "settings": { "cooldown_minutes": 240, "rearm_pct": 0.5, "sessions": ["regular"],
                "volume_spike_multiple": 2.0, "near_52w_pct": 2.0, "earnings_days": 3,
                "max_alerts_per_run": 20, "extra_closures": [], "stale_after_seconds": 900 },
  "tickers": [{
    "symbol": "NVDA",            // required, uppercase; class shares as BRK.B or BRK-B
    "side": "long",              // long | short | watch
    "added": "2026-10-15",
    "thesis": "AI datacenter capex",
    "entry": 160.0, "targets": [190.0, 220.0], "stop": 140.0,
    "tags": ["ai", "semis"],
    "alerts": [ {"type": "price_below", "value": 150, "cooldown_minutes": 60} ],
    "notes": ""
  }]
}
Alert
type
values and their
value
meaning are documented in
skills/price-alerts/SKILL.md
. A
stop
implies a
stop_hit
alert and
targets
imply
target_hit
automatically.
json
{
  "version": 1,
  "settings": { "cooldown_minutes": 240, "rearm_pct": 0.5, "sessions": ["regular"],
                "volume_spike_multiple": 2.0, "near_52w_pct": 2.0, "earnings_days": 3,
                "max_alerts_per_run": 20, "extra_closures": [], "stale_after_seconds": 900 },
  "tickers": [{
    "symbol": "NVDA",            // required, uppercase; class shares as BRK.B or BRK-B
    "side": "long",              // long | short | watch
    "added": "2026-10-15",
    "thesis": "AI datacenter capex",
    "entry": 160.0, "targets": [190.0, 220.0], "stop": 140.0,
    "tags": ["ai", "semis"],
    "alerts": [ {"type": "price_below", "value": 150, "cooldown_minutes": 60} ],
    "notes": ""
  }]
}
提醒
type
的可选值及其
value
含义记录在
skills/price-alerts/SKILL.md
中。 设置
stop
会自动隐含
stop_hit
提醒,设置
targets
会自动隐含
target_hit
提醒。

Operations (prefer the script; it validates and writes atomically)

操作

scripts/
ships next to this SKILL.md after
npx skills add
. Run from this skill folder, or from a git clone (root
scripts/
is the same files):
bash
python3 scripts/watchlist.py init
python3 scripts/watchlist.py init --empty
python3 scripts/watchlist.py add NVDA --thesis "AI capex" --entry 160 --target 190 --target 220 --stop 140 --tag ai --tag semis --alert price_below:150
python3 scripts/watchlist.py add NVDA --file swing.json --alert price_below:150
python scripts/watchlist.py update NVDA --stop 145
python scripts/watchlist.py update NVDA --tag megacap --alert rsi_above:75 --append
python scripts/watchlist.py remove NVDA
python scripts/watchlist.py list [--tag semis]
python scripts/watchlist.py show NVDA
python scripts/watchlist.py validate
If Python is unavailable, edit the JSON by hand following the schema and the validation rules below.
优先使用脚本;它会进行校验并以原子方式写入。 执行
npx skills add
后,
scripts/
目录会随附在此
SKILL.md
旁。可从此 skill 目录运行,也可从 git clone 仓库中运行(根目录下的
scripts/
是同一组文件):
bash
python3 scripts/watchlist.py init
python3 scripts/watchlist.py init --empty
python3 scripts/watchlist.py add NVDA --thesis "AI capex" --entry 160 --target 190 --target 220 --stop 140 --tag ai --tag semis --alert price_below:150
python3 scripts/watchlist.py add NVDA --file swing.json --alert price_below:150
python scripts/watchlist.py update NVDA --stop 145
python scripts/watchlist.py update NVDA --tag megacap --alert rsi_above:75 --append
python scripts/watchlist.py remove NVDA
python scripts/watchlist.py list [--tag semis]
python scripts/watchlist.py show NVDA
python scripts/watchlist.py validate
如果 Python 不可用,则按照 Schema 和下方的校验规则手动编辑 JSON。

Workflow

工作流

  1. Resolve the ticker. Uppercase it. If the user gives a company name, confirm the symbol (e.g. "Alphabet" -> GOOGL or GOOG?). Reject non-US listings or say they are unsupported by default data.
  2. Sanity-check with a live quote:
    python scripts/quotes.py NVDA
    . If the user's stop is above price for a long (or target below), point it out and ask.
  3. Capture the why. If no thesis is given, ask once for a one-line reason; store
    ""
    if they decline. Don't invent a thesis.
  4. Suggest, don't impose, alerts. Reasonable defaults to offer: stop/target levels,
    earnings_within: 3
    ,
    pct_move: 5
    (last vs prior close). If they want a drop that trades through a % and then recovers, offer opt-in
    intraday_low_pct
    /
    intraday_extreme_pct
    and say those use session low/high, not last. Mention
    iv_above
    /
    intraday_range_pct
    only if they ask about vol or today's range — ATM IV is unofficial Yahoo, not IV rank. Only add what they agree to.
  5. Write, validate, confirm. Show the resulting entry (symbol, entry, stop, targets, alerts) in one compact line.
  1. 解析 ticker。 将其转为大写。如果用户提供公司名称,请确认 symbol(例如,“Alphabet” → GOOGL 还是 GOOG?)。拒绝非美国上市标的,或明确说明默认数据不支持它们。
  2. 使用实时报价进行合理性检查:
    python scripts/quotes.py NVDA
    。如果用户的
    long
    仓位所设
    stop
    高于当前价格(或
    target
    低于当前价格),应指出问题并询问。
  3. 记录原因。 如果未提供
    thesis
    ,询问一次用户愿意给出的单行理由;如果用户拒绝,则存为
    ""
    。不要自行编造 thesis。
  4. 建议提醒,但不要强制添加。 可提供的合理默认值包括:
    stop
    /
    target
    水平、
    earnings_within: 3
    、
    pct_move: 5
    (最新价相对前收盘价)。如果用户希望捕捉价格跌破某个百分比后又恢复的情况,可选择启用
    intraday_low_pct
    /
    intraday_extreme_pct
    ,并说明它们使用的是交易时段最低价/最高价,而不是最新价。只有当用户询问波动率或当日区间时,才提及
    iv_above
    /
    intraday_range_pct
    ——ATM IV 来自 Yahoo 的非官方数据,并非 IV rank。仅添加用户同意的提醒。
  5. 写入、校验并确认。 以一行紧凑格式展示结果条目(symbol、entry、stop、targets、alerts)。

Validation rules

校验规则

  • Symbol matches
    ^[A-Z]{1,5}([.-][A-Z]{1,2})?$
    ; no duplicates.
  • entry
    ,
    stop
    ,
    targets[]
    are numbers. For
    side: long
    , stop < entry; for
    side: short
    , stop > entry.
  • settings.sessions
    if present is a non-empty list of
    regular
    /
    pre
    /
    after
    .
  • settings.extra_closures
    if present is ISO dates (
    YYYY-MM-DD
    ) for unscheduled full-day closures.
  • Every alert
    type
    is a known type.
  • symbol
    必须匹配
    ^[A-Z]{1,5}([.-][A-Z]{1,2})?$
    ;不允许重复。
  • entry
    、
    stop
    、
    targets[]
    必须为数字。对于
    side: long
    ,stop < entry;对于
    side: short
    ,stop > entry。
  • 如果存在
    settings.sessions
    ,它必须是非空列表,且只能包含
    regular
    /
    pre
    /
    after
    。
  • 如果存在
    settings.extra_closures
    ,它必须是计划外全天休市日期的 ISO 日期列表(
    YYYY-MM-DD
    )。
  • 每个 alert
    type
    都必须是已知类型。

Listing format

列表格式

Compact table: Ticker | Side | Entry | Stop | Targets | Tags | Thesis. Add a live price column only if the user asks or you're already fetching quotes.
紧凑表格:Ticker | Side | Entry | Stop | Targets | Tags | Thesis。仅当用户要求或当前已经在获取报价时,才添加实时价格列。

Don'ts

禁止事项

  • Don't delete tickers without explicit instruction; for "clean up my list" propose removals first.
  • Don't give buy/sell recommendations. You may describe levels and risk (e.g. "stop is 12% below entry").
  • 未经明确指示,不要删除 ticker;遇到“清理我的列表”这类请求时,应先提出删除建议。
  • 不要给出买入/卖出建议。可以描述价格水平和风险(例如,“stop 比 entry 低 12%”)。