查看全集:💎Quantopia量化分析56讲
IPython Notebook(Jupyter Notebook)提供交互式数据分析环境,本指南将用yfinance获取真实金融数据,演示基础分析流程。
# 示例代码
2 + 2 # 显示最后一个表达式结果
X = 2 # 赋值语句无输出
print(2 + 2) # 强制输出
3 + 3
长时间运行代码时观察星号标记:
total = 0
for i in range(10_000_000):
total += i
total # 输出累加结果
import numpy as np # 数值计算
import pandas as pd # 数据分析
import matplotlib.pyplot as plt # 可视化
np.random.
后按Tabnp.random.normal? # 显示函数文档
# 生成正态分布样本
sample_data = np.random.normal(loc=0, scale=1, size=100)
plt.plot(sample_data)
plt.xlabel('Sequence')
plt.ylabel('Value')
plt.title('Random Sample Series');
import yfinance as yf
# 获取多股票数据
start_date = '2019-01-01'
end_date = '2022-01-01'
tickers = ['AAPL', 'MSFT']
stock_data = yf.download(tickers, start=start_date, end=end_date)
# 获取苹果收盘价
aapl_close = stock_data['Close']['AAPL'].dropna()
plt.figure(figsize=(10,6))
plt.plot(aapl_close.index, aapl_close.values)
plt.ylabel('Price (USD)')
plt.title('AAPL Closing Price 2019-2021');
daily_returns = aapl_close.pct_change().dropna()
plt.hist(daily_returns, bins=50, density=True)
plt.xlabel('Daily Return')
plt.ylabel('Frequency')
plt.title('AAPL Daily Returns Distribution');
return_mean = np.mean(daily_returns)
return_std = np.std(daily_returns)
print(f"日均收益率: {return_mean:.4%}")
print(f"日收益波动率: {return_std:.4%}")
normal_returns = np.random.normal(return_mean, return_std, 10000)
plt.hist(daily_returns, bins=50, density=True, alpha=0.6, label='Actual')
plt.hist(normal_returns, bins=50, density=True, alpha=0.5, label='Normal')
plt.legend()
plt.title('Actual vs Normal Distribution');
ma_60 = aapl_close.rolling(window=60).mean()
plt.figure(figsize=(12,6))
plt.plot(aapl_close, label='Price')
plt.plot(ma_60, label='60-day MA')
plt.ylabel('Price')
plt.legend()
plt.title('Price with Moving Average');
scipy.stats.kurtosis
)# 练习参考答案示例
from scipy.stats import kurtosis
# 获取TSLA数据
tsla = yf.download('TSLA', start='2020-01-01')['Close']
# 计算移动平均
ma_20 = tsla.rolling(20).mean()
ma_60 = tsla.rolling(60).mean()
# 绘图比较
plt.figure(figsize=(12,6))
plt.plot(tsla, label='Price')
plt.plot(ma_20, label='20-day MA')
plt.plot(ma_60, label='60-day MA')
plt.legend()
plt.show()
# 计算统计量
returns = tsla.pct_change().dropna()
print(f"峰度系数: {kurtosis(returns):.2f}")
dropna()
处理缺失值本指南展示了完整的研究工作流程:从数据获取、清洗处理、统计分析到可视化呈现。建议读者扩展练习时尝试不同参数设置,并思考各指标在实际交易中的应用场景。