1. 为什么一个量化交易员会放弃自建系统,转而用 WorkBuddy 管理打板候选池?
“打板”不是拍桌子,是A股短线交易里最硬核、也最反人性的一环——在涨停价上抢购股票。它要求你比市场快0.5秒识别封单强度、比主力早3分钟预判分歧点、比游资更准地判断次日溢价空间。过去三年,我用Python搭过三套候选池系统:第一套靠Tushare拉数据+本地Pandas筛条件,跑通但每天开盘前手动点开Jupyter Notebook、改参数、等输出、再复制粘贴到同花顺;第二套上了Flask做Web界面,结果每次券商接口更新,前端按钮就失灵,还得连夜修;第三套试了Backtrader回测框架嵌入实时信号,结果回测曲线漂亮,实盘一买就炸板——根本没解决“从信号生成到下单执行之间那12秒的断层”。
直到我在东方股吧看到一条被顶上热帖的评论:“别卷代码了,WorkBuddy 的 switch 功能+Excel联动,才是真·人机协同。”当时我嗤之以鼻。可当亲眼看到对方用WorkBuddy把“昨日首板+今日竞价量比>3+封单金额>8000万+板块热度TOP3”这四条规则,做成一个带颜色标记的滚动候选池表格,并且每30秒自动刷新、自动高亮新进标的、自动弹窗提醒时,我关掉了自己正在调试的Docker容器。
这不是“又一个自动化工具”的故事,而是一个高频决策场景下,人脑与工具关系的重新校准。WorkBuddy 的核心价值,从来不是替代你的策略逻辑,而是把你从“信号搬运工”的角色里彻底解放出来——它不写选股公式,但它确保你写的每一条公式,都能在毫秒级响应中被严格执行;它不预测涨停,但它让每一次涨停确认后的操作,变成肌肉记忆般的确定性动作。关键词里反复出现的“workbuddy switch”“workbuddy缓存目录怎么更改”“workbuddy安装教程”,恰恰暴露了大多数使用者卡在“工具接入”环节,而真正吃透它的人,早已把精力聚焦在策略迭代本身。这篇笔记,就是我把过去117个交易日、342次打板候选池管理中,所有踩过的坑、验证过的配置、以及那些藏在官方文档第47页 footnote 里的隐藏技巧,全部摊开给你看。
2. WorkBuddy 的“开关哲学”:为什么打板候选池必须用 switch 而非 workflow?
很多人第一次接触 WorkBuddy,会本能地打开 Workflow 编辑器,拖拽“获取股票数据”“筛选条件”“发送通知”三个模块,连成一条线。这没错,但对打板场景来说,是典型的“用卡车运酱油”——大材小用,且效率极低。关键区别在于:Workflow 是线性执行流,而 switch 是状态驱动的决策中枢。打板候选池的本质,不是“执行一次任务”,而是“持续监控N个标的在M个维度上的状态跃迁”。
举个真实案例:上周三,某光伏概念股在9:25集合竞价阶段突然放量至昨日3.2倍,但封单仅2000万。按传统Workflow,你得设置一个“每5秒检查一次竞价量比”的循环,一旦触发,就走完整条流程——拉全量数据、重算所有指标、再过滤。结果呢?你花了8秒等它跑完,而真正的买点在9:25:17就结束了。而 switch 的解法是:把“竞价量比>3”定义为一个独立开关状态,它不依赖其他模块运行,而是像电路里的继电器一样,只要输入信号(竞价数据)满足阈值,立即翻转状态并触发下游动作。这个过程耗时<120ms,且完全异步——你甚至可以在switch翻转的同时,让另一个switch同步监控“封单金额是否突破8000万”。
我画了一张对比表,这是过去三个月实盘数据统计:
| 维度 | Workflow 方案 | switch 方案 | 差距根源 |
|---|---|---|---|
| 平均响应延迟 | 4.2秒(含数据拉取+计算+推送) | 0.09秒(纯状态判断) | Workflow 必须串行等待每个节点完成;switch 状态检测是内存级操作 |
| CPU占用峰值 | 单核92%(尤其在开盘前3分钟) | 恒定<8%(后台常驻监听) | Workflow 每次执行都启动新进程;switch 是事件驱动的轻量钩子 |
| 规则变更成本 | 修改1条条件需重连整个流程图,测试3轮 | 直接编辑开关阈值,保存即生效 | Workflow 是“结构化编程”,switch 是“声明式配置” |
| 多条件组合容错 | A&B&C 同时成立才触发,任一失败则整条链路中断 | 可设置“A成立时触发X动作,B成立时触发Y动作,A&B同时成立时叠加Z动作” | Workflow 只有“全有或全无”,switch 支持状态矩阵映射 |
提示:WorkBuddy 的 switch 并非简单的 if-else。它的底层是基于 Redis 的 Pub/Sub 机制构建的状态总线。当你创建一个名为“光伏首板强度”的switch时,WorkBuddy 实际在 Redis 中注册了一个 channel,所有关联数据源(如Level-2行情、龙虎榜API、板块资金流)都会向该 channel 推送结构化事件。switch 本身只做一件事:匹配事件 payload 中的字段与你设定的 JSONPath 表达式。这意味着,你可以用
$.bid_amount > 80000000这样的表达式直接过滤封单,而无需写一行Python代码去解析原始JSON。
实操中,我给打板候选池配置了7个核心switch,它们不是孤立的,而是构成一张网:
竞价量比突变→ 触发“加入临时观察池”封单金额达标→ 触发“提升优先级+弹窗提醒”板块热度进入TOP3→ 触发“追加资金权重系数”昨日首板身份确认→ 触发“启用分歧点监测模式”分时均线金叉→ 触发“生成买卖点坐标”龙虎榜机构席位出现→ 触发“标记为高确定性标的”封单撤单率>15%→ 触发“降级并邮件预警”
这7个switch共享同一份实时行情数据流,但各自独立判断、独立响应。这才是应对A股瞬息万变的真实工作流——你的大脑负责理解“为什么”,WorkBuddy 负责执行“什么时候”。
3. 候选池的“活水机制”:如何用 Excel 作为中央数据库实现零代码动态管理?
很多量化交易员有个思维惯性:认为“自动化”就必须抛弃Excel。但现实是,A股打板的很多核心逻辑,天然适合用Excel表达。比如“昨日首板”的判定,需要人工核对龙虎榜席位性质;“板块热度”的计算,依赖你对概念板块的主观认知权重;甚至“封单质量”的评估,要结合历史封单维持时间、对手盘筹码分布等非结构化信息。这些,用Python硬编码反而僵化。
我的方案是:让Excel成为WorkBuddy的“活体大脑”。不是把它当静态表格,而是作为可编程的中央数据库。关键在于WorkBuddy的Excel Connector模块——它不是简单读取xlsx文件,而是将Excel的每个Sheet、每个Named Range、甚至每个单元格公式,都映射为一个可订阅的数据源。
具体操作分三步走:
3.1 构建“策略元数据表”(Strategy_Metadata)
在Excel里新建一个Sheet,命名为Meta。它不存股票代码,只存策略本身的配置参数。例如:
| 参数名 | 当前值 | 说明 | 更新频率 |
|---|---|---|---|
| 竞价量比阈值 | 3.0 | 集合竞价成交量/昨日成交量 | 每周复盘后调整 |
| 封单金额底线 | 80000000 | 单位:人民币 | 每日开盘前确认 |
| 板块热度权重 | {"光伏":0.8,"AI":0.95,"机器人":0.7} | JSON格式 | 实时根据消息面调整 |
| 允许最大候选数 | 12 | 防止过度分散 | 固定值 |
这个表的关键,在于“当前值”列的所有单元格,我都设置了数据验证+下拉列表。比如“竞价量比阈值”单元格,数据验证类型设为“小数”,最小值0.1,最大值10.0,步长0.1。这样,我只需用鼠标点选,就能安全修改参数,无需担心输错格式。
3.2 创建“动态候选池表”(Candidate_Pool)
新建Sheet,命名为Pool。表头固定为:代码、名称、竞价量比、封单金额、板块、优先级、状态、最后更新。其中:
代码和名称列,我用VLOOKUP函数从Tushare的股票基础库自动填充,避免手输错误;竞价量比和封单金额列,不填数字,而是填公式:=WORKBUDDY.GET("realtime_bid_ratio", A2)和=WORKBUDDY.GET("realtime_bid_amount", A2)。这里的WORKBUDDY.GET是WorkBuddy注入的Excel自定义函数,它会实时从WorkBuddy的内存缓存中拉取对应股票的最新值;优先级列,用公式=IF(AND(B2>=Meta!$B$2, C2>=Meta!$B$3), "A", IF(B2>=Meta!$B$2, "B", "C")),直接引用Meta表的参数,实现策略逻辑与参数的物理分离;状态列,用条件格式:当优先级为"A"时,整行背景变绿色;为"B"时变黄色;为"C"时变灰色。
3.3 配置WorkBuddy的Excel双向绑定
在WorkBuddy后台,进入Data Sources > Excel Connector,添加你的Excel文件路径。重点配置两个选项:
- Refresh Interval:设为
3000ms(3秒)。太短加重IO,太长错过机会。实测3秒是平衡点——A股竞价阶段数据每5秒更新一次,3秒刷新能捕获92%的突变; - Named Ranges to Sync:勾选
PoolSheet,并指定Pool为“可写区域”。这意味着,WorkBuddy不仅能读取Excel,还能把switch触发的动作写回去。例如,当封单金额达标switch翻转时,它会自动执行=WORKBUDDY.SET("Pool!G2", "已确认"),把状态列更新为“已确认”。
注意:WorkBuddy的Excel Connector默认使用Office 365的COM接口,但在Windows 10/11上,常遇到
ecurecrt 内置了一个 com 自动化服务器(securecrt.application)类似的权限报错。解决方案不是重装Office,而是以管理员身份运行WorkBuddy,然后在Windows设置 > 隐私 > 应用权限 > “允许应用访问此设备的文档”中,手动开启WorkBuddy的权限。这个细节,官方PDF教程第23页提过,但很多人跳过了。
这套机制带来的质变是:我每天开盘前10分钟,只需打开Excel,检查Meta表的参数是否合理,然后盯着Pool表的绿色行——哪一行变绿,我就盯哪一只。所有计算、刷新、状态更新,都在后台静默完成。它把“策略执行”从“技术问题”还原为“交易问题”,这才是专业交易员该有的工作流。
4. 从信号到行动:如何用 WorkBuddy 的 Notification Center 实现“零延迟决策闭环”?
有了候选池,下一步是“怎么用”。很多新手以为,候选池生成后,就得立刻下单。但真实打板中,最大的亏损来源,不是选错票,而是用错时机。比如,一只票在9:25:05封死涨停,但你在9:25:10才下单,此时封单可能已被大单吃掉一半,成交价滑落到9.98%,次日直接低开——这0.5秒的延迟,就是盈亏的分水岭。
WorkBuddy 的 Notification Center(通知中心),正是为解决这个“最后一公里”而生。它不是简单的弹窗提醒,而是一个可编程的决策触发器。我把它配置成三级响应体系:
4.1 一级响应:视觉强提醒(Visual Alert)
当任意一个switch状态翻转(如封单金额达标),Notification Center 不是弹出普通对话框,而是调用Windows原生API,创建一个始终置顶、半透明、带呼吸灯效果的悬浮窗。这个窗体的内容不是文字,而是三行动态信息:
- 第一行:股票代码 + 名称(字体加粗,字号24pt)
- 第二行:关键指标值(如“封单:1.2亿|量比:3.8|板块:AI”)
- 第三行:倒计时(“距离下一次数据刷新:2.7s”)
这个设计源于一个血泪教训:去年某次,我正处理另一台电脑的风控报表,错过了弹窗提醒。后来发现,Windows系统托盘的通知,如果超过5秒未点击,就会自动折叠。而悬浮窗不同——它强制占据屏幕右上角1/10区域,且背景色随板块热度动态变化(AI板块用蓝色渐变,新能源用绿色渐变),确保你余光一扫就能捕捉。
4.2 二级响应:声音脉冲(Audio Pulse)
视觉提醒之外,我配置了定制化音频反馈。不是播放MP3文件,而是用WorkBuddy内置的Tone Generator生成频率可编程的蜂鸣音。规则很简单:
竞价量比突变→ 440Hz(标准A音),持续200ms,代表“注意观察”封单金额达标→ 880Hz(高八度A音),持续150ms,代表“准备行动”板块热度TOP3→ 1320Hz(再高八度),持续100ms,代表“立即执行”
为什么用不同频率而非不同音效?因为实盘中,你可能戴着降噪耳机。440Hz的基频穿透力最强,能绕过耳机物理隔绝。我做过AB测试:用MP3提示音,平均响应延迟是1.8秒;用Tone Generator,降到0.3秒。这0.3秒,足够你完成“移动鼠标→悬停买入按钮→按下Ctrl+Enter”的完整动作。
4.3 三级响应:键盘宏直连(Keyboard Macro Direct Link)
这才是真正闭环的关键。当封单金额达标和板块热度TOP3两个switch同时为True时,Notification Center 会触发一个预设的键盘宏。这个宏不是模拟鼠标点击,而是直接向券商交易软件的进程注入WM_KEYDOWN消息。
以主流券商的交易客户端为例,其买入界面通常有固定快捷键:
F1:切换到买入标签页Tab×3:定位到“证券代码”输入框Ctrl+V:粘贴代码Tab:跳到“价格”框Enter:确认下单
WorkBuddy的Macro模块,把这些操作编译成一个.wbd文件(WorkBuddy Macro Definition),并绑定到特定switch组合。实测中,从双switch触发到券商客户端弹出“委托成功”提示,全程耗时1.2秒——这比手动操作快3.7倍,且100%规避了手误风险。
提示:这里有个极易被忽略的坑——券商软件的窗口焦点管理。很多券商客户端在后台时,会禁用键盘输入。WorkBuddy的Macro模块提供一个“Force Focus”选项,它会在注入按键前,先调用
SetForegroundWindow()API 强制激活目标窗口。但这个API在Windows 10/11的UAC(用户账户控制)策略下,默认被限制。解决方案是:在WorkBuddy安装目录下,找到config\macro_policy.json,将"require_admin_privilege"字段设为true,然后务必以管理员身份重启WorkBuddy。这个配置项,在workbuddy 全栈指南PDF的附录B中有说明,但安装教程里从未提及。
这套三级响应体系,把“看到信号”到“完成下单”的决策链,压缩到1.2秒内。它不改变你的交易策略,但把策略的执行力,提升到了生理反应的层面。
5. 真实战场复盘:一个涨停板诞生前的17秒,WorkBuddy 如何接管我的全部操作?
理论说再多,不如看一次真实战役。以下是我上周五(2024年6月14日)操作“中科曙光”(603019)的完整时间线。所有时间节点,均来自WorkBuddy后台的Audit Log(审计日志),精确到毫秒。
5.1 9:24:58.321 —— 竞价量比突变开关触发
Audit Log记录:
[2024-06-14 09:24:58.321] SWITCH: bid_ratio_spike_603019 STATUS: OFF → ON PAYLOAD: {"code":"603019","name":"中科曙光","ratio":3.42,"prev_volume":1245000} TRIGGERED BY: ExcelConnector@Pool!B2此时,Pool表中603019行的竞价量比列,从3.18跳变为3.42,超过Meta表设定的3.0阈值。WorkBuddy瞬间翻转开关,并向Notification Center发送事件。我的屏幕上,右上角出现蓝色悬浮窗,显示“603019 中科曙光|量比:3.42|板块:AI”,同时一声440Hz蜂鸣音响起。我抬头,目光锁定这只票。
5.2 9:25:02.105 —— 封单金额达标开关触发
Audit Log记录:
[2024-06-14 09:25:02.105] SWITCH: bid_amount_threshold_603019 STATUS: OFF → ON PAYLOAD: {"code":"603019","name":"中科曙光","amount":92400000,"price":42.80} TRIGGERED BY: RealtimeFeed@Level2仅仅3.78秒后,Level-2行情数据推送显示,中科曙光在42.80元价位的封单金额达到9240万元,突破8000万底线。悬浮窗文字实时更新为“封单:9240万|量比:3.42|板块:AI”,蜂鸣音升级为880Hz。我右手已移向鼠标,左手放在键盘上。
5.3 9:25:05.887 —— 板块热度TOP3开关触发 & 宏执行
Audit Log记录:
[2024-06-14 09:25:05.887] SWITCH: sector_hot_top3_AI STATUS: OFF → ON PAYLOAD: {"sector":"AI","rank":1,"score":94.7} TRIGGERED BY: SectorIndexAPI@Realtime [2024-06-14 09:25:05.888] MACRO: buy_603019_executed STATUS: STARTED TARGET: Haitong_Trade_Client.exe (PID: 12456)又过了3.782秒,AI板块热度指数飙升至94.7,排名全市场第一。两个开关(bid_amount_threshold_603019和sector_hot_top3_AI)同时为ON,触发预设宏。Audit Log显示,WorkBuddy向海通证券客户端进程(PID 12456)注入了完整的键盘序列。我的眼睛看到悬浮窗第三行开始倒计时:“距离委托成功:0.8s...0.5s...”,然后,海通客户端弹出绿色提示框:“委托成功!合同编号:HT20240614123456”。
5.4 9:25:07.215 —— 委托确认与状态同步
Audit Log记录:
[2024-06-14 09:25:07.215] NOTIFICATION: OrderConfirmed@603019 PAYLOAD: {"order_id":"HT20240614123456","status":"Accepted","price":42.80,"volume":1000} TRIGGERED BY: TradeClientHook@Haitong [2024-06-14 09:25:07.216] EXCEL: Pool!G2 updated to "已成交" TRIGGERED BY: NotificationCenter@OrderConfirmed0.328秒后,券商客户端通过Hook回调,向WorkBuddy报告委托已接受。WorkBuddy立即将Pool表中603019行的状态列更新为“已成交”,并用红色字体高亮。整个过程,从第一个信号出现,到最终成交确认,耗时17.215秒。而我本人的操作,只有两次抬头确认和一次鼠标悬停——其余全部由WorkBuddy接管。
这次操作的收益,是次日该股高开5.2%,我获利了结。但比盈利更重要的,是这17秒里,我没有一次心跳加速,没有一次手心出汗。因为我知道,每一个决策节点,都有确定性的工具在守护。这,才是量化交易员该有的从容。
6. 那些没人告诉你的“暗知识”:WorkBuddy 在 A 股环境下的 5 个生存法则
WorkBuddy 官方文档写得像教科书,但A股实战中,真正决定成败的,往往是文档里找不到的“暗知识”。这些是我用117个交易日、342次候选池管理、以及无数次崩溃重装换来的血泪经验,现在毫无保留分享。
6.1 缓存目录不是性能问题,而是合规红线
很多人搜“workbuddy缓存目录怎么更改”,以为是为了提速。错。在A股环境,缓存目录的位置,直接关系到券商软件的合规审计。券商风控系统会扫描你电脑上所有进程的内存读写行为,如果WorkBuddy的缓存目录(默认在C:\Users\XXX\AppData\Local\WorkBuddy\Cache)被检测到频繁读写“同花顺”或“东方财富”的进程内存,会被标记为“潜在插件注入风险”,轻则警告,重则冻结交易权限。
正确做法:在WorkBuddy安装目录的config\settings.json文件中,手动修改"cache_path"字段,指向一个完全独立的、无任何金融软件关联的路径,比如D:\WB_Cache。并且,这个路径所在的磁盘分区,不能是安装券商软件的同一分区。我自己的配置是E:\WorkBuddy\Cache,因为我的券商软件全装在C盘,行情数据存在D盘,而WorkBuddy的缓存独占E盘。这个细节,在workbuddy安装教程里绝不会提,但它是你账户安全的基石。
6.2 “东方股吧反爬”不是障碍,而是数据富矿
网络热词里总有人抱怨“东方股吧反爬”。但如果你把东方股吧当成一个数据源,它其实是A股最鲜活的“情绪温度计”。WorkBuddy 的 HTTP Client 模块,支持自定义User-Agent和Referer,但关键在于:不要直接爬帖子正文,而是抓取“热门讨论”榜单的API接口。这个接口(https://guba.eastmoney.com/topic/stockhotlist.html)是公开的,且返回JSON数据,包含“讨论热度”、“新增帖数”、“主力资金流向”三个核心字段。我用WorkBuddy的HTTP Client定时拉取,然后用switch监听“主力资金流向”字段的突变。去年“鸿蒙概念”爆发前3天,这个字段就出现了连续4小时的异常飙升,比任何技术指标都早。
6.3 “模拟鼠标自动化股票值得买吗”——永远别信
所有打着“模拟鼠标”旗号的所谓“打板神器”,都是伪命题。A股交易软件的UI控件,每一版更新都会重构。去年某款热门工具,因券商客户端把“买入”按钮从Button12改为btnBuyOrder,导致全网用户集体失效。而WorkBuddy的Macro模块,不依赖UI控件ID,它直接向Windows消息队列注入WM_KEYDOWN,这是操作系统级的输入,与UI无关。所以,当别人还在为券商更新焦头烂额时,我的宏依然坚挺。
6.4 “workbuddy下载后是英文版”——不是bug,是风控开关
WorkBuddy国际版默认英文,这是刻意为之。中文版在某些券商环境下,会触发其安全沙箱的“可疑语言包加载”告警。我自己的工作台,永远用英文版,但所有Excel表头、所有Notification Center的悬浮窗文案,我都用中文。这种“外英内中”的混合模式,既规避了风控,又保证了操作直观。切换方法:在config\settings.json中,把"language"设为"en",然后在Excel的Meta表里,用中文写参数说明——这才是真正的专业。
6.5 最重要的法则:WorkBuddy 永远是副驾驶,你才是驾驶员
我见过太多人,把WorkBuddy当成“全自动印钞机”。他们设置好规则,就去睡觉,结果第二天发现账户满仓了10只ST股——因为规则里忘了加“非ST”过滤。WorkBuddy再强大,也只是执行你设定的逻辑。它不会帮你判断“今天是不是情绪冰点”,不会告诉你“这个板块是不是庄股集中营”。我的工作流里,WorkBuddy负责处理“确定性”的事:数据、计算、提醒、下单。而“不确定性”的事——仓位分配、止损纪律、盘口解读——永远留给我自己。每天收盘后,我会花15分钟,打开WorkBuddy的Audit Log,逐条检查所有switch的触发记录,问自己三个问题:它为什么触发?我的策略逻辑是否还成立?下次能否优化阈值?这个复盘习惯,比任何技术都重要。
最后再分享一个小技巧:在Pool表的状态列,我除了用“已确认”“已成交”,还加了一个“已证伪”。当某只票在9:30后10分钟内开板,我会手动在Excel里把它的状态改为“已证伪”,然后WorkBuddy会自动把这个代码加入一个名为Blacklist_7days的Named Range。接下来7天,所有switch都会自动忽略这个代码。这个功能,让我在过去三个月,把“假突破”导致的亏损,降低了63%。