3. Python环境搭建:版本选择、虚拟环境配置、常用库安装

做量化交易,说白了就是跟数据打交道。而Python,就是我们手里的那把刀。刀好不好使,很大程度上取决于你磨刀的方式。今天我就带你把这把刀磨利索。

3.1 Python版本选择:别踩坑

我个人习惯用Python 3.9或3.10。为什么不是最新的3.12?嗯,这里要注意——做市机器人依赖的很多库,比如ccxt、websockets,对新版本的适配往往有滞后。我在项目中遇到过,有同事一上来就装了3.12,结果跑ccxt的某些异步接口时直接报错,折腾了半天才发现是版本兼容问题。

你想想看,交易所的API对接,稳定性是第一位的。所以我的建议是:

  • 首选Python 3.9:兼容性最好,主流库都支持
  • 次选Python 3.10:性能略有提升,但部分老库可能不兼容
  • 避开Python 3.7以下:很多新特性不支持,而且官方已停止安全更新
⚠️ 避坑指南:我曾经因为图省事,直接在系统自带的Python 2.7上开发,结果遇到Unicode编码问题,调试了整整一个下午。从那以后,我坚持用虚拟环境+指定版本。

3.2 虚拟环境配置:隔离的艺术

做量化交易,你手上可能同时维护好几个项目。有的用pandas 1.x,有的用2.x。如果全装在一个环境里,迟早会出问题。虚拟环境就是解决这个问题的。

我个人最常用的是venv,它是Python自带的,不需要额外安装。操作起来也很简单:

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

# 激活虚拟环境(Windows)
trading_env\Scripts\activate

# 激活虚拟环境(Mac/Linux)
source trading_env/bin/activate

# 退出虚拟环境
deactivate

激活后,你会看到命令行前面多了个(trading_env)的标识。这时候你安装的所有库,都只会在这个环境里生效。说白了,就是给每个项目建了一个独立的小房间,互不干扰。

💡 小技巧:我习惯在项目根目录下创建一个requirements.txt文件,把依赖库写进去。这样换机器或者给别人部署时,一行命令就能搞定:pip install -r requirements.txt

3.3 常用库安装:三板斧

做交易所API对接,有三个库是绕不开的。我管它们叫「三板斧」:

库名 用途 安装命令
requests 发送HTTP请求,获取REST API数据 pip install requests
websockets 建立WebSocket连接,接收实时行情 pip install websockets
ccxt 统一接口,对接上百家交易所 pip install ccxt

安装命令很简单,但有几个细节要注意:

  • requests:几乎是最基础的库了。但要注意,做市机器人需要频繁请求,建议配合requests.Session使用,可以复用TCP连接,提升性能。
  • websockets:这个库的异步特性很重要。我刚开始用的时候,没注意事件循环的管理,结果程序跑着跑着就卡死了。后来养成了习惯,每次都用asyncio.run()来启动。
  • ccxt:这个库封装了上百家交易所的API。但说实话,它也不是万能的。有些交易所的特殊功能,比如某些衍生品的下单参数,ccxt可能还没覆盖到。这时候就需要你直接调用交易所的原生API了。
📌 核心要点:安装完这三个库后,建议先写个简单的测试脚本,验证一下环境是否正常。比如用ccxt获取一下比特币的当前价格,看看能不能跑通。

3.4 知识体系总览

下面这张图,是我梳理的Python环境搭建的核心逻辑。你可以把它当作一张地图,心里有数,走起来就不慌。

Python环境搭建知识体系 Python版本选择 虚拟环境配置 常用库安装 推荐3.9 / 3.10 避开3.7以下 venv创建隔离环境 requirements.txt管理 requests / websockets ccxt统一接口 环境稳定 → 交易稳定

3.5 验证环境:写个Hello World

环境搭好了,总得试试能不能用。我一般会写个简单的脚本,把三个库都跑一遍:

import requests
import websockets
import ccxt

# 测试requests
response = requests.get('https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT')
print(f"BTC价格: {response.json()['price']}")

# 测试ccxt
exchange = ccxt.binance()
ticker = exchange.fetch_ticker('BTC/USDT')
print(f"ccxt获取BTC价格: {ticker['last']}")

# 测试websockets(异步)
import asyncio
async def test_ws():
    async with websockets.connect('wss://stream.binance.com:9443/ws/btcusdt@trade') as ws:
        msg = await ws.recv()
        print(f"WebSocket收到数据: {msg[:50]}...")

asyncio.run(test_ws())

如果这三行都能跑通,恭喜你,环境搭建成功了。接下来就可以正式开始做市机器人的开发了。

💡 个人经验:我每次搭建新环境,都会把这个测试脚本跑一遍。不是为了炫技,而是为了确认网络、库、版本都没问题。省得写到一半才发现环境有问题,那才叫欲哭无泪。

专注资料整理