股票数据多重检验分析#
任务背景:某量化研究员选取2020-2022年期间15只科技股日度收益率数据,试图寻找存在显著相关性的股票对(使用Spearman相关系数)。原始数据获取与处理代码如下:
code
import numpy as np
import pandas as pd
import yfinance as yf
from scipy import stats
# 股票代码列表
tech_stocks = ['AAPL', 'MSFT', 'GOOGL', 'AMZN', 'META',
'TSLA', 'NVDA', 'INTC', 'ADBE', 'CSCO',
'ORCL', 'IBM', 'QCOM', 'CRM', 'AMD']
# 获取收盘价数据
price_data = yf.download(tech_stocks,
start='2020-01-01',
end='2022-12-31')['Close']
# 计算日收益率
returns = price_data.pct_change().dropna()分析要求:
-
遍历所有可能的股票组合(共105对),计算其收益率相关系数的 p 值
-
分别记录使用原始α=0.05和Bonferroni校正后的显著相关对数量
-
输出格式要求:打印两种方法发现的显著对数及预期假阳性数
代码框架:
code
def multiple_comparison_analysis():
# 初始化参数
alpha = 0.05
combinations = len(tech_stocks)*(len(tech_stocks)-1)//2
# 原始检验
original_pairs = []
# Bonferroni检验
bonferroni_pairs = []
# 在此处补充你的代码逻辑
# 输出结果
print(f"原始方法显著对数:{len(original_pairs)}")
print(f"预期假阳性数:{round(combinations * alpha, 1)}")
print(f"校正后显著对数:{len(bonferroni_pairs)}")理论计算与方案设计#
问题场景:某对冲基金构建了包含200只股票的投资组合,研究团队每日进行以下分析:
-
对所有股票两两做相关性检验(Spearman)
-
对每只股票进行30个技术指标的预测能力检验(t 检验)
任务要求:
-
计算每日进行统计检验的总次数
-
当设定全局α=0.05时,计算未校正的预期每日假阳性数
-
若采用Bonferroni校正,计算单个检验的显著性阈值
-
设计一个两阶段验证方案:
-
第一阶段用2020-2021年数据筛选潜在信号
-
第二阶段用2022年数据验证
-
数据准备:
code
# 两阶段数据集划分
full_data = yf.download('SPY',
start='2020-01-01',
end='2022-12-31')['Close']
stage1 = full_data.loc[:'2021-12-31']
stage2 = full_data.loc['2022-01-01':]提示公式:
-
组合检验次数:
-
技术指标检验次数:
-
Bonferroni阈值:
请分别给出数学计算过程与Python实现代码。