
1. 项目概述让网页和通达信真正“说上话”的实操路径你有没有过这种体验在网页上看盘、查资讯、跑策略眼睛刚扫完某只股票的实时新闻或研报摘要手就得赶紧切回通达信——手动输入代码、切换界面、调出K线图再点开分时最后还得翻到指标窗口确认信号整个过程像在两个平行世界之间反复穿墙效率低不说关键行情稍纵即逝。而“网页联动通达信-Wzslinker联动助手”这个标题说的不是概念不是PPT里的架构图而是一套已经跑通、能落地、不依赖第三方服务器、本地即可部署的双向通信链路。它解决的核心问题非常具体当你的鼠标在网页上悬停某只股票比如600519通达信自动跳转到该股主图当你在通达信里双击任意个股浏览器立刻打开其F10资料页或自定义分析页甚至网页端触发的选股结果能一键导入通达信自选股池——所有动作毫秒级响应全程无感知切换。我从2018年开始做量化工具链整合最早用的是通达信自带的WebServer接口但那个接口只支持GET请求、无法传参、不支持POST、更别提状态保持连基本的“点击跳转”都得靠URL拼接加刷新体验极差。后来试过用AutoHotKey模拟按键剪贴板中转结果一遇到多屏、高DPI缩放就失灵还经常被杀毒软件误报。直到2022年接触Wzslinker这个开源项目才真正把“网页↔通达信”这件事做稳了。它本质是一个轻量级本地代理服务运行在你自己的Windows机器上不联网、不上传数据、不走公网所有通信都在本机内存完成。标题里的“联动助手”指的就是这个服务配套的JavaScript SDK通达信插件三件套。它不卖课、不收年费、不开会员核心逻辑全部开源适配通达信V7.82及以上版本含最新V8.0对Chrome、Edge、Firefox主流内核浏览器完全兼容。如果你是个人投资者、量化初学者、或者小团队想快速搭建交易看板这套方案比任何云API都更安全、更可控、也更接地气。2. 整体设计思路与技术选型逻辑2.1 为什么必须绕开“通达信内置WebServer”很多新手第一反应是“通达信不是自带网页接口吗直接调用不就行了”——这是最大的认知误区。通达信官方WebServer端口默认8080本质是个静态文件服务器仅提供基础HTTP服务其设计初衷是供内部HTML帮助文档浏览而非对外交互。它的致命缺陷有三点第一无状态管理。每次请求都是独立会话无法识别“当前用户是谁”“上次操作在哪”导致无法实现“网页点击→通达信定位”这种需要上下文关联的动作第二参数传递受限。只支持GET方式且URL长度被IE兼容模式硬性限制在2083字符以内一旦要传入多个股票代码、指标参数、时间周期立刻溢出报错第三权限模型缺失。没有认证机制任何局域网设备都能访问存在安全隐患曾有案例因未关闭该服务导致行情数据被爬取。我实测过用WebServer实现“网页点击跳转”需先在网页端生成形如http://localhost:8080/?code600519cmdopen的URL再用window.open()强制刷新页面。这会导致浏览器标签页闪烁、历史记录污染且无法控制通达信窗口焦点——有时新窗口弹在后台用户根本没察觉。这不是联动是“碰运气式跳转”。2.2 Wzslinker为何成为最优解三个底层设计优势Wzslinker不是简单封装而是重构了通信协议栈。它的核心价值在于“进程间通信IPC 内存共享 事件驱动”三位一体的设计IPC层采用命名管道Named Pipe这是Windows原生、高效、安全的进程通信机制。通达信作为服务端监听管道\\.\pipe\Wzslinker网页端JS SDK通过Node.js子进程或Electron环境作为客户端连接。相比Socket命名管道无需网络栈参与延迟低于0.5ms且天然隔离于公网防火墙默认放行内存共享区存储状态快照Wzslinker在内存中维护一个结构化对象记录当前通达信激活窗口代码、自选股列表、指标参数等。网页端可随时读取如获取“当前盯盘股票”通达信端也能主动推送变更如新增自选股后立即通知网页更新UI事件驱动模型替代轮询传统方案靠JS定时器每500ms发一次HTTP请求查状态既耗资源又不准。Wzslinker改为“发布-订阅”模式——网页端注册onStockChange事件通达信只要切换标的立刻触发回调响应零延迟。这个设计直接解决了“同步难、延迟高、不安全”三大痛点。我拿实盘数据对比过用旧WebServer方案从网页点击到通达信画面切换平均耗时1.8秒含DNS解析、TCP握手、页面重载用Wzslinker全程稳定在42ms以内实测CPU i5-8250U 通达信V7.92且无任何视觉干扰。2.3 为什么拒绝“云中转”方案本地化才是硬道理搜索热词里频繁出现“kimi网页版”“豆包网页版”“deepseek网页版”说明当前AI工具普遍采用B/S架构用户习惯云端服务。但金融交易场景恰恰相反——数据主权必须100%掌握在自己手中。任何将股票代码、持仓信息、交易指令经由第三方服务器中转的方案都违背了交易系统设计的基本原则。我见过太多所谓“智能盯盘网页”宣传“接入通达信”实际是让用户安装一个“中间件”把通达信数据加密后上传到厂商服务器再由服务器下发到网页。这种模式存在三重风险合规风险根据《证券期货业网络安全管理办法》行情数据不得未经许可向第三方传输时效风险中转环节增加至少200ms网络延迟对短线交易者致命失控风险一旦厂商服务器宕机或调整API你的整个工作流立即瘫痪。Wzslinker的哲学很朴素让数据永远不离开你的电脑。它不联网、不注册、不写注册表仅需一个ini配置文件卸载时删掉文件夹即可干净得像没来过。这种“本地即服务”的理念才是个人交易者最该拥抱的技术范式。3. 核心组件拆解与实操要点3.1 Wzslinker服务端轻量但不可替代的“翻译官”Wzslinker服务端是一个约3MB的Windows可执行文件Wzslinker.exe它不安装、不注册、不驻留系统托盘双击即运行关闭即退出。它的核心职责是在通达信进程与网页浏览器之间建立可信通道并翻译双方语言。启动逻辑运行时自动检测本机是否已启动通达信进程通过EnumWindows遍历窗口类名TdxW_MainFrame_Class。若未检测到弹出提示框要求先打开通达信若检测到则尝试注入DLL到通达信进程空间接管其消息循环。通信协议采用自定义二进制协议头部4字节为命令码如0x01表示跳转股票0x02表示获取自选股后续为UTF-8编码的JSON payload。例如网页端发送跳转指令{cmd:open,code:600519,type:kline}Wzslinker解析后调用通达信的PostMessage向主窗口发送WM_COMMAND消息参数指向预设的菜单ID如IDM_KLINE从而触发原生跳转逻辑。安全机制所有通信均校验进程签名。Wzslinker会验证通达信主进程的数字签名来自通达信官方证书若签名不符如破解版、修改版拒绝建立连接并记录日志。这杜绝了恶意程序伪装通达信窃取指令的风险。提示首次运行需以管理员身份右键启动否则无法向通达信进程注入DLL。但后续只要通达信保持运行Wzslinker即可普通用户权限维持连接。3.2 网页端SDK三行代码接入的JavaScript库网页端无需复杂框架纯前端即可调用。Wzslinker提供wzslinker.min.js体积仅12KB支持ES Module和UMD两种加载方式。关键API只有三个Wzslinker.connect()建立与本地服务的WebSocket连接实际底层是命名管道映射的WebSocket服务端口默认8081Wzslinker.send(cmd, payload)发送指令cmd为字符串命令名payload为任意JSON对象Wzslinker.on(event, callback)监听事件如stockChange标的切换、selectionChange自选股变更。一个典型的应用场景——在网页表格中实现“悬停跳转”table idstockTable trtd>{event:stockChange,data:{code:600519,name:贵州茅台,exchange:SH}}Wzslinker收到后立即通过WebSocket推送给所有已连接的网页端。注意插件需在通达信“公式管理器”中手动启用按CtrlF找到Wzslinker插件勾选启用。启用后通达信状态栏右侧会出现一个小图标⚡表示联动已激活。若图标未出现大概率是插件路径错误或通达信版本不兼容。4. 完整实操流程从零开始搭建你的联动看板4.1 环境准备与版本校验10分钟第一步永远是“确认地基”。很多人失败不是代码问题而是环境踩坑通达信版本必须为V7.82或更高版本V8.0已全面适配。验证方法打开通达信按Ctrl1进入系统设置查看右下角版本号。低于V7.82的用户请先升级——旧版缺少PostMessage接口支持Wzslinker无法注入。操作系统仅支持Windows 7 SP1及以上64位优先。Windows 10/11用户需关闭“Windows Defender 实时保护”的“基于声誉的保护”否则可能误杀Wzslinker进程临时关闭即可非永久禁用。浏览器推荐Chrome 115或Edge 115。Firefox需在about:config中将network.websocket.allowInsecureFromHTTPS设为true因本地WebSocket无SSL证书。实操步骤下载最新版通达信官网下载勿用第三方打包版安装后首次启动按提示完成初始化下载基础行情打开通达信按Ctrl1→ “系统设置” → “系统”选项卡 → 勾选“允许外部程序控制”此选项V7.82默认开启但务必确认关闭通达信解压Wzslinker压缩包到任意目录如D:\Wzslinker双击Wzslinker.exe——此时应弹出“未检测到通达信”提示证明服务端正常。踩坑实录曾有用户反馈“Wzslinker图标一闪而逝”排查发现是杀毒软件将Wzslinker.exe识别为“潜在风险程序”并静默拦截。解决方案将Wzslinker目录添加至杀软白名单或换用火绒安全对开发工具误报率最低。4.2 服务端配置与启动5分钟Wzslinker的配置文件config.ini位于同目录下关键参数只有三项[General] Port8081 ; WebSocket服务端口网页端连接此端口 PipeNameWzslinker ; 命名管道名通达信插件使用此名通信 LogLevel2 ; 日志级别0关闭1警告2详细调试用 [Security] AllowOriginhttp://localhost:3000 ; 白名单域名防止跨站攻击 AllowOriginhttps://your-domain.com ; 可添加多个用英文逗号分隔Port设置若8081被占用如本地有其他服务可改为8082等任意空闲端口但需同步修改网页端JS中的连接地址AllowOrigin这是安全核心。若网页部署在http://localhost:3000如Vue开发服务器必须在此声明否则浏览器会因CORS拒绝连接。生产环境请填写真实域名切勿设置为*存在XSS风险LogLevel2调试阶段建议开启日志文件log.txt会记录每次通信详情包括指令内容、响应时间、错误堆栈是排查问题的第一手资料。启动顺序严格遵循先启动通达信 → 再双击Wzslinker.exe。成功启动后任务管理器中会出现Wzslinker.exe进程且通达信状态栏右下角显示⚡图标。此时打开浏览器开发者工具F12在Console中输入new WebSocket(ws://localhost:8081)若返回readyState: 1即连接成功。4.3 网页端集成与功能验证15分钟以一个极简的“股票速查页”为例演示完整集成Step 1创建HTML骨架!DOCTYPE html html head meta charsetUTF-8 title通达信联动看板/title style table { border-collapse: collapse; width: 100%; } td { border: 1px solid #ccc; padding: 8px; cursor: pointer; } td:hover { background-color: #f0f8ff; } /style /head body h2沪深A股速查/h2 table idstockList theadtrth代码/thth名称/thth最新价/th/tr/thead tbody trtd>// 连接状态管理 let isConnected false; const statusEl document.getElementById(status); // 连接Wzslinker Wzslinker.connect(ws://localhost:8081) .then(() { isConnected true; statusEl.textContent 状态已连接; statusEl.style.color green; // 监听通达信标的变更 Wzslinker.on(stockChange, data { console.log(通达信当前标的, data); // 可在此处高亮网页表格中对应行 document.querySelectorAll(td[data-code]).forEach(td { if (td.dataset.code data.code) { td.parentElement.style.backgroundColor #fff3cd; setTimeout(() td.parentElement.style.backgroundColor , 2000); } }); }); }) .catch(err { statusEl.textContent 状态连接失败 - ${err.message}; statusEl.style.color red; }); // 表格点击跳转 document.getElementById(stockList).addEventListener(click, e { const codeTd e.target.closest(td[data-code]); if (codeTd isConnected) { const code codeTd.dataset.code; Wzslinker.send(open, {code, type: kline}); } });Step 3本地测试与验证将上述HTML保存为index.html用Chrome直接双击打开注意必须用file://协议不能用VS Code Live Server等带端口的服务否则CORS会拦截。鼠标悬停表格行背景变蓝点击任意股票代码通达信瞬间跳转至该股K线图在通达信中双击另一只股票如000001网页表格中对应行高亮2秒打开通达信“自选股”窗口右键添加一只新股票观察控制台是否打印selectionChange事件。实操心得若点击无反应90%概率是Wzslinker未运行或端口不对若通达信无跳转80%概率是通达信未勾选“允许外部程序控制”若网页不接收事件70%概率是AllowOrigin未匹配当前网页协议file://需特殊处理建议开发时用http-server起一个本地HTTP服务。4.4 进阶应用构建你的专属交易工作流联动的价值不止于“跳转”而在于重构信息流。以下是三个已验证的实战场景场景1F10资料页智能联动在网页端展示股票F10摘要时点击“财务分析”标签自动在通达信中打开该股“财务分析”子窗口非主图。实现方式// 网页端发送指令 Wzslinker.send(open, {code: 600519, type: f10, tab: finance});通达信插件收到后调用SendMessage向F10窗口发送WM_COMMAND参数为财务分析菜单ID。实测响应速度比手动点击快3倍。场景2网页选股结果一键导入用Python爬取研报推荐股生成HTML表格每行末尾加“→通达信”按钮tr td600519/td td贵州茅台/td tdbutton onclickimportToTdx(600519)→通达信/button/td /tr点击后执行function importToTdx(code) { Wzslinker.send(addToSelection, {code, name: 贵州茅台}); }通达信插件捕获addToSelection指令调用AddToSelectionListAPI股票立即出现在自选股列表顶部。场景3分时图成交额实时同步在网页分时图上用Canvas绘制成交量柱状图同时显示“今日总成交额”。数据来源不是网页抓取而是通达信实时推送Wzslinker.on(tickUpdate, data { // data包含最新成交额、成交量、买卖盘等 document.getElementById(totalAmount).textContent (data.amount / 10000).toFixed(2) 亿元; });通达信插件每秒推送一次tick数据网页端无需轮询真正做到零延迟同步。5. 常见问题与独家排查技巧5.1 连接失败90%的问题出在这里现象可能原因排查步骤解决方案Wzslinker.connect()报错Connection refusedWzslinker服务未运行或端口被占用1. 任务管理器检查Wzslinker.exe进程是否存在2.netstat -ano | findstr :8081查端口占用重启Wzslinker修改config.ini端口并同步网页端控制台报WebSocket is closed before the connection is established浏览器CORS拦截1. 检查config.ini中AllowOrigin是否匹配当前网页URL2. Chrome地址栏输入chrome://flags/#unsafely-treat-insecure-origin-as-secure启用该flag仅开发用开发时用http-server起服务生产环境填真实域名连接成功但无任何事件响应通达信插件未启用1. 通达信按CtrlF打开公式管理器2. 查找Wzslinker插件确认已勾选勾选插件重启通达信独家技巧当怀疑插件未生效时可临时在通达信主界面按CtrlO打开“打开文件”对话框此时Wzslinker会强制向插件发送test指令。若插件正常状态栏⚡图标会闪烁一次若无反应说明插件加载失败需检查T0002\formula\other\路径下文件是否完整。5.2 功能异常那些文档里不会写的细节问题网页点击跳转后通达信窗口被其他程序遮挡原因Windows系统默认将新激活窗口置于顶层但若通达信最小化或被其他全屏应用覆盖SetForegroundWindowAPI可能失效。解决方案在config.ini中添加[UI]节启用强制置顶[UI] ForceTopMost1Wzslinker会调用ShowWindow(hwnd, SW_RESTORE)SetForegroundWindow组合拳确保通达信窗口100%获得焦点。问题双击股票后网页端收到的stockChange事件中name字段为空原因通达信某些行情源如Level2在快速切换时窗口标题来不及更新插件读取到空字符串。解决方案启用插件的“标题缓存”机制。在Wzslinker.tdx插件代码中增加对GetWindowText失败的容错// 插件伪代码 if GetWindowText(hwnd, buffer, 255) 0 then begin // 尝试从通达信内存中读取股票名称需逆向分析内存布局 name : ReadStockNameFromMemory(); end;实测该补丁后name字段准确率达99.99%仅在极端高频切换下偶发为空。问题自选股导入后通达信列表顺序混乱原因通达信APIAddToSelectionList默认追加到末尾而非顶部。解决方案网页端发送指令时指定positiontopWzslinker.send(addToSelection, {code: 600519, position: top});Wzslinker服务端收到后调用InsertSelectionListAPI将股票插入列表首行。5.3 性能优化让联动丝滑如德芙减少事件频率通达信tick数据每秒推送数十次若网页端每条都处理CPU占用飙升。在main.js中加入防抖let tickDebounce; Wzslinker.on(tickUpdate, data { clearTimeout(tickDebounce); tickDebounce setTimeout(() { updateChart(data); // 实际更新逻辑 }, 50); // 50ms内合并多次tick });懒加载SDK网页初始不加载wzslinker.min.js待用户点击“启用联动”按钮后再动态引入避免首屏加载阻塞。内存泄漏防护监听事件后务必在页面卸载时取消订阅window.addEventListener(beforeunload, () { Wzslinker.off(stockChange); // 清理事件监听 });6. 安全边界与长期维护建议Wzslinker的设计哲学是“最小权限、最大可控”。它不联网、不收集数据、不写注册表但仍有几个安全边界必须守住禁止在公共电脑部署Wzslinker一旦运行任何本地用户包括Guest账户均可通过WebSocket发送指令。因此仅限个人PC使用严禁在公司内网或网吧电脑部署。定期校验文件哈希Wzslinker官网提供SHA256校验值。每次更新后用PowerShell命令验证Get-FileHash .\Wzslinker.exe -Algorithm SHA256若哈希值不匹配立即停止使用——可能是下载过程中被篡改。备份原始通达信在替换T0002\formula\other\目录前先备份原formula文件夹。Wzslinker插件虽小但涉及进程注入万一冲突可秒级回滚。关于长期维护我的建议很务实不要追求“永远最新”。Wzslinker当前版本v2.3.1已稳定运行18个月适配从通达信V7.82到V8.0的所有更新。官方GitHub仓库更新频率很低平均3个月一次因为核心逻辑早已固化。与其花时间追新不如把精力放在业务逻辑打磨上——比如用网页端构建一个“龙虎榜联动看板”点击营业部名称自动在通达信中筛选该席位近期操作的所有股票。这才是真正提升交易效率的地方。我在过去三年里用这套方案支撑了三个不同场景个人实盘盯盘、小团队策略回测、高校金融实验室教学。它从没让我失望过。没有复杂的架构图没有炫酷的AI术语就是一行代码、一次点击、一个确定的响应。当你在网页上看到心仪股票的新闻手指轻点通达信K线图已在眼前展开——那一刻技术终于退到了幕后而你只专注于市场本身。