交易纪律自检清单
这个技能做什么、不做什么
- 做:事前。先让用户把自己的纪律条款白纸黑字立下来,然后按天或按周逐条自查 「这段时间守住了没有」,把每次答案记下来,再看坚持度随时间怎么变。
- 不做:不联网、不拉行情、不查价格、不读成交记录、不涉及任何具体标的—— 本技能从头到尾不出现任何股票代码,处理的只有两样东西:用户自己写的规则文本,和用户自己给的三档答案。
- 尤其不做:不替用户定阈值。内置清单只给「条款长什么样」,数字留成空格,由用户自己填。 用户问「单票仓位定多少合适」「日亏上限该设多少」,回答这不在本技能范围内, 然后把问题还回去:「你自己能接受的是多少?」——填进去的是他的数,不是我们的建议。
- 用户问「XX 能不能买」「现在该不该减仓」,同样明确说不在范围内, 改问「你的条款里哪一条管这件事」。
事前 / 事后的分工
| 技能 | 数据来源 | 回答的问题 | |---|---|---| | 交易纪律自检清单(本技能) | 用户自己写的条款 + 自己的三档答案 | 我给自己定的规矩,这段时间守住了吗?坚持度在变好还是变坏? | | 交易纪律教练(trade-discipline-coach) | 券商导出的成交记录 | 已经发生的操作违反了哪些规则? | | 交易日记(trade-journal) | 用户自己写的计划与复盘 | 我说了要做什么?实际做了什么? |
三者互不改对方的文件。本技能的 today 输出是纯文本条款清单,可以被别的技能或定时任务直接引用;
check 也支持非交互一次性提交,方便被别的技能调用。
什么时候用
| 时点 | 做什么 |
|---|---|
| 第一次使用 | init 立条款:挑条款、自己填阈值 |
| 每天开盘前 | today 把条款念一遍(纯文本,可贴到手机备忘录) |
| 每天收盘后 / 每周末 | check 逐条自查,破了的写一句原因 |
| 每月 / 攒够几次自查后 | stats 看坚持度,audit 给条款本身做体检 |
| 想加条款或改阈值 | init --add(加新条款)/直接改 rules.json 里的数字 |
命令
条款默认存 ~/.discipline/rules.json,自查历史默认存 ~/.discipline/checks.jsonl
(每次自查一行 JSON,只追加,不改历史行)。两个路径都能用 --rules / --checks 换。
下面的 {baseDir} 是本技能目录。Windows 路径直接写反斜杠也行。
# 0. 先看看内置清单里有哪些条款可挑(只打印,不写文件)
python {baseDir}/scripts/checklist.py init --list
# 1. 立条款(交互式:一条条问你要不要、阈值填多少)
python {baseDir}/scripts/checklist.py init
# 1'. 立条款(非交互:阈值写在命令里,全部是你自己的数)
python {baseDir}/scripts/checklist.py init --cadence weekly \
--pick max_position_pct=25 --pick daily_loss_limit=2000元 \
--pick loss_streak_stop=3,1 --pick no_chase_pct=5 \
--pick max_trades_per_day=4 --pick stop_order_placed=10 \
--custom "每天 14:30 之后不开新仓"
# 2. 自查(交互式:逐条问 1=守住 2=破了 3=不适用)
python {baseDir}/scripts/checklist.py check --weekly # 或 --daily
# 2'. 自查(非交互:一次性提交,方便被别的技能/定时任务调用)
python {baseDir}/scripts/checklist.py check --weekly --date 2026-09-13 \
--answer R01=kept --answer "R04=broke:又追高了,怕踏空" --answer R03=na
# 3. 统计
python {baseDir}/scripts/checklist.py stats --out stats.md # 同时写出 stats.json
python {baseDir}/scripts/checklist.py stats --last 8 # 只看最近 8 个周期
# 4. 条款体检
python {baseDir}/scripts/checklist.py audit --out audit.md
# 5. 今天要念的条款清单(纯文本;--json 给别的技能用)
python {baseDir}/scripts/checklist.py today
python {baseDir}/scripts/checklist.py today --json
--pick 一次只挑一条,可重复;多阈值条款用逗号分开(loss_streak_stop=3,1 = 连亏 3 笔停 1 天)。
只写 key 不写阈值会直接报错——这是故意的,阈值必须由用户填。
--answer 里的条款可以写条款号(R01)也可以写 key(max_position_pct);
回答 broke 却不写原因同样报错。
被别的技能或定时任务调用时一定要带 --pick / --answer:不带参数的 init 和 check
会进入交互问答,在无人值守的环境里就是干等。stats / audit / today 从不提问,随便调。
内置可选条款清单
十二条备选,阈值位置一律留空由用户自己填;用户也可以用 --custom 写完全自己的条款。
每条「为什么值得自查」见 references/rules-catalog.md。
| key | 条款 | 要用户自己填的阈值 | 条款写出来长这样 |
|---|---|---|---|
| max_position_pct | 单票仓位上限 | 单个标的最多占总资金的百分之几(%) | 单个标的的持仓成本不超过总资金的 ___% |
| max_total_exposure_pct | 总仓位上限 | 全部持仓合计最多占总资金的百分之几(%) | 全部持仓合计不超过总资金的 ___% |
| daily_loss_limit | 单日亏损上限 | 单日亏到多少就收工(金额或百分比,自己写单位) | 单日亏损达到 ___ 就当天收工,不再下单 |
| weekly_loss_limit | 单周亏损上限 | 一周亏到多少就停到下周(金额或百分比,自己写单位) | 单周亏损达到 ___ 就停到下一周 |
| loss_streak_stop | 连亏停手 | 连亏几笔就停手(笔);停手几天(天) | 连亏 ___ 笔之后停手 ___ 天,不开新仓 |
| no_chase_pct | 不追涨 | 当日涨幅超过百分之几就不买(%) | 当日涨幅已经超过 ___% 的,当天不买 |
| no_add_on_loss | 不亏损加仓 | 浮亏超过百分之几就不再加仓同一个标的(%) | 同一个标的浮亏超过 ___% 时不再加仓 |
| max_trades_per_day | 每日交易笔数上限 | 每天最多几笔成交(笔) | 每天最多 ___ 笔成交 |
| write_plan_first | 先写计划再下单 | 一个周期里允许几笔「没写计划就下单」的例外(笔) | 下单前必须先写好计划,一个周期里最多允许 ___ 笔例外 |
| stop_order_placed | 止损必须挂出来 | 建仓后几分钟内必须把止损挂出来(分钟) | 建仓后 ___ 分钟内把止损挂出来,不放在脑子里 |
| no_trade_when_emotional | 情绪波动时不下单 | 下单前情绪自评(1–10)到几分就不下单(分) | 下单前给自己的情绪打分(1–10),到 ___ 分及以上就不下单 |
| screen_time_cap | 盯盘时长上限 | 每个交易日最多盯盘多少分钟(分钟) | 每个交易日盯盘不超过 ___ 分钟 |
自定义条款的文本原样保存,里面没有数字时脚本会提示一句「这条没有阈值,自查时只能凭感觉判断」, 但不会拦着用户,也不会替他补一个数。
三档答案
| 答案 | 什么时候选 |
|---|---|
| 守住 kept / 1 | 这个周期里这条没被打破 |
| 破了 broke / 2 | 打破了。必须写一句原因,一句话就行,这句话是后面「破戒原因高频词」的全部原料 |
| 不适用 na / 3 | 这个周期根本没遇到(比如没连亏过,谈不上「连亏后停手」)。不适用不进坚持率的分母 |
直接回车=这条跳过不答,记录里会单独列成「未答」,既不算守住也不算破。
统计口径
- 坚持率 = 守住次数 ÷(守住 + 破了)。不适用与未答不进分母。
- 当前连续:从最近一次自查往回数连着守住的周期数;碰到「破了」就断, 碰到「不适用 / 未答」跳过不算也不断。天数按周期跨度折算(每周=7 天,每日=1 天)。
- 整体坚持度 = 全部条款的守住数 ÷ 全部已判定数 ×100。它是个次数比,不是对操作水平的评价, 报告里也照原话这么说。
- 同一周期做了多次自查:统计以最后一次为准,但历史行原样留在文件里不删不改。
- 破戒原因高频词:粗切中文 2–3 字片段数词频,同一条原因里重复只算一次。只数词频,不解释语义。
报告怎么说话
- 只陈述用户自己的记录,不评价、不安慰、不说教。
- 「R04 这 8 次已判定里破了 5 次,最近一次的原因是『又追高了,怕踏空』」——这样说; 不说「你自制力差 / 你要克服贪婪 / 建议把阈值放宽到 8%」。
audit里只陈述 + 提问:一条从没破过的,问「是已经变成习惯了,还是这条阈值离你的实际操作本来就有距离」; 一条破戒率过半的,问「是条款离你的操作太远,还是这正是你当初要治的毛病」。 两种情况都不给新数字——改不改、改成多少,用户自己填。- 每份输出结尾固定一句「以上只是你自己写下的条款和你自己给出的答案的统计,不构成投资建议」。
文件与示例
| 路径 | 说明 |
|---|---|
| ~/.discipline/rules.json | 条款文件,可直接手改阈值(改完 since 建议自己更新) |
| ~/.discipline/checks.jsonl | 自查历史,每次一行 JSON,只追加 |
| assets/rules.example.json | 一份填好阈值的示例条款(9 条,示例里的数字是虚构的,不是推荐值) |
| assets/sample_checks.jsonl | 虚构的 8 周自查历史,用来看 stats / audit 长什么样 |
| references/rules-catalog.md | 内置条款的出处与「为什么这条值得自查」 |
拿示例数据跑一遍:
python {baseDir}/scripts/checklist.py \
--rules {baseDir}/assets/rules.example.json \
--checks {baseDir}/assets/sample_checks.jsonl stats
边界
- 只用 Python 3 标准库,零第三方依赖;不发起任何网络请求。
- 自查历史只追加。答错了就再自查一次(同周期以最新一次计),不去改历史行——改了统计就不可信了。
- 条款是用户的私人文本。技能不校验条款「合不合理」,只校验阈值有没有填。
- 「守住 / 破了」全凭用户自己回答,技能无从核对(要用成交记录核对是「交易纪律教练」的事)。 因此坚持率衡量的是用户对自己的诚实程度 + 执行情况,不是账户业绩。
- 坚持度得分与业绩无关,本技能既不知道也不关心用户赚没赚钱。
微信扫一扫