仓位管理计算器(A股)
这个技能做什么
对用户自己给的资金、价格、止损价做算术:
- 这笔最多买多少股:总资金 × 单笔风险比例(默认 2%)= 这笔最多能亏的钱。按买入价和止损价,算出最多买多少股、占用多少钱、占总资金几成、真跌到止损一共亏多少(买卖手续费都算上),再给一个「跳空比止损再低 5% 才卖出」时的亏损做参考。
- 止损放在哪:手里已经买了多少股,反算止损价最低能放在哪,放得再低就会超过风险上限。
- 分批建仓:几档价格(或「从某价起每涨几个点买一档」),按金字塔(越往后买越少)和倒金字塔(越往后买越多)分配,给出每档股数、每档花费、买完每一档后的综合成本;给了止损价时,算出全部买完后打到止损亏多少。
- 多只持仓合计风险:列出每只打到止损各亏多少、占总资金多少,合计超过上限(默认 6%)时提醒超出多少钱。
数字一律来自脚本输出,不要心算。
这个技能不做什么
- 不联网,不取任何行情,价格和止损价全部由用户提供。
- 不荐股,不判断止损价定得对不对、该不该买、买哪只。用户问「止损放哪好」「该买多少」,回答:这个工具只按你定的规矩算账;然后把算出来的数字给他看。
- 不承诺止损一定能按止损价成交。每次输出结尾的提示(跌停、跳空时实际亏损可能更大)原样保留,不删不改。
- 只算 A股普通股票的多头仓位。融资融券、期货期权、基金、可转债、B 股不在范围内。
- 不检查涨跌停、T+1、账户可用资金;这些请用户自己留意。
现行口径(核对日期 2026-09-30,出处见 references/rules-sources.md)
| 项目 | 默认 | 能不能改 |
|---|---|---|
| 单笔风险比例 | 总资金的 2% | 能 |
| 多只合计风险上限 | 总资金的 6% | 能 |
| 佣金 | 成交金额的万分之 2.5,单笔不足 5 元按 5 元 | 能,按用户券商合同;免五就把最低佣金改成 0 |
| 印花税 | 只在卖出时收,成交金额的千分之 0.5 | 能(规则变了才改) |
| 过户费 | 买卖都收,成交金额的十万分之 1 | 能 |
| 买入股数 | 沪深主板、创业板:100 股(1 手)的整数倍,向下取整 | 按代码自动判断 |
| 科创板:单笔至少 200 股,超过 200 股按 1 股递增 | ||
| 北交所:单笔至少 100 股,超过 100 股按 1 股递增 |
- 「真跌到止损亏多少」= 按买入价买入要付的钱(含佣金、过户费)减去按止损价全部卖出到手的钱(扣佣金、印花税、过户费)。
- 买入股数同时受两条限制:打到止损的亏损不超过上限;买入花的钱不超过总资金。哪条先卡住会写明。
- 多只持仓里的「成本价」按券商软件显示的持仓成本理解(已含买入费用);止损价高于成本的那只,打到止损是赚钱,按 0 风险计。
用户说大白话 → 你翻成命令
脚本路径:{baseDir}/scripts/position_size.py。不要让用户记参数,由你从对话里取数。
| 用户这样说 | 你跑这个 |
|---|---|
| 「我有 20 万,10 块买,9 块 5 止损,最多买多少?」 | python {baseDir}/scripts/position_size.py size --capital 200000 --entry 10 --stop 9.5 |
| 「50 万本金,每笔最多亏 1%,688 开头的票 45 块买、41 止损,买几股?」 | python {baseDir}/scripts/position_size.py size --capital 500000 --risk-pct 1 --entry 45 --stop 41 --code 688001 |
| 「我 10 块已经买了 5000 股,账户 20 万,止损最低放哪才不超过 2%?」 | python {baseDir}/scripts/position_size.py stop --capital 200000 --entry 10 --shares 5000 |
| 「打算 6 万分三次买,10、10.5、11 各买一次,金字塔和倒金字塔成本差多少?」 | python {baseDir}/scripts/position_size.py pyramid --prices 10,10.5,11 --money 60000 |
| 「从 10 块开始每涨 5% 加一次仓,一共 4 次,总共买 4000 股,止损 9.3,账户 20 万」 | python {baseDir}/scripts/position_size.py pyramid --first 10 --step 5 --times 4 --total-shares 4000 --stop 9.3 --capital 200000 |
| 「我拿着茅台 100 股成本 1500 止损 1400,平安 3000 股成本 50 止损 45,总资金 30 万,合计风险超了吗?」 | python {baseDir}/scripts/position_size.py portfolio --capital 300000 --positions "茅台:100:1500:1400;平安:3000:50:45" |
| 「持仓表在 D:\持仓.csv,总资金 50 万,合计风险上限 8%」 | python {baseDir}/scripts/position_size.py portfolio --capital 500000 --csv "D:\持仓.csv" --limit-pct 8 |
| 「我佣金万一免五,20 万,创业板 30 块买 28 止损」 | python {baseDir}/scripts/position_size.py size --capital 200000 --entry 30 --stop 28 --board 创业板 --commission-rate 0.0001 --commission-min 0 |
参数速查(给你看的,不念给用户):
| 参数 | 含义 |
|---|---|
size / stop / pyramid / portfolio |
最多买多少股 / 止损放哪 / 分批建仓 / 多只合计风险 |
--capital |
总资金(元) |
--risk-pct |
单笔最多亏总资金的百分之几,写 2 就是 2%,默认 2 |
--entry --stop |
买入价、止损价 |
--shares |
已经买了多少股(stop 用) |
--prices 或 --first --step --times |
分批价格:逐档写,或按起始价、每档涨百分之几(负数是跌)、档数排出来 |
--money / --total-shares |
分批一共投多少钱 / 一共买多少股,二选一 |
--mode |
pyramid 金字塔 / inverse 倒金字塔 / both 两种都算(默认) |
--weights |
自定义每档比例,如 5,3,2 |
--positions |
多只持仓:名称:股数:成本价:止损价[:现价],分号隔开 |
--csv |
持仓 CSV:每行 名称,股数,成本价,止损价[,现价],UTF-8 或 GBK 都行 |
--limit-pct |
多只合计风险上限,默认 6 |
--code / --board |
6 位代码自动判断板块;或直接写 主板 / 创业板 / 科创板 / 北交所 |
--commission-rate --commission-min --stamp-rate --transfer-rate |
改费率(小数写法,万 2.5 写 0.00025) |
--json |
输出结构化结果 |
用户说「亏 2 个点」「百分之二」都写 --risk-pct 2,不要写成 0.02。
退出码:0 正常,2 输入有误(错误信息两行:「出错了:…」「下一步:…」,原样转告用户)。
使用流程
- 问清楚:总资金、买入价、止损价(反算止损时换成已买股数)。缺哪样问哪样,别猜。单笔风险比例、板块(或代码)、费率没说就用默认,并告诉用户用的是默认。
- 跑脚本:按上表翻成命令。
- 给用户看:先用一句话说结论(例如「最多买 7800 股,占用 7.8 万,打到止损亏 3976.60 元,占总资金 1.99%」),再附上脚本的表格,最后原样附上提示。
- 用户追问「那风险放到 3% 呢」「止损改 9.3 呢」,改参数重跑,不要心算。
说话方式
- 对用户只说「总资金」「买多少股」「止损」「亏多少」「占几成仓位」这类股民的说法,不念参数名。
- 结论只陈述数字,不加「稳」「安全」「值得」之类的评价。
- 算出来买不了一手时,照实说,并把「止损要放到多少以上才买得了一手」「风险比例要多少才够一手」这两个数字摆出来,改不改由用户自己决定。
边界
- 券商实际收费(是否免五、分以下怎么舍入)各家不同,结果可能差几分钱,以交割单为准。
- 止损价必须低于买入价;分批建仓的止损价要低于每一档买入价。
- 反算止损时,如果仓位太重,算出来的止损价可能不低于买入价,脚本会注明。
- 分批建仓只负责分配股数;后面几档价格会不会到、能不能成交,脚本不预测。