AutoHotkey对接UpBit WebSocket获取加密货币交易数据的实现咨询
AutoHotkey对接Upbit WebSocket实时行情实现
先修正你目前踩的两个基础坑
- 你写的订阅报文存在JSON语法错误:原报文重复嵌套了
{"type":"trade"}字段,属于非法格式,Upbit服务端会直接拒绝连接,修正后的可用订阅报文为[{"ticket":"ahk_local_test_789"},{"type":"trade","codes":["KRW-BTC","KRW-ETH"]}] - 你参考的示例代码存在逻辑bug:原示例是针对公开echo测试站写的,里面在
OnMessage回调中每收到一条消息就重新实例化WebSocket对象,会造成连接无限嵌套创建,运行后很快内存占满,必须删掉这行多余的实例化代码 - 注意:echo测试站会原样返回你发送的内容,但Upbit的正式接口只会在收到合法订阅报文后才会推送对应行情,不能像原示例那样弹输入框让用户随便发内容
修改后可直接运行的完整代码
#Include, Websocket.Ahk class UpbitTradeStream extends WebSocket { ; 连接成功触发,自动发送订阅请求 OnOpen(Event) { SubscribePayload := '[{"ticket":"ahk_local_test_789"},{"type":"trade","codes":["KRW-BTC","KRW-ETH"]}]' this.Send(SubscribePayload) ToolTip, Upbit WebSocket 连接成功,已获取实时行情推送权限 } ; 收到服务端行情推送时触发 OnMessage(Event) { ; 从推送的JSON中提取交易对、实时成交价字段,可直接复用你之前WinHTTP方案的正则提取逻辑 RegExMatch(Event.data, "`"code`":`"(.*?)`"", TradingPair) RegExMatch(Event.data, "`"tradePrice`":(\d+\.?\d*)", CurrentTradePrice) ; 用屏幕角落提示代替弹窗,避免高频推送打断正常操作 ToolTip, % TradingPair " 实时成交价: " CurrentTradePrice "`n连接状态: 正常运行" } ; 连接断开时触发 OnClose(Event) { ToolTip, Upbit WebSocket 连接已断开 this.Disconnect() ; 如需断线重连,可在此处添加延迟重新实例化连接的逻辑 } } ; 脚本启动后直接连接Upbit WebSocket端点 new UpbitTradeStream("wss://api.upbit.com/websocket/v1")
日常使用调整说明
- 需要新增订阅币种时,直接修改订阅报文里的
codes数组内容即可,比如要追加DOGE的行情,就把数组改成"codes":["KRW-BTC","KRW-ETH","KRW-DOGE"] - 如果收到的推送内容是乱码,检查所用Websocket.Ahk库的配置,确保消息接收模式为文本解析,Upbit默认返回UTF-8编码的JSON文本,不需要额外解压二进制帧
- 原有基于WinHTTP的轮询逻辑可以保留,WebSocket作为实时推送的补充,两者获取的行情字段结构完全一致,之前写的正则提取价格的逻辑可以直接复用
内容的提问来源于stack exchange,提问作者ggo
相关产品推荐
相关产品推荐

