分红除权与红利税计算器(A股)
这个技能做什么
对用户自己给的前收盘价、分红方案、买卖日期做算术:
- 除权除息参考价:派现、送股、转增,单项或组合都行(例如「10 送 3 转 5 派 5 元」)。顺带算完全填权要涨多少;给了持股数就列出除权后的股数、到账现金;给了现价就算填了多少。
- 红利税:按持股期限分三档扣税,列出「现在卖 / 最早满 1 个月卖 / 最早满 1 年卖」三种情况各扣多少税、少扣多少、要多等几天。分几次买的按先买先卖逐批算;股权登记日之后买的那批拿不到这次分红,自动剔除。
数字一律来自脚本输出,不要心算。
这个技能不做什么
- 不支持配股。用户的方案里有配股时,直接说不支持,除权参考价以交易所公布的为准。
- 不联网、不查分红方案、不取行情。方案、价格、日期都由用户提供;用户不知道方案时,让他在行情软件的「分红送配」或公司公告里找。
- 不荐股,不说「为了省税该拿着」「该卖」。省下的税和多拿几天的涨跌风险怎么取舍,由用户自己决定。
- 不算基金分红、债券利息、港股通和境外股票的股息税。
- 不做个税申报,不涉及限售股、股权激励。
现行口径(核对日期 2026-09-24,出处见 references/rules-sources.md)
| 项目 | 口径 |
|---|---|
| 除权除息参考价 | (前收盘价 − 每股现金红利)÷(1 + 每股送转股数),四舍五入到 0.01 元。交易所规则里的配股项本技能不做 |
| 持股 1 个月以内(含) | 股息全额计税,实际扣 20% |
| 1 个月以上至 1 年(含) | 减半计税,实际扣 10% |
| 超过 1 年 | 免征 |
| 持股期限 | 买入当天到卖出的前一天。「1 个月」是从某月某日到下月同日的前一天:1 月 8 日买,2 月 8 日卖算正好 1 个月(仍扣 20%),2 月 9 日卖才是 10% |
| 先进先出 | 同一只股票分几次买的,先买的先卖 |
| 扣税时间 | 派息时先全额到账,卖出时券商从资金账户扣;一直不卖就不扣 |
| 送红股 | 按每股面值(一般 1 元)计入股息所得 |
| 转增股本 | 资本公积转增不交税 |
| 北交所 | 同样三档,依据是新三板政策(执行到 2027-12-31) |
用户说大白话 → 你翻成命令
脚本路径:{baseDir}/scripts/dividend_calc.py。不要让用户记参数,由你从对话里取数。「10 派 5 元」写 --cash 5,「10 送 3」写 --bonus 3,「10 转 5」写 --transfer 5,都是每 10 股的数。
| 用户这样说 | 你跑这个 |
|---|---|
| 「10 派 5 元,昨天收盘 20 块,除息价多少?」 | python {baseDir}/scripts/dividend_calc.py exright --prev-close 20 --cash 5 |
| 「10 送 3 转 5 派 5,除权前 20 块,我有 1000 股,现在 12 块,填权了多少?」 | python {baseDir}/scripts/dividend_calc.py exright --prev-close 20 --cash 5 --bonus 3 --transfer 5 --shares 1000 --now 12 |
| 「10 转 10 以后要涨多少才算填权?除权前 30 块」 | python {baseDir}/scripts/dividend_calc.py exright --prev-close 30 --transfer 10 |
| 「9 月 1 号买了 1000 股,10 派 5 元,今天卖要扣多少红利税?」 | python {baseDir}/scripts/dividend_calc.py tax --cash 5 --buy-date 2026-09-01 --shares 1000 |
| 「现在卖和拿满一个月再卖,税差多少?登记日是 9 月 15 号」 | python {baseDir}/scripts/dividend_calc.py tax --cash 5 --buy-date 2026-09-01 --shares 1000 --record-date 2026-09-15 |
| 「去年 8 月买了 1000 股,今年 9 月 1 号又买了 500 股,10 送 2 转 3 派 10 元,下周一卖 1800 股」 | python {baseDir}/scripts/dividend_calc.py tax --cash 10 --bonus 2 --transfer 3 --lots 2025-08-01:1000,2026-09-01:500 --sell-date 2026-09-28 --sell-qty 1800 |
| 「6 月 1 号买的 2000 股,10 派 3.5,这周五卖扣几块钱税?」 | python {baseDir}/scripts/dividend_calc.py tax --cash 3.5 --buy-date 2026-06-01 --shares 2000 --sell-date 2026-09-25 |
参数速查(给你看的,不念给用户):
| 参数 | 含义 |
|---|---|
exright / tax |
除权除息价 / 红利税 |
--cash --bonus --transfer |
每 10 股派多少元(含税)/ 送多少股 / 转增多少股 |
--prev-close --shares --now |
除权前一天收盘价、持股数(可选)、现价(可选) |
--buy-date --shares |
只买过一次:买入日期、登记日持有的股数 |
--lots |
分几次买:「买入日期:股数」逗号隔开 |
--sell-date --sell-qty |
打算哪天卖(不给按今天)、卖多少股(除权后的股数,不给是全部) |
--record-date |
股权登记日(可选,用来剔除登记日后买的批次) |
--par |
每股面值,默认 1 元 |
--json |
输出结构化结果 |
退出码:0 正常,2 输入有误(错误信息两行:「出错了:…」「下一步:…」,原样转告用户)。
使用流程
- 问清楚:除权价要前收盘价和分红方案;红利税要分红方案、哪天买的、登记日持有多少股、打算哪天卖(不说就按今天)。分几次买的逐次问日期和股数。
- 跑脚本。
- 给用户看:先一句结论(例如「今天卖扣 100 元,10 月 2 日以后卖扣 50 元,少扣 50 元,要多等 8 天」),再原样给出表格和说明。
- 最早卖出日落在周末或节假日时,提醒用户顺延到之后的第一个交易日,税率不会变高。
说话方式
- 用「除权价」「填权」「红利税」「持股满一个月」「到账」这类股民的说法,不念参数名。
- 讲税差时只摆数字,不说「划算」「建议持有」。结尾那句「多等的这些天股价会涨会跌,这部分不在计算里」原样保留。
边界
- 月底(29、30、31 日)买入的,「满 1 个月」按下个月最后一天算,这是常见口径,官方文件没写到这种情况;脚本会在输出里提示。
- 送转后的零碎股按中国结算规则处理,脚本按整数股计,可能差 1 股。
- 券商实际扣税按每批分别四舍五入到分,可能与脚本差几分钱,以对账单为准。
- 资本公积转增不交税,仅限股票溢价形成的资本公积;公司用其他来源的资本公积转增时会在公告里写明是否代扣税,以公告为准。