在股票分析与选股器开发的过程中,数据是最为关键的一环。如何快速、准确地获取 股票历史数据 和 实时行情,成了每个量化投资者和开发者都在头疼的问题。
对于大多数开发者来说,选择一个稳定、免费、快速、全面的数据源尤为重要,而今天我们将为你介绍一种高效、简单的解决方案:通过 Docker 部署 AKTools,快速获取高质量股票数据。
Go语言实战 3.1:动态策略编译,让量化策略“活起来” 中面临了数据源的问题,本文将解决这段时间的困惑。
AKTools,基于 AKShare 的强大工具,已经提供了丰富的股票数据接口,我选择了通过 Docker 镜像一键部署,免去繁琐的安装配置。无论你是开发股票选股器,还是进行股票数据分析,使用 AKTools 都能为你提供源源不断的数据支持。更重要的是,我们将介绍如何将 AKTools 与 Gin 框架 中转,构建灵活的数据接口,让你的应用更加高效。
- 为什么选择 AKTools?
在股票选股器的开发过程中,数据源的选择非常关键。常见的股票数据接口可能会面临数据延迟、限制访问、接口不稳定等问题,至于免费的更是少得可怜。而 AKTools 是基于 AKShare 开发的,提供了海量的金融数据接口,包括股票历史数据、实时行情、行业信息等。这些数据非常丰富且可靠,能够满足大多数投资分析需求。
最重要的是,AKShare 有稳定的更新维护, AKTools 也已经通过 Docker 镜像打包,能够让你轻松在本地进行部署和使用。接下来,我们将带你通过 Docker 安装 AKTools,并介绍如何升级保持 AKTools 的最新版本。
- Docker 部署 AKTools:简单高效,轻松搭建股票数据源
2.1 拉取并运行 AKTools 镜像
现在,我们可以开始部署 AKTools 了。通过 Docker,我们可以在本地快速运行 AKTools 容器。首先,在终端执行以下命令来拉取并启动 AKTools镜像,我这里选择了官方的镜像,感兴趣的可以尝试其他镜像:
docker run -d -p 18080:8080 registry.cn-shanghai.aliyuncs.com/akfamily/aktools:1.8.95
解释:
-d表示后台运行容器。-p 18080:8080将容器内部的 8080 端口映射到本地的 18080 端口。
执行后,AKTools将在本地运行,你可以通过访问 http://127.0.0.1:18080 来确认服务是否启动。
2.2 测试 AKTools API 是否正常工作
通过浏览器访问以下 URL 来验证 AKTools 是否已正常工作,获取股票历史数据:
http://127.0.0.1:18080/api/public/stock_zh_a_hist?symbol=600066
如果你能看到包含股票历史数据的 JSON 格式返回,说明 AKTools 已经部署成功,可以开始使用了。
3. 升级 AKShare:确保使用最新功能
在 AKTools 运行过程中,你可能需要保持其最新版本,确保你能享受到最新的接口和数据源。以下是如何升级 AKShare 的步骤。
由于 AKTools 是基于 AKShare 的,升级 AKTools 后,建议也升级 AKShare 到最新版。在 AKTools 容器内部,你可以执行以下命令来升级 AKShare:进入 AKTools 容器:
docker run -it ak_tools:latest /bin/bash
使用 pip 升级 AKShare:
pip install akshare --upgrade -i https://pypi.org/simple
这样,你就完成了 AKShare 的升级。
4. 构建灵活的 API 接口:使用 Gin 框架中转股票数据
通过 Docker 部署 AKTools 后,你可以直接访问其 API 来获取股票数据,但是AKShare的接口名称相对复杂,构造自己更通用的接口规范有利于整个项目后续的扩展。这里做个简单的测试。后续会在源码中全面更新统一的外部接口调用(stockapi/main.go)。
// GetStocksHandler 获取股票历史交易数据
func GetStocksHandler(c *gin.Context) {
// 获取请求中的股票代码
symbol := c.Query("symbol")
if symbol == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "symbol is required"})
return
}
// 拼接请求URL
url := fmt.Sprintf("http://127.0.0.1:18080/api/public/stock_zh_a_hist?symbol=%s", symbol)
// 发起HTTP请求
resp, err := http.Get(url)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "无法连接到股票数据源:" + err.Error()})
return
}
defer resp.Body.Close()
// 如果AKTools返回的状态码不是200,则返回错误
if resp.StatusCode != http.StatusOK {
c.JSON(resp.StatusCode, gin.H{"error": fmt.Sprintf("无法获取数据,状态码:%d", resp.StatusCode)})
return
}
// 读取返回的Body内容
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "无法读取股票数据:" + err.Error()})
return
}
// 将获取到的数据返回
c.Data(http.StatusOK, "application/json", body)
}
5. 总结
通过本文,你已经学会了如何通过 Docker 部署 AKTools 并快速获取股票数据,解决了选股器数据来源问题。同时,我们还介绍了如何升级 AKTools 和 AKShare,确保你的数据源始终是最新的。最后,你可以使用 Gin 框架 构建灵活的中转 API,让你的选股器更加高效。
开源地址:
GitHub
👉 github.com/louis-xie-p…
Gitee(国内镜像)
👉 gitee.com/louis_xie/g…
希望这篇文章对你有帮助。如果你有任何问题,或者你有更好的数据接口建议,欢迎在评论区留言,我们一起探讨!后续将进一步更新GoStockAnalyzer.