判断以下两个人工生成序列 A 和 B 是否协整,使用 coint()
函数并选择合理置信水平。
A_returns = np.random.normal(0, 1, 100)
A = pd.Series(np.cumsum(A_returns), name='A') + 50
some_noise = np.random.exponential(1, 100)
B = A - 7 + some_noise
判断以下两个人工生成序列 C 和 D 是否协整,使用 coint()
函数并选择合理置信水平。
C_returns = np.random.normal(1, 1, 100)
C = pd.Series(np.cumsum(C_returns), name='C') + 100
D_returns = np.random.normal(2, 1, 100)
D = pd.Series(np.cumsum(D_returns), name='D') + 100
判断股票 UAL 和 AAL 在 2015 年是否协整,使用 coint()
函数并选择合理置信水平。
import yfinance as yf
ual = yf.download('UAL', start='2015-01-01', end='2016-01-01')['Close']
aal = yf.download('AAL', start='2015-01-01', end='2016-01-01')['Close']
判断股票 FCAU 和 HMC 在 2015 年是否协整,使用 coint()
函数并选择合理置信水平。
fcau = yf.download('FCAU', start='2015-01-01', end='2016-01-01')['Close']
hmc = yf.download('HMC', start='2015-01-01', end='2016-01-01')['Close']
使用 find_cointegrated_pairs
函数在金属矿业股票中寻找协整对。
symbol_list = ['MTRN', 'CMP', 'TRQ', 'SCCO', 'HCLP', 'SPY']
data = yf.download(symbol_list, start='2015-01-01', end='2016-01-01')['Close']
prices_df = data[symbol_list] # 确保列顺序一致
# 协整对搜索函数
def find_cointegrated_pairs(data):
n = data.shape[1]
score_matrix = np.zeros((n, n))
pvalue_matrix = np.ones((n, n))
keys = data.columns
pairs = []
for i in range(n):
for j in range(i+1, n):
S1 = data.iloc[:, i]
S2 = data.iloc[:, j]
result = coint(S1, S2)
pvalue = result[1]
pvalue_matrix[i, j] = pvalue
if pvalue < 0.05:
pairs.append((keys[i], keys[j]))
return score_matrix, pvalue_matrix, pairs
使用 2015 年数据建立线性回归模型,找到使 MTRN 和 SCCO 价差平稳的系数。
S1 = prices_df['MTRN']
S2 = prices_df['SCCO']
使用 (a) 中得到的系数,绘制 2016 年上半年的加权价差并检验平稳性。
S1_out = yf.download('MTRN', start='2016-01-01', end='2016-07-01')['Close']
S2_out = yf.download('SCCO', start='2016-01-01', end='2016-07-01')['Close']
计算并绘制上述股票对的 Hurst 指数,用于监测价差的均值回归特性。
参考链接:
注意:
yfinance
,时间范围需转换为 datetime
格式find_cointegrated_pairs
函数已适配 DataFrame 列名Close
)