返回技能市场
数据分析 安全

交易复盘周报月报·炒股记录交叉分析

@user_2ckqg/trade-review-report

交易复盘周报月报:合并交易日记、纪律复盘和账本分析三份结果做交叉分析——违规的笔 vs 干净的笔、有计划 vs 无计划、情绪与盈亏,出一份周报或月报。纯本地、不联网,不评价股票、不给买卖建议。

user_2ckqg 热度 50v0.1.0

交易复盘周报 / 月报

这个技能做什么、不做什么

  • 做:把用户已经有的三份记录合并成一份。交易日记知道「我说了要做什么」,纪律教练知道「我违了哪条规矩」,
  • 账本知道「钱去哪了」——三个各看各的一摊,合起来才答得上「这一周我到底怎么样」。

  • 做:三张交叉表,这是本技能唯一无法被单个技能替代的部分:
  • 违纪的笔 vs 遵守的笔、有计划的成交 vs 无计划的成交、下单情绪 → 盈亏。

  • 不做:不联网、不拉任何行情、不查任何价格。报告里每一个数字都能在用户给的那三个文件里翻到。
  • 不做:不评价任何股票、不预测涨跌、不给买卖建议、不做仓位推荐。
  • 用户问「XX 还能拿吗」,回一句这不在本技能范围内,把话题拉回「你这一周的记录是这么写的」。

三个源分别提供什么

| 源 | 谁写的 | 提供的字段 | 报告里哪几段靠它 | 不给会怎样 | |---|---|---|---|---| | 交易日记<br>journal.jsonl | trade-journal 技能 | 计划(代码、方向、计划价、止损、止盈、情绪、理由、标签)、成交价、放弃原因、平仓与止损判定 | 一句话总览的计划/成交/放弃、计划 vs 执行整段、交叉表 2 的「有计划」一侧、交叉表 3 的情绪 | 这几段写「未提供 交易日记 数据」;交叉表 2、3 直接跳过 | | 纪律教练<br>report.json | trade-discipline-coach 技能 | 六条规则的违规明细(日期、代码、金额、说明)、规则权重、全量得分 | 纪律整段、区间得分、环比、交叉表 1 的分组依据 | 纪律段写「未提供 纪律教练 数据」;交叉表 1 跳过;总览的得分显示「未提供」 | | 账本分析<br>ledger.py 的 JSON | trade-ledger-analysis 技能 | FIFO 配出来的每笔平仓(建仓日、平仓日、代码、数量、成本、费用、含费用的真实盈亏、持仓天数) | 盈亏归因整段、三张交叉表的盈亏口径、总览的盈亏 | 盈亏段写「未提供 账本分析 数据」;交叉表退回用日记里的平仓价算盈亏(不含手续费和印花税),并在报告里标明口径 |

三个都可选,给几个用几个;一个都不给会直接报错并说明要什么。 三个都给,报告才是完整的——尤其交叉表 2「无计划成交」,只有账本能看见那些压根没写进日记的单子。

怎么跑

下面的 {baseDir} 是本技能目录。

# 完整周报(本周,周一到周日)
python {baseDir}/scripts/report.py \
  --journal ~/.trade-journal/journal.jsonl \
  --discipline 纪律报告.json \
  --ledger 账本.json \
  --week --out 复盘/

# 上周;带环比(自动把上一周期同口径的数字并排放上)
python {baseDir}/scripts/report.py --journal j.jsonl --discipline d.json --ledger l.json \
  --last-week --compare --out 复盘/

# 指定自然月 / 自定义区间
python {baseDir}/scripts/report.py --journal j.jsonl --month 2026-09 --out 复盘/
python {baseDir}/scripts/report.py --ledger l.json --from 2026-09-01 --to 2026-09-20 --out 复盘/

# 只给一个源也能跑,缺的段落会写「未提供 X 数据」
python {baseDir}/scripts/report.py --journal j.jsonl --week

| 参数 | 说明 | |---|---| | --journal / --discipline / --ledger | 三个数据源,都可选,至少给一个 | | --week(默认) / --last-week | 按周一到周日切;锚点日期用 --date,不给就是今天 | | --month YYYY-MM | 自然月 | | --from / --to | 自定义区间,要成对给 | | --date | --week / --last-week 的锚点日,补跑历史周报时用 | | --compare | 带上一周期(上周 / 上月 / 紧邻的等长区间)同口径数字做环比 | | --out | 输出目录,默认当前目录。写出 trade-report_<起>_<止>.md 和同名 .json | | --quiet | 只写文件,不把报告打到屏幕上 |

报告同时打到屏幕上,直接原样展示给用户即可。 先跑一次 --week,用户要看细节再跑 --month--compare,不要一次甩三份。

