做加密量化绕不开 pandas。你的行情是表格,指标是列,回测引擎吃的就是带时间索引的 DataFrame——vectorbt、Freqtrade、你 strategy/ 里的策略类,全接这种数据结构。
但大多数人学 pandas 的方式不对:啃语法书、背 API,学完还是不会处理一根 K 线。
这篇是我给自己整理的 pandas 速成路线,思路就一条:不学语法,用真实加密数据驱动学。pandas 在量化里只干 4 件事——读数据进来、整理成时间序列表格、算技术指标、做统计分析。我把它拆成 6 步,每步一组概念 + 一段能在 JupyterLab 里直接跑的代码。走完,你能独立从 ccxt 取数 → pandas 处理 → vectorbt 回测走通全链路。
环境假设:你有一个装好 ccxt + pandas + vectorbt 的 Python 环境(我是 LynxCrypto 项目里的 .venv),JupyterLab 已开。没有的话,pip install ccxt pandas vectorbt jupyterlab 就齐了。
先打底(可选,但推荐过一遍)
如果 pandas 零基础,先花 30–60 分钟过一遍这几个 HTML 教程,都能直接复制代码:
- Kaggle 免费课程 Pandas — https://www.kaggle.com/learn/pandas 浏览器里直接跑代码 + 练习题,免费。过一遍 Series / DataFrame / 索引 / 分组的概念最顺。
- Pandas 官方 10 Minutes to pandas — https://pandas.pydata.org/docs/user_guide/10min.html 官方速览,代码全可复制,建立"pandas 能干什么"的全局印象。
- 《Python for Data Analysis》(pandas 作者 Wes McKinney)第 5–9 章,有免费在线版,偏实战,可当字典查。
过完上面任一个再回来走下面的 6 步,会比纯啃语法快得多。
Step 1 — 把行情数据变成 DataFrame(读取 + 结构)
学到的概念: Series、DataFrame、index(索引)、columns、dtypes、head/tail、to_datetime
任务: 用 ccxt 从交易所拉 BTC/USDT 的 K 线(OHLCV),转成带时间索引的表格。
| |
理解点: 表格里每一列是一个 Series,整张表是 DataFrame,最左边那列时间是 index。索引是 pandas 时间序列操作的地基,后面所有重采样、切片都靠它。
Step 2 — 时间序列整理与切片(索引、切片、重采样)
学到的概念: DatetimeIndex、loc/iloc 切片、resample 重采样、时区
任务: 1 分钟线重采样成 4 小时线,取最近一段时间。
| |
理解点: loc 用标签(时间字符串/索引值)切,iloc 用位置(第几个)切。resample 是把高频数据压缩成低频的核心工具——量化里 1m→4h、1h→1d 全靠它。
Step 3 — 手算技术指标(列运算、rolling、shift、ewm)
学到的概念: 列运算、rolling(滚动窗口)、shift(位移)、ewm(指数加权)、apply/lambda
任务: 不用现成指标库,自己手算一遍 MA、RSI、MACD,理解指标原理。
| |
理解点: rolling(20).mean() 是"开个 20 个元素的滑动窗口算均值",几乎所有趋势指标都从这来;shift(1) 能把数据往后挪一格,常用来"今天的值对比昨天的值";ewm 是带衰减权重的均值,RSI/MACD 都用它。手算一遍,你就明白 ft-pandas-ta 里那些现成函数底下在干什么。
Step 4 — 多资产对齐(concat、merge、相关性)
学到的概念: concat、merge/join、多资产时间对齐、fillna、corr(相关性)
任务: 把 BTC 和 ETH 的收盘价对齐到一张表,算它们的相关性。
| |
理解点: 多资产策略(配对交易、跨币种套利)的核心是"时间对齐"——两个币种时间戳对不齐就 fillna 或 dropna,concat(axis=1) 是横向合并的主力。BTC 和 ETH 的高相关是加密市场的基本事实,配对交易和统计套利都建在它上面。
Step 5 — 统计与可视化(describe、groupby、绘图)
学到的概念: describe、pct_change(收益率)、groupby(分组)、agg(聚合)、plot
任务: 算收益率分布、按天/按小时分组看规律、画图。
| |
理解点: describe() 是最快的数据体检;groupby 是"按某列分组再分别算"——量化里按小时/星期/月份找规律全靠它;收益率的分布形状(是否正态、有没有肥尾)决定策略的风险假设。加密收益率有明显的肥尾,这是为什么马丁格尔长期必输(见我上篇的爆仓数学)。
Step 6 — 衔接 vectorbt(把 DataFrame 喂给回测引擎)
学到的概念: 这一步不学新 pandas,是理解"研究产物如何进回测"——pandas DataFrame 就是 vectorbt 的标准输入。
任务: 用 Step 3 算的 MA20 做一个穿越信号,喂给 vectorbt 回测。
| |
理解点: pandas 到这一步就是"成品数据"——vectorbt、你 strategy/ 里的策略类,吃的就是这种带时间索引的 DataFrame。研究阶段在 notebook 里试想法(这几步),定稿的逻辑提炼回 strategy/ 的 .py 模块。这就是 Jupyter 和工程代码的分工:notebook 是草稿纸,.py 是交付件。
学完后你能做什么
- pandas 在量化里的 6 个核心动作(读 / 切 / 算指标 / 对齐 / 统计 / 喂回测)你都过了一遍真实加密数据
- 能独立从 ccxt 取数 → pandas 处理 → vectorbt 回测走通全链路
- 接下来:把这些手算的指标和信号,对照你
strategy/里已有的策略看一遍(我是对照 MacdCross),理解"notebook 探索版"和"工程模块版"的对应关系
四个反模式(我踩过,你别踩)
- 别在一个 notebook 里塞十个想法 —— 一个 notebook 一个研究问题,否则三个月后你自己都看不懂。
- notebook 顶部写清假设和结论 —— 回看时先看这两条,再看代码。
- 确定下来的逻辑要提炼回
.py—— notebook 只留研究过程,别让 notebook 变成乱炖。 - 别只看不跑 —— 每段代码都要自己敲一遍改参数,看输出变了什么,光看学不会。
这篇是 LynxCrypto 系列的实战入门。系列其他文章:研究蓝图 · 从网格马丁到 Alpha(上篇) · 证伪篇 · WFO 终审 · 工具篇