问题:
使用yfinance获取特斯拉(TSLA)与纳斯达克指数(^IXIC)2022年全年的日频数据,完成以下任务:
np.log(close).diff()
)Python答题框架:
import yfinance as yf
import numpy as np
import statsmodels.api as sm
# 数据获取
start = '2022-01-01'
end = '2022-12-31'
tsla = yf.download('TSLA', start=start, end=end)['Close']
ixic = yf.download('^IXIC', start=start, end=end)['Close']
# 收益率计算
df = (...实现数据合并与缺失值处理...)
df['log_ret_tsla'] = (...实现对数收益率计算...)
df['log_ret_ixic'] = (...)
# 模型构建
X = (...添加常数项...)
model = (...使用sm.OLS拟合...)
print(...输出摘要...)
问题:
在6.1题基础上增加科技行业ETF(XLK)作为第二个因子:
Python答题框架:
from statsmodels.stats.outliers_influence import variance_inflation_factor
# 新增数据获取
xlk = yf.download(...)[...]
# 合并数据集
df_full = (...合并TSLA/IXIC/XLK数据...)
# 多因子回归
X_multi = (...包含两个因子和常数项...)
multi_model = (...)
print(...输出双因子模型摘要...)
# VIF计算
vif_df = pd.DataFrame()
vif_df["features"] = (...提取特征列名称...)
vif_df["VIF"] = [(...计算各特征VIF值...)]
print(vif_df)
数据示例说明:
所有数据均通过yfinance实时获取,包含以下字段示例:
Date | TSLA_Close | IXIC_Close | XLK_Close |
2022-01-03 | 352.26 | 15622.67 | 164.32 |
2022-01-04 | 362.12 | 15123.45 | 162.89 |
... | ... | ... | ... |
收益率计算后数据示例:
Date | log_ret_tsla | log_ret_ixic | log_ret_xlk |
2022-01-04 | 0.0278 | -0.0321 | -0.0087 |
2022-01-05 | -0.0135 | 0.0187 | 0.0112 |
提示:计算VIF时需先移除常数项列,建议使用循环计算各特征VIF值