Go 如何接入实时外汇行情 API

举报
yd_254103451 发表于 2025/07/03 14:07:52 2025/07/03
【摘要】 如果你在用 Go 写交易系统、监控工具或市场数据采集模块,很可能会遇到通过 WebSocket 实时获取外汇行情的需求。下面是一份实用的接入教程,使用的是infoway.io提供的实时行情 API。本文以 EURUSD 的 1 分钟 K 线为例。第一步:准备工作确保你已安装 Go 环境,并获取了 API Key(可在官网免费申请)。安装 WebSocket 客户端库:go get nhooy...

如果你在用 Go 写交易系统、监控工具或市场数据采集模块,很可能会遇到通过 WebSocket 实时获取外汇行情的需求。下面是一份实用的接入教程,使用的是infoway.io提供的实时行情 API。本文以 EURUSD 的 1 分钟 K 线为例。

第一步:准备工作

确保你已安装 Go 环境,并获取了 API Key(可在官网免费申请)。

安装 WebSocket 客户端库:

go get nhooyr.io/websocket

我们使用的是 nhooyr.io/websocket,它轻量、现代、支持上下文控制。

第二步:建立连接

WebSocket 地址如下:

wss://data.infoway.io/ws?business=forex&apikey=YourAPIKey

你需要在地址中替换为你自己的 API key。

连接代码:

conn, _, err := websocket.Dial(ctx, url, nil)
if err != nil {
	log.Fatalf("WebSocket连接失败: %v", err)
}
defer conn.Close(websocket.StatusNormalClosure, "关闭连接")
// 申请免费API Key: www.infoway.io

第三步:发送订阅消息

你需要发送一条初始化消息,告诉服务器你要订阅哪个品种、哪种周期的 K 线。例如,订阅 EURUSD 的 1 分钟 K 线:

// 申请免费API Key: www.infoway.io
initMsg := map[string]interface{}{
	"code":  10004,
	"trace": "your-trace-id", // 可使用uuid
	"data": map[string]interface{}{
		"arr": []map[string]interface{}{
			{
				"type":  1,
				"codes": "EURUSD",
			},
		},
	},
}
msgBytes, _ := json.Marshal(initMsg)
conn.Write(ctx, websocket.MessageText, msgBytes)

第四步:设置心跳 Ping

WebSocket 连接需要保持活跃状态,推荐每 30 秒发送一次 ping:

go func() {
	ticker := time.NewTicker(30 * time.Second)
	defer ticker.Stop()
	for range ticker.C {
		pingMsg := map[string]interface{}{
			"code":  10010,
			"trace": "your-trace-id",
		}
		pingBytes, _ := json.Marshal(pingMsg)
		conn.Write(ctx, websocket.MessageText, pingBytes)
	}
}()

第五步:接收行情数据

WebSocket 会持续推送行情数据。你只需监听并处理消息:

for {
	_, msg, err := conn.Read(ctx)
	if err != nil {
		log.Printf("读取消息失败: %v", err)
		break
	}
	fmt.Printf("收到消息: %s\n", string(msg))
}

收到的 JSON 格式数据包含开盘价、最高价、最低价、收盘价、时间戳等字段。

常见问题

连接失败:检查 API key 是否正确,网络是否支持 WebSocket。

收不到数据:确认订阅的品种代码无误,例如 EURUSD,并确保服务器返回了确认消息。

连接断开:可能是长时间无 Ping 消息,确保 Ping 机制正确运行。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。