第2章:开发环境搭建

做量化交易,环境搭建是第一步。这一步要是没走稳,后面全是坑。我个人习惯先把Python环境理清楚,再装依赖库,最后跑个demo验证。今天咱们就把这套流程走一遍。

2.1 Python版本选择

港股接口开发,我建议用Python 3.9或3.10。为什么?

  • 3.8以下版本,有些新库不支持了
  • 3.11以上,部分金融库还没完全适配
  • 3.9和3.10是当前最稳的版本

我在项目中遇到过,有人用3.12装protobuf,结果编译报错。折腾半天,最后降版本解决。嗯,这种坑踩一次就够了。

小提示: 如果你用Windows,记得勾选"Add Python to PATH"。这个选项很多人会忘,后面pip都用不了。

2.2 虚拟环境管理

虚拟环境这东西,说白了就是隔离。每个项目有自己的依赖,互不干扰。我见过太多人把所有库装到全局,最后版本冲突,项目跑不起来。

我个人习惯用 venv,Python自带的,轻量够用。

# 创建虚拟环境
python -m venv hk_trade_env

# 激活(Windows)
hk_trade_env\Scripts\activate

# 激活(Mac/Linux)
source hk_trade_env/bin/activate

# 退出
deactivate

激活后,终端前面会出现 (hk_trade_env) 字样。看到这个,说明你已经在虚拟环境里了。

注意: 千万别把虚拟环境放到项目目录外。我曾经有个同事,把环境建在桌面,项目换电脑后,依赖全丢了。

2.3 依赖库安装

港股接口开发,核心依赖就四个:requests、websockets、pandas、protobuf。咱们一个一个说。

2.3.1 requests

HTTP请求库,用来调REST接口。港股行情和交易,很多都是HTTP协议。

pip install requests

这个库很简单,但有个坑:默认不设置超时。我曾经有个策略,因为网络波动,请求卡住半小时。从那以后,我所有请求都加timeout。

import requests

# 一定要加超时
resp = requests.get('https://api.example.com', timeout=5)

2.3.2 websockets

港股实时行情,走的是WebSocket。这个库用来处理长连接。

pip install websockets

注意,库名叫 websockets,带s。还有个 websocket-client,别搞混。我刚开始就装错了,调试半天连不上。

import asyncio
import websockets

async def get_price():
    async with websockets.connect('wss://hk.ws.example.com') as ws:
        await ws.send('{"cmd":"subscribe","symbol":"00700"}')
        data = await ws.recv()
        print(data)

asyncio.run(get_price())

2.3.3 pandas

数据处理必备。行情数据、交易记录,都得用它清洗和分析。

pip install pandas

pandas版本要注意。2.0以后有些API变了。我建议用1.5.x,稳定。如果你是新项目,2.0也行,但要注意向下兼容。

import pandas as pd

# 读取CSV行情数据
df = pd.read_csv('hk_stock_data.csv')
print(df.head())

2.3.4 protobuf

这个最特殊。港股接口的数据格式,很多用Protobuf。它比JSON快,但需要先编译协议文件。

pip install protobuf

装完后,你还需要拿到交易所的.proto文件。比如港股通的行情协议,一般券商都会提供。

# 编译proto文件
protoc --python_out=. hk_market_data.proto

# 使用
import hk_market_data_pb2

msg = hk_market_data_pb2.MarketData()
msg.ParseFromString(raw_bytes)
print(msg.last_price)
重点: protobuf版本要和券商提供的.proto文件匹配。版本不对,解析会报错。我遇到过,券商用3.20,我装3.21,结果字段对不上。

2.4 依赖管理最佳实践

项目做大了,依赖管理就很重要。我习惯用 requirements.txt 锁定版本。

# 生成当前环境的依赖列表
pip freeze > requirements.txt

# 在新环境安装
pip install -r requirements.txt

requirements.txt内容示例:

requests==2.31.0
websockets==12.0
pandas==1.5.3
protobuf==3.20.3

为什么要锁定版本?因为依赖库会更新,API可能变。你想想看,半年后重新部署,发现pandas API变了,代码跑不起来。这种事我见过太多次了。

2.5 验证环境

装完所有库,跑个简单脚本验证。

import requests
import websockets
import pandas as pd
import protobuf

print("requests:", requests.__version__)
print("websockets:", websockets.__version__)
print("pandas:", pd.__version__)
print("protobuf:", protobuf.__version__)

print("环境搭建成功!")

如果所有版本都正常打印,恭喜你,环境搭好了。

2.6 知识体系总览

下面这张图,帮你理清本章的知识结构。

港股交易接口开发环境搭建 Python 3.9/3.10 虚拟环境 venv 依赖库安装 requests (HTTP) websockets (实时) pandas (数据处理) protobuf (序列化) 最佳实践:requirements.txt 锁定版本 + 虚拟环境隔离 ✅ 验证:打印版本号

2.7 常见问题

问题 原因 解决
pip install 报错 网络问题或版本不兼容 换国内镜像源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple
protobuf 编译失败 protoc 版本不对 下载对应版本的 protoc 编译器
WebSocket 连不上 防火墙或代理问题 检查网络,关闭代理
pandas 读取乱码 编码问题 加参数:encoding='utf-8'
我的经验: 环境搭建花30分钟,后面能省3小时。别急着写代码,先把环境搞稳。

好了,环境搭好了。下一章咱们开始写真正的港股接口代码。记住,环境是地基,地基稳了,楼才能盖高。


公众号:蓝海资料掘金营,微信deep3321