第一章:数据清洗环境搭建
做期权高频做市,说白了就是跟时间赛跑。你想想看,行情数据每秒几千笔,延迟一毫秒可能就是几万块的盈亏。所以环境搭建这事,真不是装个Python就完事的。
我个人习惯,先把基础环境理清楚。磨刀不误砍柴工嘛。
1.1 Python环境配置
Python版本怎么选?我建议直接用3.9或3.10。为什么?
我在项目中踩过坑。有次用3.11跑一个老版本的numba,直接报错,折腾了两天才发现是版本兼容问题。嗯,这里要注意:高频做市依赖的库,很多对最新Python支持并不及时。
推荐用Anaconda或者Miniconda来管理环境。我个人偏爱Miniconda,轻量,不占地方。
核心配置清单:
- Python 3.9 或 3.10
- Miniconda 作为环境管理器
- 虚拟环境隔离,每个项目独立
创建环境的命令很简单:
conda create -n hft_env python=3.9
conda activate hft_env
环境名我习惯用hft_env,一目了然。你随意,但别用中文名,有些库会报错。
1.2 Pandas与NumPy安装
这两个库,是做量化逃不开的基石。Pandas处理表格数据,NumPy搞数值计算,配合起来天衣无缝。
安装命令:
conda install pandas numpy
或者用pip:
pip install pandas numpy
我个人推荐conda安装。为什么?因为conda会自动处理依赖关系,特别是NumPy这种底层库,用pip装有时候会跟系统库冲突。
我曾经在服务器上直接用pip装numpy,结果发现MKL(数学核心库)没装上,矩阵运算慢了3倍。后来换成conda,问题就解决了。
版本方面,目前稳定的是:
| 库名 | 推荐版本 | 说明 |
|---|---|---|
| Pandas | 1.5.x | 2.0以后API有变化,建议先稳定 |
| NumPy | 1.23.x | 跟numba兼容性最好 |
小技巧:装完后跑一下 import pandas as pd; print(pd.__version__),确认版本无误。
1.3 高性能计算库:Numba与Dask
做高频做市,数据量动不动就是几百万行。纯Python循环?太慢了。这时候就需要Numba和Dask上场。
Numba:让Python跑出C的速度
Numba是个JIT编译器。说白了,它把你写的Python函数,在运行时编译成机器码。效果?我实测过,同样的循环,用numba加速后快了50倍。
安装:
conda install numba
用法很简单,加个装饰器就行:
from numba import jit
import numpy as np
@jit(nopython=True)
def calculate_spread(bid_prices, ask_prices):
return ask_prices - bid_prices
这里有个坑:nopython=True 一定要加。不加的话,numba可能退回到object模式,速度反而更慢。我曾经因为这个排查了半天,最后发现是忘了这个参数。
注意:numba不支持所有Python语法。比如字典、列表推导式,在nopython模式下就不能用。写之前先看看官方文档的兼容列表。
Dask:处理放不下的数据
做市数据一天可能几十GB,内存装不下怎么办?Dask就是干这个的。它把大数组切分成小块,按需加载,并行计算。
安装:
conda install dask
Dask的API跟Pandas很像,上手很快:
import dask.dataframe as dd
# 读取大文件,自动分块
df = dd.read_csv('tick_data_2024.csv')
result = df.groupby('symbol').price.mean().compute()
注意最后那个 .compute()。Dask是惰性求值的,不调用compute,它不会真正执行计算。这个设计其实很聪明——你可以先搭好计算流程,最后再触发执行。
1.4 知识体系总览
这一章的内容,我画了张图帮你理清思路:
这张图其实就说明了我们的思路:先搭好Python基础环境,再装上Pandas和NumPy处理数据,最后用Numba和Dask解决性能瓶颈。每一步都有它的价值,跳不过去。
1.5 避坑指南
最后,分享几个我踩过的坑:
- 不要用系统自带的Python——版本太老,而且容易跟系统包冲突。我刚开始做量化时就用系统Python,结果装pandas时报错,差点重装系统。
- 虚拟环境一定要用——不同项目依赖可能冲突。比如一个项目用pandas 1.5,另一个用2.0,没有虚拟环境就等着哭吧。
- 装完库先测试——别急着写代码。跑个简单的import和基本操作,确认环境没问题再往下走。
一句话总结:环境搭好了,后面90%的问题都不会出现。花半小时把这一步做扎实,比后面花两天排查问题划算得多。