报告里有什么

  1. 一句话总览 —— 本期计划 N 笔、成交 M 笔、放弃 K 笔、了结几笔、纪律得分、违规几次、盈亏多少。
  2. 计划 vs 执行 —— 执行率、计划价 vs 成交价的平均偏离(正数 = 比自己写的价吃亏)、
  3. 止损触发几次 / 真止几次 / 按计划止损率、偏离最多的几笔、跌破止损却没卖的那几笔(带用户当时写的那句话)。

  4. 纪律 —— 本期违规按严重度(纪律报告自带的权重)排序,每条带日期和明细,
  5. 并与上一周期逐条对比「多了 / 少了 / 持平」。区间得分是在这个区间内按同一套权重重算的, 和纪律报告的全量得分不是一个数,报告里已写明。

  6. 盈亏归因 —— 已实现盈亏(含费用)、毛盈亏、费用及其占毛盈亏的比例、胜率、盈利最大的三笔、亏损最大的三笔。
  7. 交叉分析(本技能的核心)——
  • 违反纪律的笔 vs 遵守的笔:笔数、合计、每笔平均、胜率
  • 有计划的成交 vs 无计划的成交:同上,外加无计划占比和那几笔的明细
  • 下单情绪 → 盈亏:把日记里下单时的情绪 join 到账本的平仓结果上
  1. 本期三个待改 —— 按固定规则从上面的事实里挑,不是模型临场发挥。
  2. 环比(给了 --compare 才有)—— 十几个指标的本期 / 上期 / 变化。

「三个待改」是怎么挑的

候选打分 = 单位权重 × 相关笔数,同分先比笔数,再按固定顺序。规则写死在 scripts/report.pybuild_todo() 里:

| 候选 | 触发条件 | 单位权重 | |---|---|---| | 没有对应计划的平仓 | 笔数 ≥ 2 且占本期了结 ≥ 30% | 10 | | 跌破止损却没按计划卖 | ≥ 1 次 | 12 | | 带纪律违规标记的平仓 | 违规笔 ≥ 2、干净笔 ≥ 1,且违规笔每笔平均更差 | 6 | | 某种情绪下的单子 | 该情绪了结 ≥ 2 笔且亏损占 ≥ 2/3 | 8 | | 成交价比计划价吃亏 1% 以上 | ≥ 2 笔 | 5 | | 六条纪律规则各自 | 本期触发过 | 用纪律报告自带的权重 |

措辞固定为「你自己的操作里,X 发生了 N 次」,后面跟一行纯数字的佐证。 不出现形容词,不出现标的评价,不出现「下次注意」这类说教。

报告怎么说话

  • 不评价、不安慰、不说教。把数字并排摆出来,让用户自己看。
  • 「带违规标记的 4 笔合计 -13,787.53 元,没有违规标记的 7 笔合计 -777.81 元」——这样说;
  • 不说「你太冲动了 / 这周做得不错 / 该控制仓位了」。

  • 报告里出现的股票代码只是你操作过的标的这一种身份,是统计单位,不带任何判断词。
  • 绝不写「这只票不适合你 / 该减仓 / 波动太大」。

  • 数字不替用户下结论。用户问「我是不是无计划乱做」,把交叉表那两行念出来,不加形容词。
  • 结尾固定一句「以上仅为你自己记录与成交的统计,不构成投资建议」(脚本自动附上,不要删)。

口径与边界

  • 时间对齐:三个源的时间字段名和格式都不一样(日记是 date、纪律是违规里的 date
  • 账本是 close_date/open_date),各写各的读取器,统一裁到同一个区间再合并。详见 references/inputs.md

  • 盈亏口径:有账本就用账本的 pnl手续费和印花税);没有账本才退回日记里的 pnl
  • 不含费用)。两种口径不能互相比较,报告里每次都标明用的是哪种。

  • 计划 ↔ 成交的匹配很粗:同代码、买入方向、计划(或其成交)日期与建仓日相差不超过 1 天,
  • 一条计划最多认领一笔平仓。它只用来提示「这笔好像没写过计划」,不是对账。 一票分批进出、同日反复做同一只票时会认错。

  • 违规 ↔ 成交的挂靠:带代码的规则按「同代码 + 违规日在建仓日与平仓日之间」挂;
  • 不带代码的按天规则(日亏超线、过度交易)只挂到当天了结的那几笔上, 免得一条「当日 9 笔」把当天还没卖的持仓也算成违规。

  • 区间得分不是纪律报告里的那个分。区间得分 = 100 − 本区间各违规按同一权重的扣分,最低 0。
  • 纪律报告里没有日期的违规无法归入区间,会被跳过并在报告里报条数。
  • 账本里的未平仓持仓只报只数,不计盈亏——本技能一行行情都不拉,算不了也不该算。
  • 日记里读不出来的行会跳过并报条数,不会整份罢工;三个源缺失、为空、格式不对都给中文提示,不打 Python 栈。

和另外三个技能的关系

| 技能 | 回答的问题 | |---|---| | trade-journal 交易日记 | 我说了要做什么?实际做了什么?当时什么心情? | | trade-discipline-coach 交易纪律教练 | 我的操作违反了我自己定的哪些规则? | | trade-ledger-analysis A 股交易账本分析 | 我到底赚了还是亏了,钱从哪来的? | | 本技能 | 这一周(月)我到底怎么样?上面三件事连起来看是什么样子? |

建议顺序:周末先跑日记的 week、账本的 ledger.py、纪律的 review.py, 拿到三份输出后再跑本技能合并。本技能只读那三份文件,不改、不回写、不碰它们的目录。

自检

assets/ 下有三份可直接跑的虚构样例:

cd {baseDir}
python scripts/report.py --journal assets/sample_journal.jsonl \
  --discipline assets/sample_discipline.json --ledger assets/sample_ledger.json \
  --week --date 2026-09-12 --compare --out out/

样例数据是编的,但故意造出了能出结论的情形(违纪的笔明显亏更多、无计划成交占比接近一半、 「焦虑」情绪下的单子全亏),用来演示交叉表长什么样。

qianwen skills install @user_2ckqg/trade-review-report