3、Python量化环境搭建:Anaconda安装、Jupyter Notebook配置、常用量化库介绍

说实话,很多做量化交易的朋友,一开始就栽在环境搭建上。

我见过太多人,策略逻辑写得头头是道,结果装个库报错半天,最后心态崩了。其实没必要,环境搭好了,后面至少省一半的精力。今天我就带你把这套东西捋顺。

3.1 为什么选Anaconda?

你可能会问:直接用Python官方版本不行吗?

行,但没必要。Anaconda相当于一个「全家桶」,把Python解释器、常用科学计算库、包管理工具都打包好了。我个人的习惯是,每做一个新项目,就用conda创建一个独立环境。为什么?因为不同项目依赖的库版本可能冲突。比如你一个策略用pandas 1.0,另一个用2.0,混在一起迟早出事。

我的经验: 曾经有一次,我同时维护三个CTA策略,因为共用同一个Python环境,升级一个库导致另一个策略的回测结果全变了。从那以后,我每个策略都单独建环境,再也没出过这种问题。

3.2 Anaconda安装步骤

下载地址我就不贴了,直接去官网选对应系统版本。安装时注意两点:

  • 勾选「Add Anaconda to my PATH environment variable」 —— 这样你才能在命令行直接敲conda命令
  • 安装路径不要有中文和空格 —— 这是老生常谈了,但总有人踩坑

装完后,打开终端(Windows用Anaconda Prompt),输入:

conda --version

能看到版本号,就说明装好了。

3.3 创建量化交易专用环境

我个人习惯给每个策略系列建一个环境。比如我们做商品CTA,可以这样:

conda create -n cta_trading python=3.9
conda activate cta_trading

这里python=3.9是我推荐的版本。太新的Python(比如3.12)有些量化库还没完全适配,太老的又缺特性。3.9是个稳妥的选择。

注意: 不要用系统自带的Python!我曾经图省事,直接用系统Python跑策略,结果升级系统时把Python环境搞崩了,回测数据全丢。血的教训。

3.4 Jupyter Notebook配置

Jupyter Notebook是我们做量化研究的利器。它的好处是:写一段代码,立刻看到结果,还能加文字说明。非常适合策略探索阶段。

安装很简单:

conda install jupyter notebook

启动:

jupyter notebook

浏览器会自动打开一个页面。这里我建议你做两件事:

  • 修改默认工作目录 —— 在配置文件里改,不然每次启动都要cd到你的策略文件夹
  • 安装jupyter_contrib_nbextensions —— 这个插件包能加很多实用功能,比如代码折叠、目录生成
conda install -c conda-forge jupyter_contrib_nbextensions
jupyter contrib nbextension install --user

嗯,装完之后,你会在Notebook里看到多了一个Nbextensions标签,勾上「Table of Contents」和「Collapsible Headings」,写策略文档会舒服很多。

3.5 常用量化库介绍

下面这几个库,是我们做商品CTA趋势跟踪的核心工具。我按使用频率排序讲。

3.5.1 pandas —— 数据处理的灵魂

说白了,pandas就是Python里的Excel,但比Excel强一百倍。它最核心的两个东西:

  • DataFrame —— 表格数据,行是时间,列是品种、价格、成交量等
  • Series —— 一列数据,比如收盘价序列

举个例子,读取CSV格式的期货日线数据:

import pandas as pd

df = pd.read_csv('rb888.csv', parse_dates=['date'], index_col='date')
print(df.head())

我在项目中遇到过最常用的pandas操作:

  • df['close'].rolling(20).mean() —— 计算20日均线
  • df['signal'] = df['close'] > df['ma20'] —— 生成交易信号
  • df['returns'] = df['close'].pct_change() —— 计算收益率
核心要点: pandas处理时间序列数据时,一定要把时间列设为索引。不然很多时间序列函数用不了。

3.5.2 numpy —— 数值计算的基础

numpy是pandas的底层引擎。它提供多维数组和大量数学函数。你写策略时可能不直接调用numpy,但pandas背后全靠它。

我个人觉得,numpy最实用的场景是:

  • 数组运算 —— 比Python原生列表快几十倍
  • 随机数生成 —— 做蒙特卡洛模拟时必备
  • 线性代数 —— 计算协方差矩阵、特征值等
import numpy as np

# 生成1000个正态分布的随机收益率
np.random.seed(42)
returns = np.random.normal(0, 0.01, 1000)

# 计算累计收益
cum_returns = np.cumprod(1 + returns)
print(cum_returns[-1])

3.5.3 matplotlib —— 可视化利器

做量化交易,不看图怎么行?matplotlib是Python最经典的绘图库。

我习惯这样画K线和均线:

import matplotlib.pyplot as plt

plt.figure(figsize=(12, 6))
plt.plot(df.index, df['close'], label='Close')
plt.plot(df.index, df['ma20'], label='MA20', linestyle='--')
plt.legend()
plt.title('螺纹钢主力合约日线')
plt.show()

这里有个小技巧:用plt.style.use('ggplot')可以让图表更好看。我刚开始做策略展示时,默认的matplotlib风格太丑,被领导吐槽过。后来换了ggplot风格,顺眼多了。

3.5.4 backtrader —— 回测框架

终于到重头戏了。backtrader是Python里最流行的量化回测框架之一。它把策略、数据、资金管理、业绩分析都封装好了。

一个最简单的双均线策略长这样:

import backtrader as bt

class SmaCross(bt.Strategy):
    params = (('pfast', 10), ('pslow', 30),)

    def __init__(self):
        sma_fast = bt.ind.SMA(period=self.params.pfast)
        sma_slow = bt.ind.SMA(period=self.params.pslow)
        self.crossover = bt.ind.CrossOver(sma_fast, sma_slow)

    def next(self):
        if not self.position:
            if self.crossover > 0:
                self.buy()
        elif self.crossover < 0:
            self.sell()

你想想看,如果没有backtrader,你要自己处理滑点、手续费、仓位管理,那得写多少代码?

避坑指南: 我曾经在回测时忘记设置手续费,结果策略看起来年化50%,实盘一跑直接亏。backtrader里用cerebro.broker.setcommission()设置手续费,千万别省这一步。

3.6 知识体系总览

下面这张图,帮你理清今天讲的所有内容之间的关系:

量化环境搭建 Anaconda 安装 Jupyter Notebook 常用量化库 conda环境 包管理 交互式编程 插件扩展 pandas numpy matplotlib backtrader 环境搭建 → 数据处理 → 策略回测 → 实盘交易 (这是整个量化系统的技术栈路径)

3.7 环境验证

装完所有东西后,我建议你跑一个简单的验证脚本,确保一切正常:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import backtrader as bt

print(f"pandas版本: {pd.__version__}")
print(f"numpy版本: {np.__version__}")
print(f"backtrader版本: {bt.__version__}")

# 生成随机数据测试
data = np.random.randn(100)
df = pd.DataFrame(data, columns=['value'])
df['ma'] = df['value'].rolling(10).mean()
print(df.head(15))

如果没报错,恭喜你,环境搭好了。接下来就可以开始真正的策略开发了。

最后说一句: 环境搭建看起来琐碎,但这是整个量化系统的基础。我见过太多人因为环境问题浪费大量时间。花半小时把这一步做好,后面至少省你十小时。

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