trader-in-alerts(交易员警报管理器)
价格警报系统负责监控数字,这样用户就不必一直盯着图表。警报只是信息,绝非交易指令:当止损警报响起时,本技能不会自动卖出任何东西。止损单(SL-M卖出)和目标单(LIMIT卖出)作为两个独立订单存在于券商处,它们执行实际交易;警报只是告诉用户发生了什么,提醒他们取消剩余订单,并告知何时应该平仓。
${CLAUDE_SKILL_DIR} 是本技能的文件夹(此 SKILL.md 文件所在的位置)。
python3 "${CLAUDE_SKILL_DIR}/alerts.py" clock # 显示NSE开盘/收盘状态、预开盘、下次开盘时间(IST)
python3 "${CLAUDE_SKILL_DIR}/alerts.py" add --from-plan # 从 trader-in/plan.json 添加止损、目标、平仓时间
python3 "${CLAUDE_SKILL_DIR}/alerts.py" add --opening-bell # 09:15 IST 开盘铃声
python3 "${CLAUDE_SKILL_DIR}/alerts.py" add --pre-open # 09:00 IST 预开盘(可选)
python3 "${CLAUDE_SKILL_DIR}/alerts.py" add --symbol RELIANCE --stop 1193.30
python3 "${CLAUDE_SKILL_DIR}/alerts.py" add --symbol RELIANCE --target 1201.10
python3 "${CLAUDE_SKILL_DIR}/alerts.py" add --at 15:10 --label "flat by" --before-close --symbol RELIANCE
python3 "${CLAUDE_SKILL_DIR}/alerts.py" add --symbol TCS --pct 2
python3 "${CLAUDE_SKILL_DIR}/alerts.py" add --symbol ^NSEI --pct 1 # Nifty 50(仅监控)
python3 "${CLAUDE_SKILL_DIR}/alerts.py" check # 退出码0表示有警报触发
python3 "${CLAUDE_SKILL_DIR}/alerts.py" quote RELIANCE "M&M" --write # -> trader-in/prices.json
python3 "${CLAUDE_SKILL_DIR}/alerts.py" quote --holdings --write # 持仓 + 计划股票
python3 "${CLAUDE_SKILL_DIR}/alerts.py" list
python3 "${CLAUDE_SKILL_DIR}/alerts.py" reset reliance-ns-plan-stop
--now "2026-10-27 15:10" 固定时钟时间(IST;单独 15:10 表示今天IST,Z 或 +05:30 表示绝对时间);--offline DIR 从保存的报价文件读取,不访问网络。在shell中引用 M&M("M&M"),否则 & 会分割命令。
股票代码符号
RELIANCE、RELIANCE.NS 和 NSE:RELIANCE 代表NSE;RELIANCE.BO 和 BSE:RELIANCE 代表BSE。裸符号默认为NSE(或配置 default_exchange)。文件始终使用Yahoo格式(RELIANCE.NS)。裸六位数字被视为BSE证券代码(如 500325.BO),但Yahoo不提供数字BSE代码(2026-10-27返回“未找到数据”):请使用 RELIANCE.BO。指数 ^NSEI(Nifty 50)、^NSEBANK(Bank Nifty)和 ^BSESN(Sensex)可以进行监控和报价(以点数计价),不可交易。
读写文件
| 文件 | 内容 |
|---|---|
trader-in/plan.json | 来自 trader-in-exit 的交易计划,供 add --from-plan 使用 |
trader-in/config.json | flat_by(默认15:10)、default_exchange、extra_holidays、special_sessions |
trader-in/alerts.json | 警报规则(本文件夹中的 alerts.example.json) |
trader-in/state/alerts.json | 哪些规则已触发及触发时间,确保每个规则只触发一次 |
trader-in/prices.json | 最新的卢比报价,合并后供 trader-in-budget 和 trader-in-risk 使用 |
trader-in/portfolio.json | 持有的股票,供 quote --holdings 使用 |
规则类型
| 类型 | 触发条件 | 重新触发 |
|---|---|---|
above / target | 价格达到或超过 price | 执行 reset 后,或当 "rearm": true 且价格回落后自动重新触发 |
below / stop | 价格低于或等于 price | 同上 |
pct_move | 自前收盘价(或 ref)变动了 pct 百分比,可选的 direction 为 up 或 down;仅限今日的报价 | 每天最多一次 |
time | IST时钟在交易日经过了 at(如 "15:10") | 每个交易日一次 |
opening_bell | NSE已开盘(09:15 IST,或特殊交易时段开盘时间) | 每个交易日一次 |
pre_open | NSE预开盘进行中(09:00-09:15 IST:订单输入至09:08,然后撮合) | 每个交易日一次,仅在预开盘期间 |
带有 "date" 的规则仅在该IST日期内被监控;--from-plan 创建的规则会携带交易计划的日期,因此昨天的止损不会在今天触发。带有 "before_close": true 的 time 规则会在提前收盘的特殊交易时段中保持与收盘的间隔:“平仓”设置为15:10时,在15:00收盘的交易日中会在14:40触发。
止损或目标触发时会附加提示:“您的止损和目标是两个独立的券商订单,不是OCO:如果止损已成交,现在请取消目标订单”(反之亦然)。印度券商已取消组合订单,且MIS没有OCO机制,因此未成交的SL-M或LIMIT卖出单会保持活跃,可能卖出您已不再持有的股票。
报价
- Yahoo图表JSON:
query2.finance.yahoo.com/v8/finance/chart/RELIANCE.NS(股票代码需百分比编码,如M%26M.NS),一个非官方的免费接口,每次请求一个股票,间隔半秒。遇到429错误时会等待并重试一次;如果仍返回429、5xx或网络错误,则尝试query1。请求头标识为day-trader-skill-in/1.0。Yahoo以卢比和Asia/Kolkata时区提供NSE和BSE数据;百分比变动使用其前收盘价。 - 不使用Stooq:它不提供NSE/BSE股票代码,且在2026-10-27,其报价CSV对所有股票代码返回404,其他页面则需通过JavaScript验证。
- 免费报价是非官方的、延迟的,可能存在滞后。它们适用于警报和头寸检查,不适合交易时机判断。券商的价格才是实际成交价。
trader-in/prices.json中的每个价格都带有报价时间,trader-in-risk 仅使用15分钟内的数据。 - 如果Yahoo不可用,可从券商(Kite、Upstox)读取价格并写入
trader-in/prices.json,格式为{"as_of": "...Z", "prices": {"RELIANCE.NS": 1196.20}}。
NSE时钟
IST(印度标准时间)全年为UTC+05:30(无夏令时);工具自行计算时间,忽略计算机的本地时区。正常交易时段为09:15至15:30 IST,预开盘09:00至09:15(订单输入09:00-09:08,撮合09:08-09:15)。券商大约从15:20 IST开始对MIS仓位进行强制平仓并收费,因此计划中的默认平仓时间设为15:10。
- NSE 2026年股票假日(工作日):1月26日共和国日、3月3日洒红节、3月26日罗摩诞辰、3月31日大雄诞辰、4月3日耶稣受难日、4月14日安贝德卡诞辰、5月1日马哈拉施特拉日、5月28日宰牲节、6月26日穆哈兰姆月、9月14日象神节、10月2日甘地诞辰、10月20日十胜节、11月10日排灯节·巴厘帕迪帕达、11月24日那纳克诞辰、12月25日圣诞节。
- 特殊交易时段(非正常交易日):2026年2月1日(周日)联邦预算日,09:15-15:00;2026年11月8日(周日)Muhurat交易,14:20-15:30,预开盘从14:05开始,依据NSE通告 NSE/CMTR/76941(2026-10-19发布)(部分媒体报道关于收盘集合竞价的股票收盘时间有所不同:请查阅官方通告)。
- 2027年的假日尚未公布:对于任何没有内置列表的年份,工具会发出一次警告(“2027年的NSE假日未内置;请将其添加到配置 extra_holidays 中”),并将所有工作日视为开市日。可通过配置
"extra_holidays": ["2027-01-26", ...]添加休市日,通过"special_sessions": {"YYYY-MM-DD": ["HH:MM", "HH:MM"]}添加特殊交易时段。
操作步骤
- 在 trader-in-exit 写入交易计划后,立即运行
add --from-plan。向用户确认三个警报:止损、目标和平仓时间,以卢比和IST时间显示。同时说明止损和目标在券商处是两个独立订单:其中一个成交后,另一个必须取消。 - 在持仓期间运行
check:每几分钟通过 Claude 定时任务或/loop执行。每次执行仅获取今日规则涉及的股票最新延迟报价,每个警报仅触发一次。检查读取的是最新的延迟报价,并非实时数据流,因此在两次检查之间价格可能越过某个水平。 - 每行向用户报告触发的警报。止损或目标警报意味着该订单可能已成交:请在券商App中检查持仓和订单,取消另一个订单,并通过 /trader-in-broker 记录成交。"Flat by" 警报意味着在MIS强制平仓前平掉所有未平仓位:执行 /trader-in-broker flatten,然后运行 /trader-in-risk,获得用户确认后,再取消剩余的止损和目标订单。绝对不要替用户操作。
示例:实战场景
2026年10月27日(周二)RELIANCE.NS:开盘区间1,189.70-1,197.00,入场价₹1,197.20(IST时间12:40),止损₹1,193.30(区间中点),目标₹1,201.10(1倍风险回报比),平仓时间15:10。add --from-plan 会为该日写入 reliance-ns-plan-stop、reliance-ns-plan-target 和 reliance-ns-flat-by。15:05执行 check 读取实时最后报价₹1,196.20,位于止损和目标之间:
NSE开盘(2026-10-27 15:05 IST,正常交易时段)。
无触发。今日监控了3条规则,RELIANCE.NS ₹1,196.20。
到15:10:
警报 平仓时间:时间已到15:10 IST(设置为15:10),市场于15:30 IST收盘。券商大约从15:20 IST开始对MIS仓位强制平仓并收费。如果RELIANCE.NS仍处于未平仓状态,请平仓:
/trader-in-broker flatten --symbol RELIANCE.NS 创建卖出单,然后运行 /trader-in-risk 并确认。
同时取消券商处该股票所有未成交的止损和目标订单。
该警报只触发一次。第二天早上,计划中的三个警报不再被监控;通过 add --pre-open 和 add --opening-bell,它们会在09:00和09:15触发。
规则
- 警报是关于价格或时间的客观事实。以陈述事实的方式告知用户。
- 绝不打造成实时报价。免费报价为延迟且非官方数据。
- 每条新规则都要向用户确认:股票代码、类型、水平(卢比)、日期。
- 金额使用印度计数法(如 ₹1,23,456.78);时间使用IST。
永远不做的事情
本技能永远不会下达、取消或修改订单,永远不会声称报价是实时的,也永远不会预测价格走向。
安全说明
- 仅为教育和工具用途,不构成投资建议。如需专业建议,请咨询SEBI注册的投资顾问。PASS 是规则检查结果,而非投资推荐。
- 默认使用模拟交易(
"paper": true):印度券商没有模拟账户,因此模拟交易是本地模拟账本(trader-in/state/paper.json)。切换为实盘是用户自己的决定,需在个人配置中设置。 - 本工具包中只有 trader-in-broker 能够下单,且必须同时满足三个条件:trader-in-risk 当日通过了该特定订单的检查、
paper设置为 false、用户在聊天中明确输入了同意执行的“是”。 - 仅限现货股票多头:不包括期货期权、期权、做空或MIS杠杆交易,除非配置允许且用户确认。
- 券商密钥存储在环境变量或Claude Desktop配置中,绝不会出现在聊天记录中。