# 正态分布参数估计函数框架
def normal_mu(X):
# 在此处实现μ的计算逻辑
def normal_sigma(X):
# 在此处实现σ的计算逻辑
# 生成样本数据
TRUE_MEAN = 40
TRUE_STD = 10
X = np.random.normal(TRUE_MEAN, TRUE_STD, 10000000)
# 计算参数估计值
mu = normal_mu(X)
std = normal_sigma(X)
# SciPy参数估计对比
scipy_mu, scipy_std = scipy.stats.norm.fit(X)
# 绘制分布图
x = np.linspace(0, 80, 80)
plt.hist(X, bins=x, density=True)
plt.plot(scipy.stats.norm.pdf(x, loc=mu, scale=std), color='red')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.legend(['Fitted PDF', 'Observed Data']);
# 指数分布参数估计函数框架
def exp_lambda(X):
# 在此处实现λ的计算逻辑
# 生成样本数据
TRUE_LAMBDA = 5
X = np.random.exponential(TRUE_LAMBDA, 1000)
# 计算参数估计值
lam = exp_lambda(X)
# SciPy参数估计对比
_, scipy_lambda = scipy.stats.expon.fit(X)
# 绘制分布图
x = range(0, 80)
plt.hist(X, bins=x, density=True)
plt.plot(scipy.stats.expon.pdf(x, scale=scipy_lambda), color='red')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.legend(['Fitted PDF', 'Observed Data']);
import yfinance as yf
# 获取数据
start = '2014-01-01'
end = '2015-01-01'
data = yf.download('SPY', start=start, end=end)
prices = data['Close']
returns = prices.pct_change().dropna()
# 参数估计
def normal_mu(X): ...
def normal_sigma(X): ...
mu = normal_mu(returns)
std = normal_sigma(returns)
# 绘制拟合结果
x = np.linspace(returns.min(), returns.max(), 1000)
plt.hist(returns, bins=50, density=True)
plt.plot(scipy.stats.norm.pdf(x, loc=mu, scale=std), color='red')
plt.show()
# 正态性检验
alpha = 0.05
stat, pval = scipy.stats.mstats.normaltest(returns)
print(f'P值: {pval:.6f}')
print('拒绝原假设' if pval < alpha else '接受原假设')
# yfinance数据获取示例
import yfinance as yf
import pandas as pd
# 获取多资产数据
symbols = ['AAPL', 'MSFT']
start = '2014-01-01'
end = '2015-01-01'
data = yf.download(symbols, start=start, end=end)
# 数据结构说明
print(data.head())
# 列结构为MultiIndex: ['Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume'] × symbols
注意:实际使用时请根据需求调整时间范围和资产列表,分钟级数据可能需要特殊权限。