A股次日买入守卫 & 单票操作卡
用途
把「T 日收盘选出股票 → T+1 开盘买入」这段最容易出错的工作自动化:
- check 模式:批量检查持仓股 + 候选池,判断次日能否正常买入,输出一张判定表。
- plan 模式:输入一个股票代码,输出这只股票的具体操作(预算、股数、挂单价、笼子上限、止损止盈、到期日、时间轴、持有期检查)。
何时使用
- 用户给出股票代码或候选名单,问「能不能买 / 明天怎么操作 / 怎么挂单 / 止损设多少」
- T 日跑完选股后,需要在 T+1 开盘前做买入前复核
- 09:25 集合竞价出价后,需要用实际开盘价重算最终挂单价
- 持仓期间需要知道某只票当天该做什么(止损/止盈/到期/不动)
不适用:选股本身(用 a-share-breakout-screener 或项目内选股脚本)、个股基本面研究、实时行情盯盘。
快速开始
# ① 批量检查:持仓 + 候选(候选可用 code=评分 带上排序依据)
python scripts/guard.py check \
--cand 001203=0.831,301201=0.779,300438=0.633,002083=0.581 \
--hold 300204,300255 \
--nav 1000000 --cash 620000 \
--holidays references/holidays.txt
# ② 单票操作卡(未持仓 → 买入卡)
python scripts/guard.py plan 001203 --nav 1000000 --cash 1000000 \
--holidays references/holidays.txt
# ③ 单票操作卡(已持仓 → 当日检查卡;提供成本价与买入日)
python scripts/guard.py plan 300204 --cost 19.74 --buy-date 2026-10-08 \
--holidays references/holidays.txt
Windows 下若 python 不在 PATH 或中文乱码,用托管解释器:
cd C:/Users/Administrator/.workbuddy/skills/a-share-next-day-buy-guard
PYTHONIOENCODING=utf-8 "C:/Users/Administrator/.workbuddy/binaries/python/versions/3.13.12/python.exe" ^
scripts/guard.py check --cand 001203=0.831 --nav 1000000 --holidays references/holidays.txt
参数
| 参数 | 说明 |
|---|---|
mode |
check 批量检查 / plan 单票操作卡(后接代码) |
--cand |
候选池,代码=评分 逗号分隔(评分用于排序,可省略) |
--hold |
已持仓代码,逗号分隔(必填,否则会重复买入) |
--nav |
当前净值(昨日收盘口径),默认 1,000,000 |
--cash |
可用现金;不填则按 NAV 满额计算 |
--market-pct |
昨日大盘涨跌幅(如 -0.0062);不填则自动取上证综指当日涨跌幅 |
--cost / --buy-date |
已持仓的成本价与买入日 → 输出持仓每日检查卡 |
--holidays |
节假日文件路径(推荐始终指向 references/holidays.txt) |
--deep |
拉公告正文抽取「除权日/停牌起始日」具体日期(慢,建议只在怀疑时用) |
--no-notice |
跳过公告检查(快,仅做行情与规则检查) |
--json |
输出 JSON,供上层流程消费 |
输出怎么读
判定三档
| 档位 | 含义 | 处理 |
|---|---|---|
PASS |
无阻断 | 按操作卡执行 |
WARN |
有提示项(如次日除权、接近预算不足) | 确认提示项后执行 |
BLOCK |
命中硬性阻断 | 放弃该票,额度顺位给下一只,不替换、不追价 |
A 类 · 硬性阻断(已验证口径):停牌/无当日行情、零成交、次日停牌公告、ST/退市、北交所、次新股(<120根K线)、股价<2元、一字涨停开盘、高开>6%、已持仓、现金不足、市场闸门日(大盘≤−0.5%)。
B 类 · 提示性公告事件:立案/处罚、业绩预亏、减持、问询函、解禁、异常波动、重组等。
> ⚠️ 技能只陈述「发生了什么 + 规则上是否需要处理」,不给该不该买的建议。
> 这些事件没有经过回测验证能改善短期收益——历史上「跌停史过滤」「止跌确认形态」等看似合理的风控经检验全部是负贡献。请把决定权留给人。
关键口径(改前必须重跑回测)
- 挂单价 =
ROUNDUP(参考价 × 1.01, 2),≤ 次日涨停价 - 参考价:09:25 后用当日开盘价;之前用 T 日收盘价按平开预估 → 必须在 09:25 后再跑一次
- 次日涨跌停 = T 日收盘价 ×(1 ± 涨跌幅限制),不是快照里那组(快照涨跌停是 T 日的)
- 单只预算 = NAV×10%,最多 8 只;股数 =
floor(B/参考价/100)×100(科创板 ≥200 股、1 股递增) - 止损 = 成本×0.94,止盈 = 成本×1.12,最长持有 5 个交易日
- 买入价格笼子上限 =
min(涨停价, max(买一×102%, 买一+0.10)) - 卖出端:正常行情禁止挂跌停价(会被判废单),只有 14:57 集合竞价与一字跌停例外
数据源与已知限制(如实告知用户)
- 行情:腾讯
qt.gtimg.cn/web.ifzq.gtimg.cn。响应为 GBK 编码,必须decode('gbk'),否则股票名全是乱码。 - 公告:东方财富
np-anotice-stock/np-cnotice-stock,必须用 HTTP(HTTPS 常被拦截)。 - 停牌判定是「相对判定」:以上证综指最新行情日为市场基准,个股落后即为异常。这样长假休市不会把所有票误报成停牌。
- 节假日必须人工维护
references/holidays.txt,否则买入日/到期日会按「跳过周末」算错(例如国庆会算出 10-05 买入)。 --deep的除权/停牌日期靠正则从公告正文抽取,可能漏抽;涉及真金白银的除权调整请以交易所公告原文为准。- 次新判定依赖日线根数;个别标的(如部分北交所股票)行情源只返回个位数根 K 线,此时脚本会提示「K线数据不足,请人工核对」而不是武断判次新。
文件
| 文件 | 作用 |
|---|---|
scripts/guard.py |
主程序,check / plan 两个模式 |
scripts/datasource.py |
腾讯行情(GBK)、腾讯前复权日线、东财公告列表/正文 |
references/rules.md |
全部阈值口径 + 字段索引表 + A/B 类事件分级 |
references/holidays.txt |
休市日历(需人工维护) |