第2章:开发环境搭建
做量化交易,环境搭建是第一步。这一步要是没走稳,后面全是坑。我个人习惯先把Python环境理清楚,再装依赖库,最后跑个demo验证。今天咱们就把这套流程走一遍。
2.1 Python版本选择
港股接口开发,我建议用Python 3.9或3.10。为什么?
- 3.8以下版本,有些新库不支持了
- 3.11以上,部分金融库还没完全适配
- 3.9和3.10是当前最稳的版本
我在项目中遇到过,有人用3.12装protobuf,结果编译报错。折腾半天,最后降版本解决。嗯,这种坑踩一次就够了。
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)
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 知识体系总览
下面这张图,帮你理清本章的知识结构。
2.7 常见问题
| 问题 | 原因 | 解决 |
|---|---|---|
| pip install 报错 | 网络问题或版本不兼容 | 换国内镜像源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple |
| protobuf 编译失败 | protoc 版本不对 | 下载对应版本的 protoc 编译器 |
| WebSocket 连不上 | 防火墙或代理问题 | 检查网络,关闭代理 |
| pandas 读取乱码 | 编码问题 | 加参数:encoding='utf-8' |
好了,环境搭好了。下一章咱们开始写真正的港股接口代码。记住,环境是地基,地基稳了,楼才能盖高。
公众号:蓝海资料掘金营,微信deep3321