下单前交易计划书(A 股)
这个技能做什么、不做什么
- 做:在下单之前,把用户脑子里的想法写成一张计划书,算出「这笔最坏亏多少、占多少仓位、盈亏比多少」,再逐条对照用户自己写的规则:仓位有没有超限、打到止损会不会超过单日亏损上限、有没有写止损、止损距离是不是 0、是否处在连亏冷静期。结果只有三档:
- PASS:符合你自己的规则。
- WARN:可以下,但有要注意的地方(接近上限、今天计划合计风险超线、没写失效条件等)。
- BLOCK:你自己的某条规则不允许这张计划,报告会写明是哪一条、差多少。
- 做:事后记录这张计划实际怎么执行的(有没有下单、是否按计划、实际成交价、到止损有没有走),并统计计划执行率、止损执行率、按计划 vs 未按计划的盈亏。
- 不做:不评价任何股票,不判断价格高低,不预测涨跌,不给买卖建议,不联网、不取行情。代码、名称、所有价格都由用户自己填。
- 用户问「XX 能不能买」「这个价贵不贵」「止损放哪合适」时,明确说这不在本技能范围内,把话题拉回:「你想好买入价、止损价和数量了吗?我帮你对一下你自己的规则。」
使用流程
- 规则文件:与「交易纪律教练」共用同一份
rules.json(同字段,模板在assets/rules.example.json)。用户已经在用纪律教练的,直接用那份。第一次使用先问三件事:账户总资金、单日最大亏损(元或百分比)、单票最大仓位比例;连亏几笔停几天。没回答的项按模板默认值,报告末尾会注明「按默认值」。 - 写计划并检查(参数式;用户在终端里也可以加
-i逐项问答):
python {baseDir}/scripts/plan.py --plans plans.jsonl new \
--code 600519 --name 贵州茅台 --side 买入 \
--entry 1420 --qty 20 --stop 1380 --target 1520 \
--reason "回到自己标记的计划价区间,按计划分两笔,这是第一笔" \
--invalidation "收盘跌破1380" \
--rules rules.json [--report report.json] [--dry-run]
- 必填:
--code --side --entry --qty --reason。理由少于 10 个字直接拒收,不写入。 --stop不填也会生成计划,但结论一定是 BLOCK。--report传纪律教练输出的report.json,才会检查冷静期(stats.cooldown_until)和已有持仓(stats.open_positions计入同代码仓位)。--dry-run只检查不写入;--json输出结构化结果。- 把输出的计划书原样给用户看,再用一两句话说结论。
3. 列出计划:python {baseDir}/scripts/plan.py --plans plans.jsonl list [--open],--open只看还没了结的(未记录执行、或已下单还在持仓中)。
4. 记录实际执行:
python {baseDir}/scripts/plan.py --plans plans.jsonl close --id 20260915-01 \
--executed yes --followed no --fill 256 --exit 236 --stop skipped --pnl -8105.6 \
--note "规则拦了还是下了"
--executed yes/no是否实际下单;下单了必须填--followed yes/no(价格、数量、止损都没改才算按计划)和--fill实际成交价。--stop executed | skipped | not_hit:到了止损价并执行 / 到了没执行 / 没到。- 还没平仓可以先不填
--exit/--pnl,状态为「持仓中」,平仓后再 close 一次补上。--pnl建议填券商显示的数;只给--exit时按价差算,不扣费。
5. 统计:python {baseDir}/scripts/plan.py --plans plans.jsonl stats [--since 2026-09-01]。
6. 所有记录都追加写在plans.jsonl(每行一个 plan 或 close 事件,不改旧行),可随时用文本编辑器查看;示例见assets/plans.jsonl。
与交易纪律教练配合
- 同一份规则:两个技能读同一个
rules.json,改一次两边生效。本技能用到capital / daily_loss_limit / daily_loss_limit_pct / max_position_pct / streak / cooldown_days / max_trades_per_day / fee_rate_if_missing / stamp_tax_rate_if_missing,其余字段(追涨阈值、扣分权重)原样保留不影响。可选加min_reward_risk(例如 1.5),加了才检查盈亏比。 - 事前 + 事后:收盘后用纪律教练跑复盘得到
report.json;第二天下单前把它通过--report传给本技能。纪律教练算出的冷静期还没过,计划直接 BLOCK;纪律教练算出的持仓成本会计入同代码仓位。 - 开盘前提醒可以一起说:纪律教练给「今天的亏损上限、是否在冷静期」,本技能给「今天已写的计划合计最坏亏多少」。
- 纪律教练的「连亏不停手」「单票仓位超限」「单日亏损超线」是事后发现;本技能是事前拦住同一类问题。统计里「被 BLOCK 仍下单」这一行,就是两边对上的地方。
报告怎么说话
- 先一句结论:PASS / WARN / BLOCK,再给数字表(最大亏损、占总资金、仓位占比、盈亏比),不用形容词。
- BLOCK 必须用「你的规则是 X,这张计划是 Y」的格式,并给出一个能让它回到线内的数字(例如「数量降到 200 股以内」),但不建议价格本身——止损价、买入价放哪里是用户自己的决定。
- 不说「这只票不错/有风险/偏贵/该止盈了」,不对理由内容做评价,只检查理由是否写了、是否达到 10 个字。
- 统计报告只讲执行:按计划的那组和没按计划的那组各亏赚多少,止损到价后执行了几次。样本少时注明只作参考。
- 结尾只说一件事,例如「这张计划被你自己的仓位规则拦住了:先把数量改到线内再来」。
边界
- 脚本纯标准库,不联网、不取行情、不下单,不连接任何券商账户。
- 所有价格与盈亏都是用户自己输入的,脚本不校验真实性;费用按规则里的费率估算(佣金单边最低 5 元,卖出一侧加印花税),与实际略有差异。
- 做空(融券)计划按对称公式计算,但不检查融券额度、利息。
- 冷静期只在传入纪律教练
report.json时检查;交易日只跳周末不跳节假日(与纪律教练一致,宁可多算冷静期)。 - 同一天多张计划:被 BLOCK 的计划不计入当日合计风险和同代码仓位;已下单未平仓的计划按计划价计入。
- 不构成投资建议。本技能只回答一个问题:这张计划是否符合你自己定的规则。