装好 WorkBuddy 之后,很多人第一反应是“这到底有啥用”。尤其你在本地配好了环境、也导入了一些数据,但界面上除了几个基础面板,根本不知道该点哪里。我自己最开始也是这样:装包五分钟,配置半小时,然后对着空空的仪表盘发呆。坦白讲,WorkBuddy 这类工作流协作工具,真正的价值从来不在“安装”这一步,而在“把某一类重复劳动自动化”这件事上。炒股复盘就是其中一个特别典型的场景——每天收盘后要翻行情、拉成交记录、算盈亏、看持仓变化、写总结,这些东西靠手工做,半小时打底,做久了还容易偷懒。把 WorkBuddy 和炒股环境打通,让复盘报告在收盘后自动生成、自动汇总、自动推给自己,才是它真正起飞的地方。
这篇内容适合三类人:一是有股票账户、日常需要做收盘复盘的散户投资者;二是刚开始接触自动化工具、只装了 WorkBuddy 但迟迟没有动手的新手;三是想把个人交易复盘沉淀成结构化数据的进阶玩家。我会按自己的实操顺序来写,不绕弯子,先把整个流程拆清楚,再把每一步卡过的地方和踩过的坑都列出来,最后给一张能直接照着操作的配置说明。你可以把 WorkBuddy 当成一个“会按点干活的助手”,而炒股环境就是它的第一个正式任务。
1. 先想清楚:自动复盘到底要解决什么事
很多人一上来就急着写触发规则、配数据接口,结果做了两三天发现报告完全不是自己想要的。问题在于,他们跳过了最关键的步骤:先想清楚“复盘”这两个字对你来说意味着什么。
1.1 手工复盘的短板到底在哪里
手工复盘不是不能做,而是成本太高。大多数人的流程是这样的:收盘后打开行情软件,把自选股列表一支支扫过去,看到涨跌幅异常的,翻一下分时图,然后在表格里手动记一笔“今天为什么涨”“明天怎么看”。接着还要打开券商账户,导出当天成交记录,去核对每笔交易的实际盈亏,再补上持仓变化和可用资金变动。整套下来,熟练的人也要二十到三十分钟,不熟练的人可能一个小时就没了。更麻烦的是,手工记录很难坚持——盘面一波动,人一忙,复盘就断档了。Week 过后自己都不知道当时为什么买、为什么卖,那这笔钱基本就白亏了。
复盘要解决的,其实是三个问题:今天发生了什么、我手里的持仓状态怎么样、我的交易决策有没有可以被量化的规律。这三个问题,每一个都需要数据支撑,而数据是最好被自动化处理的。
1.2 WorkBuddy 在整套流程里的定位
我理解的 WorkBuddy,本质上是个“任务编排器”。它不需要替你做交易决策,也不需要代替你分析行情,它做的事情是:在固定的时间点,把一堆固定的动作按顺序跑完,最后把结果通过某个通道交给你。
放在炒股复盘的场景里,它的职责可以拆成四块:
- 定时读取行情数据,覆盖收盘后的最新价格和涨跌幅;
- 读取交易记录文件,把当日成交、持仓变化、资金变动汇总成结构化数据;
- 执行复盘逻辑,计算指标、生成图表和文字总结;
- 把最终报告推送到你的手机或电脑。
这套逻辑很像工厂里的流水线。原料是行情数据和交易记录,加工环节是指标计算和报告生成,成品是每天按时送达的复盘卡片。WorkBuddy 充当的就是流水线的控制台,负责每个环节的调度和衔接。
1.3 装完之后先别急着配策略,先把“复盘边界”画出来
这里的“边界”指的是:你只管股票,还是包含基金、可转债、场外衍生品?你只看自选股,还是要把账户里的所有持仓都纳入监控?你的复盘是简单看一眼当天盈亏,还是要分析每次买卖的胜率和期望值?这些问题直接决定了后面的数据源怎么接、报表怎么设计、触发规则怎么写。
我自己第一次做的时候就犯了边界不清的错。一开始只接了一个行情源,只覆盖了自选股列表,没有把真实持仓导入进去。结果复盘报告出来,自选股分析得很详细,自己实际持仓却在报告里缺席。后来才补上持仓维度,把券商导出的持仓文件定时同步进去,报告才真正变得可用。建议你把“每日复盘”的最低范围先圈定在三张表上:
- 自选股行情表:记录每日收盘价、涨跌幅、成交量变化;
- 交易流水表:记录当日买入、卖出、手续费、净盈亏;
- 持仓状态表:记录当前持有数量、成本价、现价、浮动盈亏。
后面所有自动化工作流,都围绕这三张表展开就够了。模板模型可以先简单,后面再逐步加指标,但表结构最好一开始就定好,避免后期返工。
2. 炒股环境搭建:三项必须做好的基础配置
WorkBuddy 装好之后,真正要花时间的是“炒股环境”的搭建。这个环境不单指一个行情软件,而是指数据源、规则、通知通道这三大块的组合。哪怕你的 WorkBuddy 界面再美观,数据源接不通、规则写错、通知发不出去,整个自动化就是空转。
2.1 行情数据源的接通与校验
行情数据是整个复盘的数据地基。这个地方千万别图省事,宁可多花两天找到稳定可靠的来源,也不要随便用一个晚上就失效的临时接口。
我的建议是:先找支持 HTTP API 的免费或低成本的行情服务,优先看接口是否提供以下字段:
- 证券代码、名称;
- 最新价、收盘价、开盘价;
- 当日最高、最低价;
- 成交量、成交额;
- 涨跌幅、换手率。
接入后的第一步不是直接写复盘脚本,而是先做一次“数据校验”。拿一个昨天已经收盘的股票,对比 WorkBuddy 拉到的数据和你行情软件里显示的数据,确认收盘价一致、涨跌幅一致、成交量数量级一致。这一步看着简单,但特别容易暴露字段单位错误的问题。比如有的接口返回的成交量是以“手”为单位,有的是以“股”为单位;有的收盘价是未复权价格,有的默认是前复权。这些差异如果不校准,后面算出来的盈亏、收益率全是错的。
接入行情数据基本可以分成三步:
- 注册接口账号,拿到访问令牌 API Token;
- 在 WorkBuddy 里新建一个数据源配置,填写请求地址和令牌,配置好缓存路径;
- 写一个简单的轮询脚本,先手动执行一次,确认数据落盘成功。
我接行情源的时候还额外做了一个处理:对每次请求都加了一层本地缓存,避免每次触发都去请求一次接口,一方面能省流量,另一方面也能规避接口频率限制。缓存文件我用的是 JSON 格式,按日期和证券代码做文件命名,例如hist_20250214_sh600001.json,方便后面追溯数据来源。
2.2 自选股与盯盘规则怎么设计
自选股列表不要随手写在 WorkBuddy 的界面里,而是应该作为一个独立的配置文件放在外部。这样做的原因是:列表的变动频率远高于配置的变动频率,拆开后你只需要维护一个文本文件或表格,不必反复去改自动化任务。
我更推荐的做法是维护一个 CSV 文件,字段包含三项:
- 代码:证券代码,如
SH600519; - 名称:中文简称,方便报告可读;
- 分组:用于区分核心持仓、观察仓、短期关注等不同用途。
盯盘规则这边,刚开始可以只关注两类触发条件:
第一类是异常波动,比如单日涨跌幅超过 5% 或者成交量较近 5 日均值放大一倍以上。这类规则的价值在于,帮你从十几支自选股里快速揪出当天最值得复盘的目标。
第二类是持仓成本相关提醒,比如现价跌破成本价 3% 以上。这种提醒不需要盘中去抢,在收盘后复盘阶段生成一次就够,避免盘中频繁打扰。
规则本身建议用可读性强的配置文件来表达。以 JSON 为例,可以写成一个规则数组,每一条规则包含字段名、比较符、阈值和说明。WorkBuddy 里的自动化任务直接读取这个 JSON 文件,解析后逐条执行。这样以后想加新规则,改 JSON 就行,不需要动主流程代码。
2.3 通知通道和日志留痕
通知通道是整个自动化闭环的“最后一公里”。如果复盘报告生成之后,你看不到、收不到,那整个流程就只是自我感动。
我建议至少配置两个通知通道:
- 主通道:用于接收每日复盘报告,可以是一个即时消息服务的机器人推送,也可以是邮件;
- 备份通道:用于接收异常提醒,比如数据拉取失败、报告生成失败、触发规则时执行异常。
通知消息的格式要克制。最好的模板是一屏能看完的结构:日期、账户总资产、当日盈亏、持仓数量、异常股票列表、一句由程序生成的总结。不要在一个消息里塞几十张图片或几百行文字,信息密度太高反而没人看。
日志留痕更容易被忽略。WorkBuddy 的自动化任务在执行过程中,至少要输出三类日志:输入数据状态、每一步执行是否成功、最终报告校验结果。我给自己定了一个“三有”标准:有时间戳、有执行环节名称、有结果摘要。比如:
[2025-02-14 15:05:02] [数据接入] 成功拉取自选股行情 20 条,耗时 3.2 秒 [2025-02-14 15:05:20] [指标计算] 胜率 41.7%,盈亏比 1.28,最大回撤 8.5%有了这种日志,后面排查问题会轻松非常多。否则一旦跑出的报告数据不对,你都说不清是数据源的问题、规则的问题,还是脚本自身的 bug。
3. 自动复盘工作流设计:从原始数据到可读报告
环境搭好之后,重头戏才刚开始——设计复盘工作流。这里要解决的核心问题是:原始行情数据和交易流水,如何变成一份有决策参考价值的复盘报告。
3.1 复盘报告的核心指标与口径定义
复盘报告的质量,取决于指标口径。很多人在这一块非常随意,算出来的数字自己都解释不清,报告自然没有价值。
我常用的交易维度指标有这么几项,你可以按需选用:
| 指标名称 | 计算方式 | 说明 |
|---|---|---|
| 当日盈亏 | 当日卖出净额 - 当日买入净额 - 手续费 | 反映当日实际落袋情况 |
| 持仓浮动盈亏 | 现价市值 - 成本市值 | 反映当前持仓的账面情况 |
| 胜率 | 盈利交易次数 / 总交易次数 | 只统计已平仓交易,避免幸存者偏差 |
| 盈亏比 | 平均单笔盈利 / 平均单笔亏损 | 衡量盈利和亏损的幅度关系 |
| 期望收益 | 胜率 x 平均盈利 - 败率 x 平均亏损 | 正期望代表策略在统计上可能赚钱 |
| 最大回撤 | 净值从峰值到谷底的最大降幅 | 反映账户整体风险水平 |
这里有一个特别容易踩的坑:胜率不能把未平仓的持仓一起算进去。很多人打开自己的交易记录,把当前还持有的股票也当成已盈利或已亏损来计算胜率,这等于把一个还没结束的“局”提前盖棺定论,统计出来的数字毫无意义。
报告的文字总结也别写得冷冰冰。我自己的方案是,用程序生成三段固定结构的描述:第一段概括账户整体状态,第二段点出当天异常波动的股票,第三段列出触发规则的标的和原因。让复盘报告既能看到数据,也能看到“发生了什么”。
3.2 如何把交易流水标准化成可计算的数据
大部分券商都支持导出成交记录,但导出的格式五花八门,字段名也各不相同。如果每次复盘都人工去整理导出的文件,那自动化就名存实亡了。所以这里必须要做一件事:建立一个标准的交易流水表结构。
建议的字段至少包含:
- 交易日期:精确到日即可,日内多次交易可以合并到一行;
- 证券代码与名称;
- 方向:买入或卖出;
- 成交价格;
- 成交数量;
- 手续费;
- 交易账户标识。
把券商导出的文件转换成这个标准结构,是设置自动化任务里“最不性感但最有价值”的环节。常见做法是写一个字段映射配置文件,把券商文件中的原始列名映射到标准字段。例如券商文件里可能叫“成交均价”,你的标准表里叫price,那就做个映射成交均价 -> price。
落盘格式我建议直接用 CSV 或表格文件,不要用 Excel 这种带格式的文件。原因是 CSV 是文本格式,任何脚本都能直接读入,Excel 则在自动化处理时更容易碰到公式、合并单元格、编码之类的问题。文件命名也要规范,例如trade_20250214.csv,按日期分开保存,这样后面按日期范围做统计会非常顺手。
3.3 自动触发的节奏和报告推送
复盘工作流什么时候跑、多久跑一次,这个节奏可以直接照搬我踩过坑之后的定版:
- 每天下午 15:30 触发一次“收盘复盘”,读取当日完整行情,生成日复盘报告;
- 每周五下午 16:30 触发一次“周复盘”,汇总当周交易数据,生成周度趋势总结;
- 每天上午 09:10 触发一次“盘前检查”,核对昨日报告是否成功生成,同时刷新自选股缓存。
这三个时间点基本覆盖了复盘的全部需求。15:30 选在收盘后半小时,是为了留出数据源更新的时间,避免行情数据还没完全落定就开始拉取,导致拿到的是半截数据。16:30 放在周五收盘后一小时,是为了等待周度数据完整。盘前检查则是整个自动化系统的健康巡检。
触发配置不要全部写死在脚本里,而是统一写到 WorkBuddy 的任务配置中,用 cron 表达式管理会更好。例如每天 15:30 就是30 15 * * 1-5,每周五 16:30 是30 16 * * 5。WorkBuddy 会在这些时间点唤醒工作流,然后按顺序执行拉数据、算指标、生成报告、推送消息这几个步骤。只要某一步失败,就会立刻通过通知通道发一条异常提醒。
4. 实操记录:从零到跑通一次完整复盘
我把自己当时走通的流程完整梳理一遍。建议你照这个顺序做,不要跳步。跳过太多步骤,等出了问题再回头排查,成本会更高。
4.1 第一步:接通行情 API 并完成数据落盘
我先在一个本地目录里建立了三个子目录:market、trade、report。market用来放行情缓存,trade用来放交易流水,report用来放每日生成的报告和归档记录。前面说的自选股列表 CSV 文件,我就放在market/watchlist.csv。
然后配置了行情接口。这里有个关键点:行情接口的并发请求多数有限制,所以我写了一个简单的重试机制,请求失败时等待 3 秒再重试,最多重试 3 次。如果连续 3 次失败,就放弃这一支股票的数据并在日志里记录,同时让整个工作流继续跑下去,不要因为一支股票失败就全部中断。
第一次跑通时,我把整个流程设置成手动触发,先不配置定时任务。手动执行两次,每次都检查market目录下的 JSON 缓存是否生成、字段是否完整、价格是否和行情软件对得上。只有连续两次校验通过,我才放心进入下一步。
4.2 第二步:用模拟盘验证复盘算法
实盘数据直接用来验证指标口径,风险太大了。我的做法是先用模拟账户跑了两周模拟交易,拿到了一批干净的模拟成交记录,然后把它们导入trade目录,跑了一遍完整的复盘脚本。
这一步的价值在于:能把胜率、盈亏比、期望收益这些指标的计算逻辑彻底验证清楚。我当时的第一个版本就出了 bug——手续费没有计入交易成本,导致每一笔卖出交易的净盈利都偏高,最终算出来的期望收益是虚高的。后来把手续费字段加进成本计算,重新跑一遍,数字才变得合理。
在模拟阶段,一定要打印中间过程,别只看最终结果。比如算胜率时,把每一笔已平仓交易的方向、金额、盈亏明细都打印出来,人工核对几笔。确认无误后,再把打印关掉,让脚本安静地跑完整流程。
4.3 第三步:把自动触发和报告推送接进闭环
算法验证通过之后,我才开始配置定时触发和通知通道。先配的是每天 15:30 的收盘复盘任务,通知接收用的即时消息机器人。
任务配置完成后的前三天,我没有直接让它自动运行,而是把触发时间暂时提前到下午 14:30 手动运行一次,用来观察任务是否按预期执行。确认没问题后,再改回 15:30,并连续三天检查每天生成的报告时间戳是否为当天的 15:30 之后。
这里要留意一个容易疏忽的点:自动任务生成报告后,一定要配置一条“已成功推送”的回读确认。意思是,报告推送到你的手机或邮箱后,WorkBuddy 要能收到推送成功的回调,否则报告可能生成成功但推送失败,而被推送异常的通知也没触发,整个闭环就断了。
5. 常见问题与排查技巧实录
自动复盘跑了一个多月,翻来覆去碰到的问题就那么几类。我把这几个问题的排查路径直接整理出来,你遇到时可以参照。
5.1 复盘数据和券商对不上
如果你发现 WorkBuddy 计算的当日盈亏和券商 App 显示的盈亏数字不一样,先别急着觉得自己脚本写错了。比较常见的差异来源有三个:
- 行情价格没有包含收盘后的最终定价,导致持仓市值计算偏小或偏大;
- 手续费在导入交易流水时缺失或者重复计算,导致净盈亏偏差;
- 分红送股导致的成本变动没有更新,持仓成本价比实际要老。
我的排查习惯是先看交易流水表和券商导出的原始文件是否一致,再看行情缓存里的收盘价是否等于当日最终收盘价。两者都没问题后,再检查成本价格计算逻辑。建议在配置里额外加一项“当日手续费汇总”的字段,让报告里直接能看到手续费总额,方便对账。
5.2 定时任务偶尔重复触发或漏跑
重复触发和漏跑是最让人头痛的问题。重复触发通常是因为上一个任务还没执行完,下一个定时点又来了,导致两个实例同时在跑。解决方法是给每个工作流加一个互斥锁,同一时刻只允许一个实例运行,任务结束时释放锁。WorkBuddy 里如果暂时没这个选项,就用文件锁来模拟:在任务启动时创建一个.lock文件,结束时删除,下一个任务启动前先检查.lock是否存在。
漏跑则多半是数据源在触发瞬间超时,导致任务失败退出。为了降低误判,我在每次任务失败后不直接删除任务,而是进入一个简单的重试队列:5 分钟后重跑一次。如果重试还失败就发告警,而不是反复尝试把任务打到彻底挂起。
5.3 导入交易记录时报错或识别异常
这一步最容易出问题的是编码和列名。很多券商导出的文件看起来是表格,但实际可能是带着复杂表头的文本文件。我建议导入前先做一个预处理:去掉表头之前的所有行、清理空白列、统一编码为 UTF-8。
如果导入后某些行的方向字段识别错误,多半是因为原始文件里用“买”“卖”这样的中文字符,而脚本里的判断条件只认“B”“S”。这种问题排查起来很浪费生命,所以我在标准表里固定用BUY和SELL两种枚举值,转换时统一做映射,任何原始文件中的方向表达都要先转换成这两种值。
5.4 账户安全与合规提醒
自动化和实盘数据打交道,安全这条线必须绷紧。我的做法是:
- API 令牌和账户信息绝对不写进代码里,而是放在本机环境变量或 WorkBuddy 的加密配置中;
- 日志和报告中不输出完整账户号、身份证号等敏感信息,流水只保留代码和名称;
- 推送的复盘报告里的敏感字段做脱敏展示,比如资金账户只显示后四位。
交易策略本身也要守住合规底线:自动化只做复盘分析和数据整理,不进行自动委托交易。实盘下单操作仍然由自己确认执行。这一点不是技术问题,而是风险控制问题——自动化工具越顺手,越要给自己留出足够的人工复核环节。
我个人在连续跑了几周自动复盘之后,最大的体会是:自动化的价值不在“帮你做决定”,而在“帮你把做过的事记录下来,并让它可回溯、可计算、可优化”。每天收盘后花五分钟看报告,配合手工记录中的主观思考部分,就能把复盘的习惯真正稳定下来。WorkBuddy 这个工具本身只是个载体,真正能让交易复盘“起飞”的,是你把数据流、触发规则和报告口径想清楚的这套设计思路。如果你正在安装阶段徘徊,不妨先从“每天拉一次自选股行情”这个小任务开始,跑顺后再一步步加指标、加推送、加周度总结。别看起步简单,能做到每天都自动出报告,本身就已经超过大多数坚持不了复盘的人了。