第1章:统计工具准备

各位同学,欢迎来到《统计套利在外汇市场的应用》课程。

我是你们的老朋友,一个在外汇市场摸爬滚打多年的量化交易员。今天咱们开始第一课——把吃饭的家伙先备齐了。

你想想看,做统计套利,说白了就是跟数据打交道。没有趁手的工具,再好的策略也是空中楼阁。我个人习惯用Python,原因很简单:生态好、社区活跃、上手快。咱们这一章,就把Python环境、Pandas、NumPy和数据接口这些基础工具一一搞定。

1.1 Python环境搭建

先说环境。我见过太多新手卡在环境配置上,一卡就是半天。其实没那么复杂。

第一步:安装Python

我建议直接用Anaconda。为什么?因为它把Python解释器、常用库、包管理器都打包好了。你下载一个,装完就能用。

  • 去Anaconda官网下载对应系统的安装包
  • 安装时记得勾选「Add Anaconda to my PATH environment variable」
  • 装完后打开终端,输入 python --version 验证
⚠️ 注意: 我曾经遇到过一位学员,装了两个版本的Python,结果包冲突搞了一周。建议你只保留一个Python环境,用Anaconda自带的就行。

第二步:创建虚拟环境

做量化交易,不同项目可能依赖不同版本的库。虚拟环境就是用来隔离这些依赖的。我个人习惯每个项目建一个独立环境。

# 创建虚拟环境
conda create -n statarb python=3.9

# 激活环境
conda activate statarb

# 安装基础包
conda install numpy pandas matplotlib jupyter

嗯,这里要注意:环境名别起得太随意。我一般用项目名缩写,比如 statarb 代表统计套利。

第三步:安装Jupyter Notebook

做数据分析,Jupyter Notebook是神器。它让你能边写代码边看结果,特别适合探索性分析。

# 安装Jupyter
conda install jupyter

# 启动
jupyter notebook

启动后浏览器会自动打开,你会看到一个文件管理界面。新建一个Notebook,咱们就可以开始写代码了。

1.2 Pandas入门

Pandas是Python数据分析的核心库。说白了,它就是Excel的超级升级版。做外汇统计套利,你每天都要跟它打交道。

核心数据结构:Series和DataFrame

  • Series:一维数组,带标签。可以理解为一列数据。
  • DataFrame:二维表格,带行和列标签。可以理解为一张Excel表。

我记得刚开始做外汇回测时,数据量一大,Excel就卡死。换成Pandas后,几百万行数据秒处理。这就是差距。

import pandas as pd

# 创建一个简单的DataFrame
data = {
    '货币对': ['EUR/USD', 'GBP/USD', 'USD/JPY'],
    '买入价': [1.1050, 1.2500, 110.50],
    '卖出价': [1.1052, 1.2503, 110.53]
}
df = pd.DataFrame(data)
print(df)

常用操作

操作 代码 说明
读取CSV pd.read_csv('data.csv') 从文件加载数据
查看前5行 df.head() 快速预览数据
选择列 df['买入价'] 获取单列
筛选行 df[df['买入价'] > 1.10] 条件过滤
缺失值处理 df.dropna() 删除空值行
💡 小技巧: 做外汇数据清洗时,经常遇到时间戳格式不统一。用 pd.to_datetime() 可以一键转换。我曾经因为时间格式问题,回测结果差了十万八千里,后来才发现是数据对齐出了问题。

1.3 NumPy基础

NumPy是Pandas的底层引擎。它处理的是数值计算,速度比纯Python快几十倍。做统计套利,你免不了要算均值、方差、协方差这些统计量,NumPy就是干这个的。

核心对象:ndarray

说白了,就是多维数组。你可以把它想象成一个网格,里面全是数字。

import numpy as np

# 创建数组
arr = np.array([1.1050, 1.2500, 110.50])
print(arr)

# 创建二维数组(矩阵)
matrix = np.array([[1.1050, 1.1052],
                   [1.2500, 1.2503]])
print(matrix)

常用统计函数

  • np.mean():计算均值
  • np.std():计算标准差
  • np.corrcoef():计算相关系数矩阵
  • np.cov():计算协方差矩阵

你想想看,统计套利的核心就是找相关性。两个货币对的相关性高,价差才会均值回归。NumPy的 corrcoef 函数,我几乎每天都要用。

# 计算两个序列的相关系数
returns1 = np.array([0.01, -0.02, 0.03, -0.01, 0.02])
returns2 = np.array([0.015, -0.025, 0.035, -0.015, 0.025])

corr = np.corrcoef(returns1, returns2)[0, 1]
print(f'相关系数: {corr:.4f}')
🔑 关键点: 相关系数接近1或-1,说明两个货币对高度相关。这是统计套利的前提条件。如果相关系数低于0.7,我个人建议直接放弃这个组合。

1.4 数据获取API

工具都装好了,数据从哪来?外汇市场的数据源很多,我推荐几个常用的免费API。

1. OANDA API

OANDA是知名外汇经纪商,提供历史数据和实时行情。你需要先注册一个免费账号,拿到API Key。

import requests

# 获取EUR/USD历史数据
url = "https://api-fxpractice.oanda.com/v3/instruments/EUR_USD/candles"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
params = {
    "granularity": "D",  # 日线
    "count": 100         # 最近100根K线
}

response = requests.get(url, headers=headers, params=params)
data = response.json()
⚠️ 注意: API Key不要硬编码在代码里。我习惯用环境变量或者配置文件来管理。曾经有人把Key传到GitHub上,结果被滥用,损失不小。

2. Yahoo Finance API

Yahoo Finance也提供外汇数据,而且不需要注册。用 yfinance 库就能直接拉数据。

!pip install yfinance

import yfinance as yf

# 下载EUR/USD数据
eur_usd = yf.download('EURUSD=X', start='2023-01-01', end='2023-12-31')
print(eur_usd.head())

3. FRED API

美联储的FRED数据库提供宏观经济数据,比如利率、通胀率。这些数据在做统计套利时也很有用。

from fredapi import Fred

fred = Fred(api_key='YOUR_FRED_API_KEY')
data = fred.get_series('DEXUSEU')  # 美元兑欧元汇率
print(data.tail())
💡 小技巧: 数据获取后,记得检查数据质量。我一般会先画个折线图,看看有没有异常跳空或者缺失值。数据干净,策略才能靠谱。

本章知识体系

下面这张图,帮你理清本章的核心逻辑:

统计套利工具栈 Python环境搭建 Pandas入门 NumPy基础 数据获取API Anaconda + 虚拟环境 DataFrame操作 统计函数 OANDA / Yahoo / FRED 数据清洗 → 统计分析 → 策略回测

这张图展示了咱们的工具栈。从环境搭建到数据获取,再到Pandas和NumPy的数据处理,最后进入策略回测。每一步都环环相扣。

好了,工具都备齐了。下一章咱们就开始实战——用这些工具做外汇数据的统计分析。记住,工欲善其事,必先利其器。把这些基础打牢,后面的路就好走了。

专注资料整理