📚 目录
- 股票数据获取
- 股票数据预处理
- 基本数据分析
- 时间序列分析
- 技术指标计算
- 回测策略实现
- 参考资料
- 出站链接
1. 股票数据获取
Pandas 可以通过第三方库获取股票数据,常见的方法包括使用 yfinance
或 pandas_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
发表回复