通达信量化 · 选股 / 监控 / 推送 全套工作流
用 WorkBuddy + 通达信 MCP(tdx-connector)把「选股 → 监控 → 推送企微」全自动化。覆盖 5 套策略,已实盘压测、含大量避坑经验。
0. 环境依赖(必读)
- 连接
tdx-connector(通达信 MCP),工具前缀mcp__tdx-connector__,提供tdx_screener/tdx_quotes/tdx_kline/tdx_lookup_stock。 - 选股:
tdx_screener(自然语言条件,pageSize最大 200 可一次取全量)。 - 行情:
tdx_quotes(hasCalcInfo="1"返回主力净流入 InOut、量比 LB、换手 HSL 等)。 - K线:
tdx_kline(period="4"日线,wantNum="30")。 - ETF 市场码陷阱:所有
5xxxxxETF 在 tdx 里是 沪市 setcode=1,1xxxxx深市 setcode=0;板块指数881xxx查不到,监控名单里直接剔除,否则脚本会因指数不存在而假报错。 - 推送企微:连接
wecom-cli,工作区放wecom_push.sh+wecom_target.conf(group=群名或user私聊)。群不可达时脚本自动回退私聊。 - 连接器被禁用自查:若
tdx-connector明明连了却 disconnected,先查~/.workbuddy/connectors/<id>/mcp.json里是否有connector:tdx-connector.disabled=true,以及connector-states.v3.json的 enabled 列表是否漏了它。改disabled=false并加回 enabled 列表,重启 WorkBuddy 生效。
1. 五大策略总览
| 策略 | 触发时刻 | 数据口径 | 推送条件 |
|---|---|---|---|
| 开盘竞价突破 | 09:26(仅一次) | 9:15–9:25 竞价 | 高开+创20日新高+量比>2+非ST,且竞价换手达标 |
| 盘中因子监控 | 10:25 / 11:25 / 14:15 | 实时 | 因子池 A 新票(当日去重) |
| 持仓恶化监控 | 09:50 / 13:20 | 实时+30日K线 | 紧急 / 中度 恶化信号 |
| 尾盘双类潜力 | 14:25(仅一次) | 14:25 快照 | A突破 + B吸筹,各取前 10 |
| 午间看板 | 12:00 | 全量三池 | 每日概览(HTML) |
> 每天固定 8 次触发、零白启动。收盘后(15:00 后)无调度点,脚本另有交易时段守卫双保险。
2. 标准三池(选股口径)
- A 因子池(盘中主推):
MACD金叉 且 5日线上穿20日 且 主力净流入—— 资金+技术共振。 - B 量能异动:
量比大于3 且 涨幅大于5%。 - C 趋势突破:
创20日新高 且 涨幅大于5%(不要只用创20日新高,否则 400+ 只刷屏)。
> 共振 B∩C 已废弃:C 本身要求涨幅>5%,与「不追高」的过滤条件冲突,实战入选为空。
3. 各策略脚本与用法
3.1 开盘竞价突破 gen_openbreak.py
- 主池:
高开 且 创20日新高 且 量比大于2 且 非ST;剔除一字板/涨停、ST、高开>8%。 - 竞价换手过滤(关键):agent 对候选逐个拉
tdx_quotes取OpenAmo/Open/LTGB,竞价换手率 =OpenAmo/(Open×LTGB×1e4)×100%;要求 ≥max(0.5, 高开幅度/10),剔除虚高开盘/跳水票(数据缺失保守剔除)。 - 仅 09:25–09:35 窗口执行(9:26 触发+容错),9:35 后静默放弃当天不补推;当日标记
openbreak_done_YYYYMMDD.txt。
3.2 盘中因子监控 gen_intraday_push.py
- agent 拉 A 池 → 存
screener_data.json(字段 code/name/price/chg/mf)→ 跑脚本。 - 脚本自动:剔除 ST/涨停/涨幅>5%,按
intraday_state.json(按日期自动重置)剔除当日已推票——同一只票当天只推一次。 - 无新票静默不发;推送成功后再跑
--commit落状态。
3.3 持仓恶化监控 gen_riskwatch.py
- 读
watchlist.txt(每行code setcode,#注释),对每只拉quotes_<code>.txt+kline_<code>.txt。 - 8 类信号:单日重挫≥5% / 跌破20日线 / 均线空头(MA5<MA20) / 主力出逃(InOut/Amount<0) / 跌破开盘价 / 创当日新低 / 高位放量 / 连续缩量。
- 分级:紧急(重挫≥5% 或 破线+出逃 或 信号≥3)、中度(含出逃未达紧急)、轻微(仅破开盘/新低,静默不推)。
- 去重:按个股严重度,仅「新出现 / 升级(轻微→中度→紧急)」时推,避免刷屏;
RISKWATCH_NODEDUP=1可关。
3.4 尾盘双类潜力 gen_tailwatch.py
- 主池:
涨幅0.5%-5% 且 主力净流入 且 量比>1 且 非ST;精筛硬门槛:主力净比InOut/Amount≥1%、非ST、数据完整。 - A·尾盘半小时突破:距日高回撤≤2.5%,评分=净比×3+贴高+量比+换手+涨幅舒适区。
- B·尾盘吸筹·次日高开:涨幅≤4%(吸筹压价)+ 位置度=(现价-日内最低)/(日内最高-日内最低)≥0.5(收在区间上部),评分=净比×3+位置度×5+(4-涨幅)×2+量比温和+换手;B 自动排除已入 A 的票(A 优先不重复)。
- B 类阈值初设 3.5%/0.6 实测恒空,调为 4%/0.5(用真实数据校准,别拍脑袋)。
- 两类各取前 10 合并推送;某类无则「暂无」;两空推空池提示。窗口 14:20–14:30 +
tailwatch_done_YYYYMMDD.txt。
4. 企业微信推送 wecom_push.sh
bash wecom_push.sh "<标题>" "<正文>"
- 正文支持
\n;中文/emoji 经文件传递,规避 Windows 环境变量编码问题。 - 目标由
wecom_target.conf首行决定:group=股票量化预警机器人或user私聊;群不在最近会话时自动回退私聊并告警,保证不漏报。 - agent 调用链:先发 WorkBuddy 消息 → 再
bash wecom_push.sh转发 → 确认success:true后--commit落状态。
5. 调度 rrule 实战(重点避坑)
- ❌ 不支持
MINUTELY;FREQ=HOURLY;BYHOUR=9下 BYHOUR 不生效——开盘突破实测每小时都触发(这就是反复发、烧积分的根源)。 - ❌
HOURLY;BYMINUTE=5,10,...,55多值只取第一个(实际每小时一次),且每小时都白启动耗基础 token。 - ✅ 精确时刻用
FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;BYHOUR=X;BYMINUTE=Y—— 已用实验自动化 16:33 准点触发验证,每天固定 N 次、零白启动。每个时刻单独建一个 WEEKLY 自动化(单值 BYHOUR/BYMINUTE 确定性最高)。 - 脚本内置交易时段守卫(
date +%u周一至五 +%H%M09:30–11:30/13:00–14:55),即使调度异常误触发也会立即静默,不拉数据不推送。
6. 积分节约经验
- agent 每次启动都耗基础 token,静默轮也是成本——别用 11 个轮询拼分钟级(实测每天 71 次 agent 启动)。
- 改成 WEEKLY 精确时刻后:71 次/天 → 8 次/天,约省 90%。
- 恶化监控全量扫描(43 只×2 接口=86 次行情调用/轮)是最大头;后续可上「两级过滤」(先轻量筛可疑票再精查)。
7. 红线与免责
- 只筛选 / 监控 / 生成看板,绝不自动下单。
- 消息末尾固定附:
⚠️ 量化筛选仅供参考,不构成投资建议,据此操作风险自担。