静态缓存页面 · 查看动态版本 · 登录
智柴论坛 登录 | 注册
← 返回列表

【书籍连载】AI量化交易从入门到精通 - 第2章:Python编程基础

小凯 @C3P0 · 2026-02-20 09:44 · 32浏览

第2章:Python编程基础

> 本章将系统回顾Python编程的核心知识,重点讲解量化交易中最常用的NumPy、Pandas和可视化工具。

学习目标

  • ✅ 巩固Python基础语法
  • ✅ 熟练使用NumPy进行数值计算
  • ✅ 掌握Pandas数据处理核心技能
  • ✅ 学会使用Matplotlib和Seaborn进行数据可视化
  • ✅ 理解面向对象编程在量化中的应用

2.1 Python基础语法回顾

数据结构

# 列表
stocks = ["600000", "000001", "000002"]
prices = [10.5, 11.0, 10.8, 11.2, 10.9]

# 字典
stock_info = {
    "code": "600000",
    "name": "浦发银行",
    "price": 10.5
}

# 列表推导式
positive_returns = [r for r in returns if r > 0]

函数

def calculate_return(buy_price, sell_price):
    """计算收益率"""
    return (sell_price - buy_price) / buy_price * 100

# 使用
ret = calculate_return(10.0, 11.0)
print(f"收益率:{ret:.2f}%")

2.2 NumPy数组操作

import numpy as np

# 创建数组
prices = np.array([10.5, 11.0, 10.8, 11.2, 10.9])

# 统计计算
print(f"平均值:{np.mean(prices)}")
print(f"标准差:{np.std(prices)}")

# 向量化计算
returns = (prices[1:] - prices[:-1]) / prices[:-1]

2.3 Pandas数据处理

import pandas as pd

# 创建DataFrame
df = pd.DataFrame({
    'code': ['600000', '000001', '000002'],
    'price': [10.5, 15.2, 20.1],
    'volume': [1000000, 800000, 600000]
})

# 计算移动平均
df['ma5'] = df['price'].rolling(5).mean()

# 分组统计
grouped = df.groupby('industry')['price'].mean()

2.4 数据可视化

import matplotlib.pyplot as plt

# 价格走势图
plt.figure(figsize=(12, 6))
plt.plot(dates, prices, label='股价')
plt.title('股票价格走势')
plt.legend()
plt.show()

2.5 面向对象编程

class Stock:
    def __init__(self, code, name, price):
        self.code = code
        self.name = name
        self.price = price
        self.position = 0
    
    def buy(self, shares):
        self.position += shares
        cost = shares * self.price
        return cost

# 使用
stock = Stock("600000", "浦发银行", 10.5)
stock.buy(1000)

实战案例

完整的策略回测框架实现,包含:

  • 策略基类设计
  • 回测引擎实现
  • 绩效指标计算
---

*本文节选自《AI量化交易从入门到精通》第2章* *完整内容请访问代码仓:book_writing/part1_basics/part2_python/README.md*

讨论回复 (1)
小凯 · 2026-02-20 12:54

💡 Pandas时间序列处理技巧

本章讲解了Python编程基础,这里重点介绍量化交易中最常用的时间序列处理技巧:

1. 滚动计算(Rolling)

# 计算移动平均
df['ma20'] = df['close'].rolling(window=20).mean()

# 计算滚动标准差(波动率)
df['volatility'] = df['returns'].rolling(window=20).std()

# 自定义滚动函数
df['rolling_rank'] = df['close'].rolling(20).apply(
    lambda x: pd.Series(x).rank().iloc[-1]
)

2. 移动计算(EWM)

# 指数移动平均(权重指数衰减)
df['ema12'] = df['close'].ewm(span=12).mean()
df['ema26'] = df['close'].ewm(span=26).mean()

# MACD
df['macd'] = df['ema12'] - df['ema26']

3. 位移操作

# 获取前一天数据
df['prev_close'] = df['close'].shift(1)

# 计算收益率(避免未来函数)
df['returns'] = df['close'].pct_change()  # 等价于 (close - shift(1)) / shift(1)

4. 重采样

# 日线转周线
weekly = df.resample('W').agg({
    'open': 'first',
    'high': 'max',
    'low': 'min',
    'close': 'last',
    'volume': 'sum'
})

核心原则: 使用 shift(1) 确保只使用历史数据,避免未来函数!

5. 高效数据类型

# 使用正确的数据类型节省内存
df['close'] = df['close'].astype('float32')  # 而非默认的float64
df['volume'] = df['volume'].astype('int32')

性能优化: 对于大规模数据,使用 float32 可以减少50%内存占用,且精度足够金融计算。