📚 目录

  1. 股票数据获取
  2. 股票数据预处理
  3. 基本数据分析
  4. 时间序列分析
  5. 技术指标计算
  6. 回测策略实现
  7. 参考资料
  8. 出站链接

1. 股票数据获取

Pandas 可以通过第三方库获取股票数据,常见的方法包括使用 yfinancepandas_datareader 库。

✅ 使用 yfinance 获取股票数据:

import yfinance as yf

# 下载苹果公司 (AAPL) 的历史股票数据
df = yf.download('AAPL', start='2020-01-01', end='2021-01-01')
print(df.head())

✅ 使用 pandas_datareader 获取股票数据:

import pandas_datareader.data as web

# 下载苹果公司 (AAPL) 的历史股票数据
df = web.DataReader('AAPL', 'yahoo', '2020-01-01', '2021-01-01')
print(df.head())


2. 股票数据预处理

在进行股票数据分析之前,通常需要进行一些数据清洗和预处理。

✅ 处理缺失数据:

df = df.fillna(method='ffill')  # 使用前一个有效值填充缺失数据

✅ 计算每日收益率:

df['Daily Return'] = df['Adj Close'].pct_change()


3. 基本数据分析

在股票数据中,常见的分析包括计算股票的年化收益率、波动率以及回报等。

✅ 计算年化收益率:

annual_return = df['Daily Return'].mean() * 252  # 假设一年有252个交易日
print(f'Annual Return: {annual_return}')

✅ 计算波动率:

volatility = df['Daily Return'].std() * (252 ** 0.5)  # 年化波动率
print(f'Volatility: {volatility}')


4. 时间序列分析

股票数据是时间序列数据,Pandas 提供了强大的时间序列处理能力。

✅ 重采样数据:

例如,可以按月对股票数据进行重采样并计算月度收益。

df_monthly = df['Adj Close'].resample('M').last()
df_monthly_return = df_monthly.pct_change()
print(df_monthly_return)

✅ 计算移动平均线:

df['SMA_50'] = df['Adj Close'].rolling(window=50).mean()  # 50日简单移动平均
df['SMA_200'] = df['Adj Close'].rolling(window=200).mean()  # 200日简单移动平均


5. 技术指标计算

常见的股票分析技术指标包括相对强弱指数(RSI)、移动平均收敛/发散指标(MACD)等。

✅ 计算相对强弱指数(RSI):

delta = df['Adj Close'].diff()
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)

avg_gain = gain.rolling(window=14).mean()
avg_loss = loss.rolling(window=14).mean()

rs = avg_gain / avg_loss
rsi = 100 - (100 / (1 + rs))
df['RSI'] = rsi

✅ 计算 MACD:

ema_12 = df['Adj Close'].ewm(span=12, adjust=False).mean()
ema_26 = df['Adj Close'].ewm(span=26, adjust=False).mean()

df['MACD'] = ema_12 - ema_26
df['Signal Line'] = df['MACD'].ewm(span=9, adjust=False).mean()


6. 回测策略实现

在进行股票数据分析时,通常需要回测某些交易策略,比如基于技术指标的策略。

✅ 简单的交叉移动平均策略:

df['Signal'] = 0
df['Signal'][df['SMA_50'] > df['SMA_200']] = 1  # 50日均线突破200日均线买入信号
df['Signal'][df['SMA_50'] < df['SMA_200']] = -1  # 50日均线跌破200日均线卖出信号

df['Position'] = df['Signal'].shift()
df['Daily Strategy Return'] = df['Daily Return'] * df['Position']


📖 参考资料

  • 《Python for Finance》:用于金融数据分析的 Pandas 技巧
  • 《Advances in Financial Machine Learning》:金融机器学习中的 Pandas 用法
  • yfinance 官方文档:yfinance 文档
  • Pandas DataReader 官方文档:Pandas DataReader

🔗 出站链接