Python计算股票两两协整时For循环报KeyError:0问题求助
错误产生原因
- 你定义的
data是键为股票代码字符串的字典结构,不存在0、1这类整数类型的键 - 循环逻辑中你直接用
range生成的整数下标i、j作为key访问data,匹配不到对应键就触发了KeyError: 0报错
修复代码
仅需要修改协整计算行的取值逻辑,用下标先从tickets列表取对应股票代码,再用代码作为key从data中取行情数据即可:
lista = [] comprimento = len(tickets) for i in range(0, comprimento): print("当前分析标的: " + str(tickets[i])) for j in range(i+1, comprimento): # 替换原有的data[i]、data[j]为如下写法 cointeracao = coint(data[tickets[i]], data[tickets[j]]) if cointeracao[1] < 0.05: lista.append((tickets[i],tickets[j])) print(lista) print(lista)
额外优化建议
为了避免不同股票的交易日缺失导致协整计算报错,可以先把所有行情数据合并为DataFrame并清除缺失值再计算,代码如下:
import pandas as pd # 合并所有标的行情为DataFrame,删除存在缺失值的行 price_df = pd.DataFrame(data).dropna(axis=0, how='any') lista = [] comprimento = len(tickets) for i in range(0, comprimento): print("当前分析标的: " + str(tickets[i])) for j in range(i+1, comprimento): cointeracao = coint(price_df[tickets[i]], price_df[tickets[j]]) if cointeracao[1] < 0.05: lista.append((tickets[i],tickets[j])) print("协整关系显著的标的对:", lista)
内容的提问来源于stack exchange,提问作者Tiago Emanuel Pratas
相关产品推荐
相关产品推荐

