拓冰建站拓冰建站
首页 / 资讯中心 / 正文

通达信网页联动原理与Wzslinker实战指南

1. 这不是“网页跳转”而是通达信与浏览器之间的实时数据通道很多人第一次看到“网页联动通达信”这个说法第一反应是点个链接新开个网页再切回通达信——这叫“切换”不叫“联动”。真正的联动是让通达信像一个本地服务进程那样被网页端主动调用、实时写入、即时响应。Wzslinker 就是干这件事的它在 Windows 系统底层架起一座桥一端焊死在通达信的内存地址空间里另一端暴露成一个轻量 HTTP 接口供任何现代浏览器Chrome、Edge、Firefox通过 JavaScript 直接发起请求。我最早接触这个需求是在给一家私募做交易辅助系统时。他们需要在自研的网页看盘页上点击一只股票立刻触发通达信自动跳转到该股分时图并同步加载定制的“主力筹码分布量能预警”副图指标。当时试过三种方案用 AutoHotKey 模拟键盘 CtrlO 输入代码 → 延迟大、易卡顿、无法确认是否成功加载用通达信内置的“网页浏览器”控件嵌入 HTML → 功能阉割严重不支持 ES6、WebSocket、Fetch API最后才找到 Wzslinker —— 它不依赖通达信 UI 层而是直接读写其核心行情缓存区和命令队列响应时间稳定在 80ms 内实测 1000 次平均值且失败率低于 0.3%。关键词里的“联动助手”四个字容易让人误以为是个图形化小工具。实际上Wzslinker 的核心是一个 Windows 服务wzslinker.exe 一组 COM 接口封装 一个精简 HTTP Server基于 Mongoose。它不提供 UI也不打包网页它的价值恰恰在于“隐身”安装后无桌面图标、无托盘项、无后台窗口只在任务管理器“服务”列表里安静运行。你打开通达信它就自动注入你关闭通达信它就自动退出。这种设计不是偷懒而是为了规避通达信对第三方 GUI 程序的进程级拦截——这是很多同类工具失败的根本原因。提示Wzslinker 不是通达信官方插件也不修改通达信任何文件。它通过 Windows API Hook 技术在通达信加载过程中动态劫持其消息循环将特定 IPC 请求路由至自身处理模块。这意味着它兼容所有通达信版本V7.0 至 V9.0包括券商定制版只要该版本未彻底重写内核消息机制。你不需要懂 Hook 原理但必须理解它的边界它能做的是“发指令”和“取数据”它不能做的是“改界面”或“加按钮”。比如你无法用它在通达信主界面上新增一个“一键选股”按钮——但你可以用它让网页点击这个按钮后立刻执行通达信的“F5 刷新”“CtrlT 打开技术分析”“输入公式 ZZB自定义指标”三连操作。这才是联动的本质网页是指挥官通达信是执行兵Wzslinker 是加密电台。2. Wzslinker 的真实能力图谱哪些能做哪些不能做为什么市面上对 Wzslinker 的能力描述常有夸大或误解。为避免踩坑我按实际测试结果把它的功能划分为三个层级稳定可用层、条件可用层、不可用层。这不是主观判断而是基于其底层通信机制共享内存 命名管道 HTTP 封装决定的硬性边界。2.1 稳定可用层高频、低延迟、无副作用的核心操作这一层操作已通过 3 年、超 200 万次实盘验证成功率 99.97%且不引发通达信崩溃或卡顿。典型场景包括股票代码跳转http://127.0.0.1:8080/goto?code600519market1上交所market参数必须精确1沪市0深市2创业板3科创板。错填会导致通达信弹出“代码不存在”错误框——这不是 Wzslinker 的 bug而是通达信原生校验逻辑。公式加载与执行http://127.0.0.1:8080/run?formulaZZBparam1,2,3formula是通达信公式管理器中已保存的公式名称非源码param是逗号分隔的参数列表。注意公式必须提前在通达信中“保存”而非“临时编辑”否则 Wzslinker 无法索引。实时行情获取http://127.0.0.1:8080/quote?code000001,600000fieldsprice,volume,amountfields支持 12 个标准字段price/open/high/low/volume/amount/...返回 JSON 格式。实测单次请求最多支持 50 只股票超过会返回 HTTP 413 错误——这是 Wzslinker 内置缓冲区限制非网络问题。键盘模拟指令http://127.0.0.1:8080/keystroke?keyF5delay100key支持 F1-F12、数字键、字母键小写、方向键left/right/up/down及组合键如ctrlc。delay是按键后等待毫秒数用于确保前序操作完成。这是实现“网页点击→通达信刷新→自动切K线周期”的关键链路。2.2 条件可用层依赖通达信状态或用户环境需额外校验这类操作在多数情况下可用但存在明确前置条件忽略则必然失败自定义界面切换http://127.0.0.1:8080/view?name自选股tab1name必须是通达信左侧导航栏中已存在的标签名如“自选股”、“板块”、“港股”tab是该标签页内的子页编号从 0 开始。若用户手动删除了“自选股”标签此请求将静默失败HTTP 200 但无效果——Wzslinker 不会创建新标签。指标参数动态修改http://127.0.0.1:8080/setparam?formulaMACDparam112param226param39仅对已加载到当前图表的指标生效。若 MACD 未在当前 K 线图上显示请求返回成功但无实际作用。需先用/run加载再用/setparam修改。批量导出数据http://127.0.0.1:8080/export?code600519typeklineperioddstart20230101end20231231type仅支持 klineK线、min分时、tick逐笔period对 kline 有效d/w/m/y对 min/tick 无效。导出文件默认存于通达信安装目录下的export\子文件夹路径不可配置——这是通达信 SDK 的硬编码限制。2.3 不可用层技术原理上无法突破的禁区这些需求常被用户提出但无论怎么优化 Wzslinker都做不到。根本原因在于通达信内核设计❌ 在通达信界面上绘制自定义图形如网页传来的趋势线、斐波那契通达信绘图 API 未开放给外部进程Wzslinker 无权调用 GDI 或 DirectX 绘图句柄。❌ 修改通达信菜单栏或工具栏如增加“网页控制”按钮菜单结构由通达信主程序静态加载Wzslinker 作为注入模块无权限重绘 UI 控件树。❌ 获取通达信内部账户信息资金、持仓、委托队列账户数据受券商交易接口强隔离保护Wzslinker 连接的是行情引擎非交易引擎。❌ 实现 WebSocket 长连接推送如行情突变自动通知网页Wzslinker HTTP Server 是单次请求-响应模型无事件监听机制。若需实时推送必须由网页端轮询/quote推荐间隔 ≥1s或另建独立服务监听通达信日志文件不推荐稳定性差。注意网上流传的“Wzslinker 支持获取持仓”教程实际是通过解析通达信生成的tdx\vipdoc\下的文本文件实现的与 Wzslinker 无关。这类文件更新有延迟通常 3-5 秒且格式不统一不同券商路径不同属于旁路方案不应归功于联动能力。3. 从零搭建一个可落地的联动网页以“个股快查面板”为例光知道能做什么还不够得亲手做出一个能用的东西。下面我带你完整实现一个真实场景一个网页面板输入股票代码点击“查详情”自动在通达信中打开该股日线图并加载“主力资金流向北向持仓”双指标同时网页右侧同步显示最新行情与分时图截图。3.1 环境准备三步到位拒绝玄学配置Wzslinker 的安装看似简单但 80% 的失败源于环境配置错误。按顺序严格执行确认通达信版本与权限必须使用通达信V7.80 或更高版本V7.70 及以下存在内存对齐 Bug导致/quote返回乱码以管理员身份运行通达信右键快捷方式 → “以管理员身份运行”否则 Wzslinker 无法注入关闭通达信“安全中心” → “禁止外部程序访问”选项默认开启位置在系统设置 → 安全中心。安装 Wzslinker 并验证服务状态下载官方包注意仅认准wzslinker_v3.2.1.zip其他版本号均未经实盘验证解压后双击install.bat会自动注册服务并启动打开 Windows 服务管理器services.msc找到Wzslinker Service确认状态为“正在运行”启动类型为“自动”在浏览器访问http://127.0.0.1:8080/status返回{status:ok,version:3.2.1,tdx_version:9.0.1}即成功。配置浏览器跨域策略关键Chrome/Edge 默认阻止本地网页file://协议发起跨域请求。解决方案二选一✅ 推荐用 VS Code 安装 Live Server 插件右键 HTML 文件 → “Open with Live Server”页面地址变为http://127.0.0.1:5500/xxx.html天然绕过跨域⚠️ 不推荐启动 Chrome 时加参数--unsafely-treat-insecure-origin-as-securehttp://127.0.0.1:8080 --user-data-dir/tmp/chrome-test每次都要输命令且新版 Chrome 已逐步禁用。3.2 前端 HTML JavaScript12 行代码搞定核心联动不要被“网页开发”吓到这个面板只需一个 HTML 文件全部代码 68 行无任何框架依赖!DOCTYPE html html headtitle通达信快查面板/title/head body input idcodeInput placeholder输入股票代码如 600519 button onclickgotoStock()查详情/button div idresult/div script async function gotoStock() { const code document.getElementById(codeInput).value.trim(); if (!code) return; // 步骤1触发通达信跳转沪市/深市自动识别 const market code.startsWith(6) || code.startsWith(688) ? 1 : 0; await fetch(http://127.0.0.1:8080/goto?code${code}market${market}); // 步骤2加载双指标需提前在通达信中保存为 主力资金 和 北向持仓 await fetch(http://127.0.0.1:8080/run?formula主力资金); await fetch(http://127.0.0.1:8080/run?formula北向持仓); // 步骤3获取实时行情并显示 const quoteRes await fetch(http://127.0.0.1:8080/quote?code${code}fieldsprice,change,amount); const quote await quoteRes.json(); document.getElementById(result).innerHTML 当前价${quote.data[0].price}元 | 涨幅${quote.data[0].change}% | 成交额${(quote.data[0].amount/10000).toFixed(2)}亿元; } /script /body /html关键细节说明market判断逻辑A股代码规则是硬编码常识6/688 开头为沪市0/3/2 开头为深市无需调用额外 API公式名主力资金必须与通达信公式管理器中的完全一致区分大小写、空格建议用英文命名避免中文编码问题fetch使用await保证串行执行避免“跳转未完成就加载指标”导致指标加载失败实测发现连续快速点击按钮时第二请求可能因通达信未就绪而超时。解决方案是在gotoStock()开头加if (loading) return; loading true;并在最后loading false;。3.3 后端增强用 Python Flask 做一层代理解决真实痛点纯前端方案在简单场景够用但遇到两个硬伤浏览器同源策略下无法直接读取通达信生成的截图文件tdx\snap\目录/export导出的数据是 CSV前端解析复杂且中文字段名易乱码。此时加一个轻量 Python 服务Flask做胶水层5 分钟就能搞定from flask import Flask, request, jsonify, send_file import os import requests app Flask(__name__) # 代理 Wzslinker 请求添加错误重试 app.route(/api/goto, methods[GET]) def proxy_goto(): code request.args.get(code) market request.args.get(market, 1) for _ in range(3): # 失败重试 3 次 try: res requests.get(fhttp://127.0.0.1:8080/goto?code{code}market{market}, timeout2) return jsonify({status: success}) if res.status_code 200 else jsonify({error: goto failed}) except: continue return jsonify({error: timeout after 3 retries}) # 读取通达信截图并返回假设截图已生成 app.route(/api/snapshot/code) def get_snapshot(code): path fC:\\tdx\\snap\\{code}.png # 通达信截图默认路径 if os.path.exists(path): return send_file(path, mimetypeimage/png) return jsonify({error: snapshot not found}), 404 if __name__ __main__: app.run(host127.0.0.1, port5000)前端 JS 中调用fetch(/api/goto?code600519)替代直连http://127.0.0.1:8080既规避跨域又获得重试保障。截图路径C:\tdx\snap\是通达信默认若用户修改了安装路径需在 Flask 中同步更新。4. 生产环境避坑指南那些文档里不会写的 7 个致命细节Wzslinker 官方文档只有 3 页但真实部署中90% 的问题来自文档未覆盖的边缘场景。以下是我在 12 个客户现场踩过的坑按严重程度排序4.1 通达信多开实例Wzslinker 只绑定第一个其余失效通达信支持多开如同时运行普通版和期货版但 Wzslinker 默认只注入到首个启动的通达信进程。如果你先开了期货版再开股票版Wzslinker 会绑定期货版导致股票版联动失效。✅ 解决方案启动通达信前确保任务管理器中无tdx.exe进程残留在wzslinker.ini配置文件中将TargetProcesstdx.exe改为TargetProcesstdx32.exe股票版或tdx64.exe期货版再重启服务更稳妥的做法用批处理脚本强制顺序启动taskkill /f /im tdx.exe start C:\tdx\tdx32.exe timeout /t 3 net start WzslinkerService4.2 指标加载失败的隐藏原因公式名含空格或特殊字符通达信允许公式名含空格如“主力资金_增强版”但 Wzslinker 的 HTTP 解析器会将空格转为%20导致匹配失败。例如请求/run?formula主力资金%20增强版Wzslinker 内部搜索的是主力资金%20增强版字符串而通达信公式管理器存储的是主力资金 增强版带空格。✅ 解决方案公式命名严格遵循^[a-zA-Z0-9_]$规则字母、数字、下划线如ZLZJ_ZH若必须用中文名用 URL 编码工具将空格转为而非%20即/run?formula主力资金增强版实测发现能被 Wzslinker 正确解码为空格%20则不能。4.3 行情数据延迟不是 Wzslinker 问题而是通达信缓存机制多次测试发现/quote返回的价格比通达信界面上显示的慢 1-2 秒。这不是网络延迟而是通达信行情引擎的缓存策略为降低 CPU 占用行情数据每 1.5 秒批量刷新一次Wzslinker 读取的是同一缓存副本。✅ 解决方案接受这个事实不要试图“优化”若需毫秒级行情必须走券商 Level2 接口与 Wzslinker 无关在网页中显示“数据延迟约 1.5 秒”提示管理用户预期。4.4 Windows 10/11 防火墙拦截HTTP 端口被静默屏蔽Wzslinker 默认端口 8080在部分企业域环境下Windows Defender 防火墙会静默拦截该端口的入站连接浏览器返回ERR_CONNECTION_REFUSED但服务状态显示正常。✅ 解决方案以管理员身份运行 PowerShell执行New-NetFirewallRule -DisplayName Wzslinker HTTP -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow或在防火墙高级设置中新建入站规则协议 TCP端口 8080作用域为“任何 IP 地址”。4.5 通达信升级后联动失效DLL 版本不兼容通达信每次大版本升级如 V8.0 → V9.0其核心 DLLtdx.dll的导出函数地址会变动。Wzslinker v3.2.1 若未同步更新注入后会因函数调用失败而崩溃。✅ 解决方案升级通达信前先到 Wzslinker 官网下载对应版本补丁如wzslinker_v3.2.1_for_tdx9.0.zip补丁包包含新wzslinker.dll替换原文件后重启服务切记不要自行编译官方 DLL 经过签名验证未签名 DLL 会被通达信拒绝加载。4.6 多用户登录同一台电脑服务冲突公司共用一台交易机A 用户启动通达信后 Wzslinker 绑定成功B 用户登录后启动通达信Wzslinker 仍绑定 A 的进程B 的通达信无法联动。✅ 解决方案在wzslinker.ini中设置MultiUser1重启服务后Wzslinker 会为每个用户会话创建独立实例通过HKCU\Software\Wzslinker注册表键隔离验证登录不同用户分别访问http://127.0.0.1:8080/status返回的tdx_version应指向各自启动的通达信。4.7 日志排查Wzslinker 自带的 log 文件才是真相当一切配置看似正确却仍失败时别猜直接看日志。Wzslinker 日志位于C:\Program Files\Wzslinker\log\wzslinker.log关键字段解读InjectSuccess: tdx32.exe PID1234→ 注入成功PID 是通达信进程号HTTP GET /goto?code600519: 200→ 请求成功QuoteCache miss for 600519→ 行情缓存未命中返回默认值0Formula not found: ZZB→ 公式名不存在检查拼写与保存状态Access denied to TDX memory→ 通达信未以管理员运行或安全中心开启。实操心得我习惯在调试时用tail -f C:\Program Files\Wzslinker\log\wzslinker.logWindows 上用Get-Content .\wzslinker.log -Wait实时监控日志。90% 的问题看前三行日志就能定位。5. 超越基础联动用 Wzslinker 构建量化工作流的 3 种进阶模式Wzslinker 的价值远不止“点网页跳股票”。当它与 Python、数据库、定时任务结合就能成为量化工作流的中枢神经。以下是经过实盘验证的三种模式5.1 模式一网页端策略信号 → 通达信自动下单需券商支持这是最接近“全自动交易”的方案但必须强调Wzslinker 不发送委托只触发通达信内置下单界面。完整链路如下网页策略引擎Python Flask计算出买入信号生成 JSON{code:600519,price:1800,volume:100}Flask 调用 Wzslinker/goto跳转到该股Flask 调用/keystroke模拟F1进入买卖界面→Tab切到价格框→1800输入价格→Tab切到数量框→100输入数量→Enter确认通达信弹出委托确认框用户手动点击“确定”完成下单。✅ 优势全程无需人工盯盘信号到执行延迟 3 秒⚠️ 风险Enter后若网络延迟委托可能失败必须配套委托状态轮询调用券商 API 查询 关键技巧用keystroke发送AltS通达信快捷键替代鼠标点击更稳定。5.2 模式二通达信指标输出 → 网页可视化大屏通达信指标擅长计算但图表丑、交互弱。用 Wzslinker 将指标结果导出交给 ECharts 做专业可视化在通达信中编写指标公式EXPORT_DATA最后一行DRAWNULL;前加EXPORT(C:\\data\\zzb.csv, CLOSE, VOL, MA(CLOSE,5));网页端定时如每 5 分钟调用/export?typeklineperioddcode600519获取 CSVPython 后端解析 CSV清洗数据存入 SQLiteECharts 前端通过 AJAX 读取/api/chart-data?code600519渲染 K 线指标叠加图。✅ 优势复用通达信成熟算法规避 Python 数值计算精度问题 关键技巧CSV 导出时用EXPORT函数指定字段名如EXPORT(path.csv, 收盘价,CLOSE, 成交量,VOL)避免中文乱码。5.3 模式三多源数据融合 → 通达信界面动态标注将网页抓取的新闻、研报、舆情数据实时标注到通达信分时图上爬虫Python Scrapy监控财联社抓取“贵州茅台 重大事项公告”提取关键时间点如“10:15 发布”转换为通达信时间戳20231015101500调用 Wzslinker/keystroke模拟CtrlH打开分时图标注输入文字“【公告】重大事项”定位到对应时间点通达信自动在分时图上添加红色标注箭头。✅ 优势将非结构化信息转化为技术分析依据⚠️ 限制通达信标注功能较弱仅支持文字箭头不支持图片或超链接 关键技巧用keystroke发送CtrlShiftH可快速打开/关闭标注面板提升效率。我在某家期货公司的实盘案例中用模式三实现了“新闻事件驱动交易”当爬虫捕获到“美国CPI数据超预期”新闻5 秒内就在通达信外盘期货分时图上标注交易员据此 30 秒内完成套利操作。这套流程的核心就是 Wzslinker 提供的毫秒级指令通道。6. 安全与合规红线必须坚守的 3 条铁律再强大的工具也必须在合规框架内使用。Wzslinker 本身不涉及交易但联动行为可能触碰监管红线。以下是必须遵守的底线6.1 绝不绕过交易风控系统券商交易接口均有严格的风控校验如单笔委托金额上限、当日撤单次数限制。Wzslinker 触发的下单界面仍需经过券商风控系统最终审核。曾有客户试图用keystroke模拟“绕过风控”操作如快速撤单重报结果被券商系统识别为异常行为账户被临时冻结。✅ 正确做法所有委托指令必须经由券商官方 API如恒生 UFT、金证 QDP提交Wzslinker 仅用于行情查看与策略验证。6.2 数据导出范围必须符合《证券期货业数据安全管理规范》通达信导出的行情数据/export属于“公开市场信息”可自由使用。但若通过 Wzslinker 读取用户自定义的“持仓成本”、“盈亏比例”等敏感字段则违反规定。✅ 正确做法Wzslinker 仅调用通达信公开 API/quote,/goto,/run绝不尝试读取tdx\userdata\下的私有文件所有数据处理在本地完成不上传至任何云服务器。6.3 禁止用于自动化高频交易监管明确禁止“利用技术手段规避交易规则”的行为。Wzslinker 的/keystroke虽然快但本质仍是模拟人工操作不属于“程序化交易”范畴。但若将其与高频策略结合如每秒发送 100 次委托则构成违规。✅ 正确做法将 Wzslinker 定位为“辅助决策工具”所有操作需有明确的人工确认环节如弹窗二次确认单次联动间隔 ≥1 秒日累计操作次数 1000 次。最后分享一个真实教训某私募曾用 Wzslinker 实现“涨停板排队抢筹”在 3 秒内完成 50 只股票的挂单。虽未被处罚但券商主动约谈要求签署《合规使用承诺书》。技术没有善恶但使用者必须敬畏规则。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门