第1章:工欲善其事,必先利其器

做量化交易,说白了就是跟数据打交道。有色金属这个领域,数据量说大不大,说小也不小——日线数据、分钟数据、库存数据、升贴水、LME持仓……要是没有一套顺手的工具,光整理数据就能把你累趴下。

我刚开始做有色金属量化的时候,用的是Excel+VBA。后来数据量上来了,Excel直接卡死。那叫一个崩溃。后来转到了Python,才算是打开了新世界的大门。

这一章,咱们就把环境搭好。别嫌麻烦,这一步做好了,后面30章你会感谢我的。

1.1 Anaconda:一站式数据科学工具箱

Python本身是个好语言,但它的包管理有点让人头疼。你装个numpy,发现要依赖这个那个,版本还对不上。我当年就踩过这个坑,装个库装了一下午。

Anaconda就是来解决这个问题的。它把Python解释器、常用的数据科学库、包管理器conda,一股脑全给你打包好了。你下载一个,就等于拥有了一个完整的数据科学环境。

为什么推荐Anaconda?
  • 自带150+常用数据科学库,省去手动安装的麻烦
  • conda包管理器能自动处理依赖关系,避免版本冲突
  • 支持创建虚拟环境,不同项目用不同Python版本,互不干扰

安装步骤很简单,去官网下载对应系统的版本就行。我个人建议选Python 3.9或3.10版本,太新的版本有些库还没适配好。

我的小建议:安装时记得勾选「Add Anaconda to my PATH environment variable」。虽然安装向导会提醒你不推荐,但相信我,勾上它后面省事很多。

1.2 Jupyter Notebook:交互式编程利器

装好Anaconda,你就自动拥有了Jupyter Notebook。这东西有多好用?这么说吧,我现在80%的量化分析工作都在上面完成。

Jupyter Notebook把代码、运行结果、图表、文字说明整合在一个文档里。你写一段代码,立刻就能看到结果。发现不对?改一下重新运行。这种即时反馈的感觉,比写脚本然后运行看输出爽太多了。

Jupyter Notebook的核心操作:
  • Cell(单元格):代码写在这里,按Shift+Enter运行
  • Markdown模式:可以写文字说明、公式、标题
  • 魔法命令:比如%matplotlib inline让图表直接显示在Notebook里

启动方法:打开终端(或Anaconda Prompt),输入jupyter notebook,浏览器就会自动打开一个页面。新建一个Notebook,就可以开始你的量化之旅了。

注意:Jupyter Notebook的变量是全局共享的。如果你在一个Cell里定义了变量,另一个Cell也能访问。这既是优点也是坑——我曾经因为Cell执行顺序搞乱,查了半天bug。建议养成「从上到下顺序执行」的习惯。

1.3 NumPy:高性能数值计算基础

做量化交易,离不开数组和矩阵运算。Python自带的列表虽然能用,但速度太慢。举个例子,计算100万个数的平方,用列表要几百毫秒,用NumPy只要几毫秒。

NumPy的核心是ndarray(N维数组)。它比Python列表快的原因有两个:一是底层用C语言实现,二是支持向量化运算——说白了就是一次性对整个数组操作,不用写循环。

import numpy as np

# 创建数组
prices = np.array([68000, 68200, 67900, 68500, 68300])

# 向量化运算:计算收益率
returns = (prices[1:] - prices[:-1]) / prices[:-1]
print(returns)
# 输出: [ 0.0029 -0.0044  0.0088 -0.0029]

# 统计指标
print(f"均值: {np.mean(returns):.4f}")
print(f"标准差: {np.std(returns):.4f}")

我在项目中经常用NumPy处理LME铜的日线数据。几万行数据,计算移动平均、波动率,都是一瞬间的事。

避坑指南:我曾经在计算收益率时直接用pct_change(),结果发现第一行是NaN。后来养成习惯,用np.diff()或手动切片,心里更有底。

1.4 Pandas:表格数据处理神器

如果说NumPy是数组,那Pandas就是带标签的表格。它有两个核心数据结构:Series(一维)和DataFrame(二维)。

DataFrame就像Excel表格,但功能强大得多。你可以按条件筛选、分组聚合、合并连接、处理缺失值……而且语法非常直观。

import pandas as pd

# 创建DataFrame
data = {
    '日期': ['2024-01-02', '2024-01-03', '2024-01-04'],
    '沪铜主力': [68000, 68200, 67900],
    '沪铝主力': [19200, 19150, 19300]
}
df = pd.DataFrame(data)
df['日期'] = pd.to_datetime(df['日期'])
df.set_index('日期', inplace=True)

# 计算涨跌幅
df['铜涨跌幅'] = df['沪铜主力'].pct_change()
print(df)

Pandas最让我喜欢的是它的时间序列功能。有色金属数据天然带有时间属性,Pandas的resample、rolling、shift这些方法,简直就是为量化交易量身定做的。

Pandas常用操作速查:
操作代码说明
读取CSVpd.read_csv('data.csv')最常用的数据导入方式
查看前5行df.head()快速预览数据
描述统计df.describe()均值、标准差、分位数等
条件筛选df[df['价格'] > 70000]选出价格大于70000的行
分组聚合df.groupby('品种').mean()按品种分组计算均值

1.5 Matplotlib与Seaborn:数据可视化入门

数据算出来了,怎么看?光看数字不够直观。一张好的图表,能让你一眼看出趋势、异常点、相关性。

Matplotlib是Python可视化的老祖宗,功能强大但API有点啰嗦。Seaborn是在Matplotlib基础上封装的,图表更漂亮,代码更简洁。

import matplotlib.pyplot as plt
import seaborn as sns

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 生成示例数据
dates = pd.date_range('2024-01-01', periods=100, freq='D')
prices = 68000 + np.cumsum(np.random.randn(100) * 200)

# Matplotlib画折线图
plt.figure(figsize=(10, 5))
plt.plot(dates, prices, label='沪铜价格', color='#E74C3C')
plt.title('沪铜期货价格走势')
plt.xlabel('日期')
plt.ylabel('价格(元/吨)')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

# Seaborn画分布图
plt.figure(figsize=(8, 4))
sns.histplot(prices, bins=20, kde=True, color='#3498DB')
plt.title('价格分布')
plt.show()

我个人习惯用Matplotlib做精细调整,用Seaborn做快速探索。比如看两个品种的相关性,sns.pairplot()一行代码就能画出所有组合的散点图矩阵,非常方便。

注意:中文显示是个老问题。Windows系统用SimHei,Mac用PingFang SC,Linux可能需要安装中文字体。如果显示方框,记得检查字体设置。

本章知识体系

下面这张图,帮你理清本章的知识脉络:

Python数据分析环境 Anaconda Jupyter Notebook NumPy & Pandas 包管理 / 虚拟环境 交互式编程 / 即时反馈 数组运算 / 表格处理 Matplotlib & Seaborn 精细图表定制 快速统计可视化 有色金属量化择时交易实战

环境搭好了,后面的事情就顺了。记住,工具只是手段,关键还是你对市场的理解。但话说回来,连工具都用不顺,再好的策略也跑不出来。

嗯,这一章就到这儿。把Anaconda装好,打开Jupyter Notebook,跑一遍上面的代码。有问题随时查文档,或者回来翻翻这一章。


专注资料整理