量化交易学习(五十六)在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

输出结果为:
571e7ba0598424db286e2d4387cffc61.png

接下来我们只要用Dockerfile在python基础镜像的基础上配置好掘金量化的sdk然后创建镜像,通过docker运行就可以了。

Dockerfile如下:

1
2
3
4
5
6
7
8
FROM python:3.11-bookworm

WORKDIR /quant

RUN pip install --no-cache-dir gm
RUN pip install --no-cache-dir sqlalchemy
RUN pip install --no-cache-dir requests
RUN pip install --no-cache-dir pymysql

docker镜像我是在一台linux服务器上打包的。打好的镜像已经传到阿里云上了。大家有需要可以使用:

1
2
registry.cn-beijing.aliyuncs.com/hejd/goldminer:v1.1

在使用时,需要把要执行的代码所在的文件夹映射到 /quant 目录下,然后用python 脚本名.py 来执行。

注意在脚本中的run函数的serv_addr字段要填写host.docker.internal:7001,在运行脚本前要先运行CrossOver里的掘金量化终端。

74226e7b46cda9289630a97bba2c3c0a.png

比如我有一个每日更新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

bdd49730e78ee3fcafdd31b34e761d4c.png

只要输出内容有 python sdk version: 3.0.166 就说明可以成功调用掘金量化sdk了。

江达小记