量化交易学习(五十六)在M1芯片Mac上用docker运行掘金量化sdk
在上一篇文章中,我们通过CrossOver实现了在M1芯片的Mac上运行Windows版的掘金量化,但是因为没有python环境,无法使用掘金量化的sdk。
这篇文章就来讲一下怎么在M1芯片的Mac上通过docker运行x86架构linux镜像,实现对掘金量化sdk的调用。
首先是启用mac的Rosetta。Rosetta是苹果公司为搭载Apple芯片的Mac电脑开发的二进制翻译技术。它可以让专为英特尔处理器(x86架构)设计的应用程序在Apple芯片(ARM架构)上运行。
1 | /usr/sbin/softwareupdate --install-rosetta --agree-to-license |
然后启动docker,如果没安装docker的话,需要先安装好docker,建议安装docker desktop省心好用。
然后在终端运行以下命令,尝试运行x86架构的ubuntu镜像,如在输出内容里有x86_64说明运行成功。
1 | DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm ubuntu uname -a |
输出结果为:
接下来我们只要用Dockerfile在python基础镜像的基础上配置好掘金量化的sdk然后创建镜像,通过docker运行就可以了。
Dockerfile如下:
1 | FROM python:3.11-bookworm |
docker镜像我是在一台linux服务器上打包的。打好的镜像已经传到阿里云上了。大家有需要可以使用:
1 | registry.cn-beijing.aliyuncs.com/hejd/goldminer:v1.1 |
在使用时,需要把要执行的代码所在的文件夹映射到 /quant 目录下,然后用python 脚本名.py 来执行。
注意在脚本中的run函数的serv_addr字段要填写host.docker.internal:7001
,在运行脚本前要先运行CrossOver里的掘金量化终端。
比如我有一个每日更新etf数据的脚本,首先我进入脚本所在的文件夹,然后运行命令
1 | DOCKER_DEFAULT_PLATFORM=linux/amd64 docker run --rm -v $PWD:/quant -e HOSTNAME=host.docker.internal registry.cn-beijing.aliyuncs.com/hejd/goldminer:v1.1 python main.py |
- DOCKER_DEFAULT_PLATFORM=linux/amd64 用于指定docker运行平台的架构
- HOSTNAME=host.docker.internal 指定了HOSTNAME环境变量后,在docker里就可以通过host.docker.interal来访问宿主机上的服务了,掘金量化的端口是7001
只要输出内容有 python sdk version: 3.0.166 就说明可以成功调用掘金量化sdk了。