
为什么Python成了量化交易的默认语言
做股票和期货量化,第一关不是策略逻辑,是数据。行情数据动辄几百万行,Tick级数据一天就上百万条,用Excel打开直接卡死。Python能成为量化交易的主流语言,核心原因就是它有一批专门处理数据的库,把脏活累活打包好了。
但库多了也麻烦,新手容易陷入“装了一堆库,不知道哪个该用在哪”的困境。这篇文章把量化交易里常用的Python库按用途拆开讲清楚,每个库解决什么问题、什么场景下该用、什么场景下别硬上。
数据读取与清洗 Pandas是绝对主力
Pandas是量化交易数据处理的地基。股票日线数据、期货分钟线数据,读进来就是DataFrame,行是时间戳,列是开高低收成交量。

它的核心价值在三个地方。第一是时间序列对齐,股票和期货的交易日历不一样,螺纹钢夜盘数据和沪深300的日线数据要合并分析,Pandas的resample和merge_asof能自动对齐时间戳,不用手写循环。第二是缺失值处理,期货主力合约换月的时候价格会跳空,直接算收益率会出鬼数据,用Pandas的shift和fillna配合复权因子处理,几行代码搞定。第三是分组运算,按品种分组算波动率、按时间段分组算持仓变化,groupby一行命令替代几百行for循环。
Pandas的短板是内存。处理十年Tick数据,几个G的内存说没就没。期货高频场景下,要么用dtype把float64降成float32省一半内存,要么换更底层的方案。
数值计算 NumPy负责底层加速
NumPy是Pandas的底层依赖,但它独立用的场景也很多。量化里最典型的是矩阵运算和向量化回测。
股票多因子模型算因子暴露度,几十只股票几百个因子,用NumPy的矩阵乘法比Pandas的apply快一个数量级。期货跨期套利算价差序列的统计特征,NumPy的rolling窗口函数配合广播机制,能避免Pandas索引带来的额外开销。
关键认知是,Pandas适合做数据整理和探索,NumPy适合做数值密集型计算。写回测引擎的时候,核心循环里全用NumPy数组,别在循环里碰Pandas的DataFrame,这是性能分水岭。
技术指标计算 TA-Lib和它的替代品
算均线、MACD、布林带、RSI这些指标,TA-Lib是现成的轮子。输入收盘价序列,输出指标值,一行函数调用。
TA-Lib的问题在安装。Windows上直接pip install经常报错,需要先装C++编译环境。很多量化新手卡在这一步。替代方案有两个方向。一是用pandas_ta,纯Python实现,安装零障碍,覆盖主流指标,速度比TA-Lib慢一些但够用。二是自己用NumPy写,均线和MACD的逻辑很简单,写一次就明白指标底层怎么算的,对策略理解反而有帮助。
期货日内策略常用的ATR真实波幅、持仓量加权均价VWAP,TA-Lib覆盖不全,这类指标建议直接手写。指标计算本身不复杂,复杂的是数据对齐和边界处理,这部分交给Pandas。
回测框架 Backtrader和矢量回测的取舍
Backtrader是Python量化圈用得最多的回测框架之一,股票期货都支持。它的设计逻辑是事件驱动,模拟逐根K线推进,贴近实盘交易的执行流程。
Backtrader的优点是完整,订单管理、滑点设置、手续费计算、仓位记录都封装好了,写策略只需要关注买卖信号。缺点也明显,事件驱动意味着每根K线都要走一遍框架逻辑,数据量大的时候慢。期货日内策略跑五年分钟线,Backtrader可能要跑几十分钟。
矢量回测是另一条路。用Pandas和NumPy把买卖信号提前算成数组,收益率直接做向量运算,几秒出结果。适合做参数遍历和因子筛选。代价是没法模拟复杂的订单逻辑,比如部分成交、追单撤单这些。
实际做法是两段式。矢量回测做粗筛,几百组参数跑一遍,筛出表现好的区间。再用Backtrader做精细回测,验证滑点和手续费影响下的真实表现。
高频与性能优化 Numba和Cython的用武之地
期货高频策略对延迟敏感,纯Python的循环速度不够看。Numba能把Python函数直接编译成机器码,数值计算速度接近C。
典型用法是给核心循环加一个@jit装饰器。比如计算盘口买卖压力、逐笔成交的大单过滤,这些逻辑写成函数,Numba编译后速度提升几十倍。代价是Numba不支持Pandas的DataFrame,数据要提前转成NumPy数组。
Cython是另一条路,需要写类Python的代码再编译成C扩展。学习曲线比Numba陡,但对复杂数据结构的支持更好。一般量化场景用Numba就够了,除非在写交易系统的底层撮合逻辑。
数据存储与读取 别小看这块
量化回测慢,很多时候不是策略计算慢,是读数据慢。CSV文件读一个G的数据要几十秒,换成Parquet格式能压到几秒。
Pandas原生支持Parquet,read_parquet和to_parquet两行命令,列式存储按需读取,期货分钟线只读收盘价和成交量两列,内存占用和读取时间都大幅下降。
Tick级数据量再大一个量级,单机Pandas就吃力了。这时候上Dask或者PyArrow,或者直接存数据库。股票日线用SQLite够用,期货Tick数据建议用ClickHouse或 Arctic,写入和查询速度都是另一个级别。
工具选择的核心原则
库再多,核心就一条,数据清洗用Pandas,数值计算用NumPy,指标计算选TA-Lib或pandas_ta,回测先用矢量筛再用事件驱动验证,高频场景上Numba。
别追求把所有库都用上。很多量化策略的瓶颈根本不在工具,在数据质量和策略逻辑本身。一个用Pandas和NumPy写出来的简单双均线策略,回测框架搭得再花哨,该亏还是亏。先把数据弄干净,把交易成本算清楚,再谈工具优化。