Python量化入门pandas

Python 量化入门:从零到第一个回测脚本


为什么要学 Python

做量化交易,Python 是事实上的标准语言。原因很简单:

  • 生态完善——pandas/numpy 做数据分析,matplotlib 画图,backtrader/zipline 做回测
  • 上手快——语法接近自然语言,有编程基础的人一周就能上手
  • 社区庞大——遇到问题几乎都能搜到答案
  • AI 友好——所有 LLM(包括这个 Agent)都精通 Python,不会写?让 AI 帮你写

需要学到什么程度? 够用就行。你不需要成为 Python 专家,只需要能:

  1. 用 pandas 读取和处理数据
  2. 写简单的策略逻辑
  3. 画 K 线图和收益曲线

环境搭建

安装 Python

推荐使用 uv(极速包管理器):

# WSL / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# 创建项目环境
uv venv
source .venv/bin/activate

安装必备库

uv pip install pandas numpy matplotlib duckdb

各库的作用:

用途
pandas数据处理,表格操作
numpy数值计算
matplotlib绘图可视化
duckdb嵌入式数据库,查行情数据

Python 基础——只学有用的

变量和数据类型

# 数字
price = 3.25          # float(浮点数)
shares = 100          # int(整数)

# 字符串
code = '000001.SZ'    # str

# 布尔值
is_bullish = True     # bool

# 列表(一组数据)
prices = [3.25, 3.28, 3.22, 3.30, 3.27]

条件判断

close = 3.28
ma20 = 3.15

if close > ma20:
    print("✅ 收盘价在均线上方,看多信号")
elif close < ma20 * 0.95:
    print("❌ 收盘价远低于均线,看空信号")
else:
    print("➡️ 横盘震荡,观望")

循环

# 遍历股票列表
stock_codes = ['000001.SZ', '000002.SZ', '000300.SH']

for code in stock_codes:
    print(f"正在处理: {code}")

# 批量计算收益率
returns = []
for i in range(1, len(prices)):
    daily_return = (prices[i] - prices[i-1]) / prices[i-1]
    returns.append(daily_return)

函数

def calc_ma(prices, window=20):
    """计算移动平均线"""
    if len(prices) < window:
        return None
    return sum(prices[-window:]) / window

ma = calc_ma(prices, window=5)
print(f"5日均线: {ma:.2f}")

pandas——量化核心工具

pandas 是量化交易中最常用的库。它的核心是 DataFrame(数据表)。

读取数据

import pandas as pd

# 从 CSV 读取
df = pd.read_csv('daily_data.csv')

# 从 DuckDB 读取
import duckdb
conn = duckdb.connect('data/quant.duckdb')
df = conn.execute("""
    SELECT date, open, high, low, close, volume 
    FROM stock_daily 
    WHERE code = '000001.SZ'
    ORDER BY date
""").fetchdf()

查看数据

df.head()        # 前5行
df.tail()        # 后5行
df.info()        # 数据概况
df.describe()    # 统计摘要

输出示例:

         date   open   high    low  close    volume
0  2025-01-02  3.15   3.18   3.12   3.16  1250000
1  2025-01-03  3.16   3.20   3.14   3.19  1380000
2  2025-01-06  3.19   3.22   3.17   3.20  1420000

基础操作

# 选择列
closes = df['close']

# 筛选行
up_days = df[df['close'] > df['open']]  # 上涨日

# 新增列
df['return'] = df['close'].pct_change()  # 每日收益率
df['ma20'] = df['close'].rolling(20).mean()  # 20日均线

# 缺失值处理
df = df.dropna()  # 删除空值

时间序列操作

# 设置日期索引
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')

# 按时间筛选
df_2025 = df['2025':]         # 2025年至今
df_quarter = df['2025-Q1']    # 2025年一季度

# 重采样(日线→月线)
monthly = df['close'].resample('M').last()
monthly_return = monthly.pct_change()

matplotlib——画图看趋势

import matplotlib.pyplot as plt

# 画收盘价和均线
plt.figure(figsize=(12, 6))
plt.plot(df.index, df['close'], label='收盘价', linewidth=1)
plt.plot(df.index, df['ma20'], label='20日均线', linewidth=1.5, linestyle='--')
plt.title('000001.SZ 收盘价走势')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

第一个策略回测脚本

把学到的知识用起来——写一个简单的双均线策略

import pandas as pd
import duckdb

# 1. 读取数据
conn = duckdb.connect('data/quant.duckdb')
df = conn.execute("""
    SELECT date, close FROM stock_daily 
    WHERE code = '000001.SZ' AND date >= '2020-01-01'
    ORDER BY date
""").fetchdf()

df['date'] = pd.to_datetime(df['date'])

# 2. 计算均线
df['ma5'] = df['close'].rolling(5).mean()
df['ma20'] = df['close'].rolling(20).mean()

# 3. 生成信号
df['signal'] = 0
df.loc[df['ma5'] > df['ma20'], 'signal'] = 1   # 金叉:买入
df.loc[df['ma5'] <= df['ma20'], 'signal'] = 0  # 死叉:卖出

# 4. 计算持仓和收益
df['position'] = df['signal'].shift(1)  # 次日开盘执行
df['return'] = df['close'].pct_change()
df['strategy'] = df['position'] * df['return']

# 5. 统计结果
total_return = (df['strategy'] + 1).prod() - 1
days = len(df)
annual_return = (1 + total_return) ** (252 / days) - 1

print(f"📊 === 双均线策略回测 ===")
print(f"回测周期: {df['date'].iloc[0].date()} ~ {df['date'].iloc[-1].date()}")
print(f"总收益率: {total_return:.2%}")
print(f"年化收益率: {annual_return:.2%}")
print(f"交易天数: {days}")

下一步

Python 基础已经够用了。你已经能:

  • ✅ 搭建 Python 环境
  • ✅ 用 pandas 处理数据
  • ✅ 写简单的策略逻辑
  • ✅ 算收益率

接下来进入真正的量化实战:

  1. DuckDB 搭建 A 股量化数据库 →——管理全市场数据
  2. 布林带均值回归策略 →——第一个完整策略
  3. Barra 10 因子选股 →——专业级因子框架

本文是量化学习路径的第 1 步。

💬 评论