第1章:统计工具准备
各位同学,欢迎来到《统计套利在外汇市场的应用》课程。
我是你们的老朋友,一个在外汇市场摸爬滚打多年的量化交易员。今天咱们开始第一课——把吃饭的家伙先备齐了。
你想想看,做统计套利,说白了就是跟数据打交道。没有趁手的工具,再好的策略也是空中楼阁。我个人习惯用Python,原因很简单:生态好、社区活跃、上手快。咱们这一章,就把Python环境、Pandas、NumPy和数据接口这些基础工具一一搞定。
1.1 Python环境搭建
先说环境。我见过太多新手卡在环境配置上,一卡就是半天。其实没那么复杂。
第一步:安装Python
我建议直接用Anaconda。为什么?因为它把Python解释器、常用库、包管理器都打包好了。你下载一个,装完就能用。
- 去Anaconda官网下载对应系统的安装包
- 安装时记得勾选「Add Anaconda to my PATH environment variable」
- 装完后打开终端,输入
python --version验证
第二步:创建虚拟环境
做量化交易,不同项目可能依赖不同版本的库。虚拟环境就是用来隔离这些依赖的。我个人习惯每个项目建一个独立环境。
# 创建虚拟环境
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.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()
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())
本章知识体系
下面这张图,帮你理清本章的核心逻辑:
这张图展示了咱们的工具栈。从环境搭建到数据获取,再到Pandas和NumPy的数据处理,最后进入策略回测。每一步都环环相扣。
好了,工具都备齐了。下一章咱们就开始实战——用这些工具做外汇数据的统计分析。记住,工欲善其事,必先利其器。把这些基础打牢,后面的路就好走了。