第二章 工具与数据准备:Python环境搭建、Pandas与NumPy基础、数据源获取

做配对交易,说白了就是跟数据打交道。没有趁手的工具,再好的策略也跑不起来。

这一章,我带你把环境搭好,把基础打牢。别嫌烦,这些准备工作做好了,后面写策略的时候你会感谢我的。

2.1 Python环境搭建

我个人习惯用Anaconda来管理Python环境。为什么?因为它把科学计算常用的包都打包好了,省得你一个一个去pip install。

我的建议: 别用系统自带的Python,也别用最新版Python。用Anaconda的Python 3.8或3.9版本,稳定,坑少。

安装步骤其实很简单:

  1. 去Anaconda官网下载对应系统的安装包
  2. 一路默认安装,记得勾选"Add Anaconda to my PATH environment variable"
  3. 打开终端或Anaconda Prompt,输入 python --version 确认安装成功

嗯,这里要注意:如果你用的是Mac或Linux,建议用命令行安装,别用图形界面。我在项目中遇到过图形界面装到一半卡死的情况,后来全改用命令行,再没出过问题。

装好之后,我建议你创建一个独立的虚拟环境:

conda create -n pair_trading python=3.9
conda activate pair_trading

这样你的配对交易环境就跟其他项目隔离开了。万一搞崩了,删掉重来就是,不影响别的项目。

2.2 Pandas与NumPy基础

这两个库是量化交易的左膀右臂。NumPy管数值计算,Pandas管数据处理。说白了,一个负责算,一个负责装。

2.2.1 NumPy:数组与矩阵运算

配对交易里,你经常要算协方差、相关系数、回归系数。这些用原生Python写,慢得你想哭。NumPy用C语言在底层实现,速度能快几十倍。

看个最简单的例子:

import numpy as np

# 创建两个价格序列
price_a = np.array([100.5, 101.2, 102.1, 101.8, 103.0])
price_b = np.array([50.2, 50.8, 51.3, 51.0, 51.7])

# 计算收益率
ret_a = np.diff(price_a) / price_a[:-1]
ret_b = np.diff(price_b) / price_b[:-1]

# 计算相关系数
corr = np.corrcoef(ret_a, ret_b)[0, 1]
print(f"收益率相关系数: {corr:.4f}")

你想想看,如果不用NumPy,光写个相关系数就得十几行循环。用NumPy,一行搞定。

核心函数速查:
  • np.array() — 创建数组
  • np.mean() / np.std() — 均值/标准差
  • np.corrcoef() — 相关系数矩阵
  • np.linalg.lstsq() — 最小二乘回归(配对交易的核心!)

2.2.2 Pandas:时间序列处理利器

做配对交易,你的数据全是带时间戳的。Pandas的DataFrame就是为这个场景设计的。

我曾经犯过一个低级错误:用Excel手动整理数据,结果日期格式不统一,导致回测结果全错了。后来我学乖了,所有数据都用Pandas处理,格式统一,还能自动对齐时间轴。

基础操作看这里:

import pandas as pd

# 读取CSV数据
df = pd.read_csv('stock_data.csv', parse_dates=['date'], index_col='date')

# 查看前5行
print(df.head())

# 计算滚动相关系数(配对交易常用)
df['corr_60'] = df['ret_a'].rolling(window=60).corr(df['ret_b'])

# 缺失值处理
df = df.dropna()  # 或者 df.fillna(method='ffill')
避坑指南: 我曾经在回测时忘了处理停牌日的数据,结果价差序列里出现了NaN,策略信号全乱了。记住:dropna()fillna() 是你的好朋友。

2.3 数据源获取

数据是量化交易的血液。没有数据,策略就是空中楼阁。

国内常用的数据源有两个:Tushare和JoinQuant。我两个都用过,说说我的感受。

2.3.1 Tushare:免费但有限制

Tushare是老牌的数据接口,免费用户能拿到日线数据,基本够用。但要注意,它有限流,一分钟只能请求200次。

安装和基本用法:

pip install tushare

import tushare as ts

# 设置token(去官网注册获取)
ts.set_token('your_token_here')
pro = ts.pro_api()

# 获取两只股票的历史日线数据
df_600519 = pro.daily(ts_code='600519.SH', start_date='20200101', end_date='20231231')
df_000858 = pro.daily(ts_code='000858.SZ', start_date='20200101', end_date='20231231')

# 合并数据
df = pd.merge(df_600519[['trade_date', 'close']], 
              df_000858[['trade_date', 'close']], 
              on='trade_date', 
              suffixes=('_茅台', '_五粮液'))

我个人习惯把数据存到本地CSV文件里,这样下次回测就不用重复请求了。既省时间,又不会被限流卡住。

2.3.2 JoinQuant:回测平台自带数据

如果你用JoinQuant的在线回测平台,数据是直接提供的,不用自己拉。但如果你要本地跑,还是得用Tushare或者自己找数据源。

JoinQuant的好处是数据质量高,复权处理得干净。坏处是本地用起来没那么灵活。

我的经验: 初期用Tushare就够了。等策略成熟了,想上实盘,再考虑付费数据源。别一开始就花冤枉钱。

2.4 本章知识体系

下面这张图,把本章的核心逻辑串起来了。你一看就明白:

配对交易工具与数据准备 Python环境 Anaconda + 虚拟环境 核心库 NumPy + Pandas 数据源 Tushare / JoinQuant conda create pip install 环境隔离 数组运算 时间序列 滚动统计 数据清洗 缺失值处理 对齐合并 API调用 本地缓存 数据验证 最终目标:搭建可复用的配对交易数据流水线 环境稳定 → 库熟练 → 数据可靠 → 策略可跑

说白了,这一章就是帮你把地基打牢。环境搭好了,库用熟了,数据源搞定了,后面写策略就是水到渠成的事。

本章要点回顾:
  • 用Anaconda创建独立虚拟环境,别污染系统Python
  • NumPy负责数值计算,Pandas负责数据处理,各司其职
  • 数据源推荐Tushare起步,本地缓存是必须养成的习惯
  • 数据清洗(缺失值、对齐)是回测前最重要的一步,别偷懒

好了,工具准备好了。下一章,我们开始真正动手,写配对交易的策略逻辑。


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