Python Johansen测试产生了不正确的特征向量

Python Johansen测试产生了不正确的特征向量,python,Python,我试图用python复制Ernie Chan在其开创性著作Algorithmic Trading(第55页)中概述的示例2.7。网上没有太多相关的资料,但是statsmodel库非常有用。但是,我的代码生成的特征向量看起来不正确,因为这些值与测试数据不正确相关。以下是几个步骤中的代码: import pandas as pd import yfinance as yf from datetime import datetime from dateutil.relativedelta import

我试图用python复制Ernie Chan在其开创性著作Algorithmic Trading(第55页)中概述的示例2.7。网上没有太多相关的资料,但是statsmodel库非常有用。但是,我的代码生成的特征向量看起来不正确,因为这些值与测试数据不正确相关。以下是几个步骤中的代码:

import pandas as pd
import yfinance as yf
from datetime import datetime
from dateutil.relativedelta import relativedelta

years = 5
today = datetime.today().strftime('%Y-%m-%d')
lastyeartoday = (datetime.today() - relativedelta(years=years)).strftime('%Y-%m-%d')
symbols = ['BTC-USD', 'BCH-USD','ETH-USD']

df = yf.download(symbols, 
                      start=lastyeartoday, 
                      end=today, 
                      progress=False)
df = df.dropna()
data = pd.DataFrame()
for symbol in symbols:
    data[symbol] = df['Close'][symbol]

data.tail()
这将产生以下输出:

让我们来描绘三个系列:

# Plot the prices series
import matplotlib.pyplot as plt
%matplotlib inline
for symbol in symbols:
    data[symbol].plot(figsize=(10,8))

plt.show()
图表:

现在,我们在数据集上运行协整Johansen测试:

将numpy导入为np
作为pd进口熊猫
将statsmodels.api作为sm导入
#数据=pd.read\u csv(“http://web.pdx.edu/~crkl/ceR/data/usyc87.txt”,索引_col='YEAR',sep='\s+',nrows=66)
#y=数据['y']
#c=数据['c']
从statsmodels.tsa.vector\u ar.vecm导入coint\u johansen
"""
VECM协整等级的Johansen协整检验
参数
----------
endog:array_like(nobs_tot x neq)
要测试的数据
详细顺序:int
*-1-无确定性术语-模型1
*0-常数项-模型3
*1-线性趋势
k_ar_diff:int,非负
模型中滞后差异的数量。
退换商品
-------
结果:霍尔德
包含结果的对象,可使用点表示法访问该对象。该对象的属性为
eig:(neqs)-特征值。
evec:(neqs x neqs)-特征向量。
lr1:(neqs)-跟踪统计。
lr2:(neqs)-最大特征值统计。
cvt:(neqs x 3)-痕量统计的临界值(90%,95%,99%)。
cvm:(neqs x 3)-最大特征值统计的临界值(90%,95%,99%)。
方法:str“johansen”

r0t:(nobs x neqs)-Δevecs[0]的残差看起来不正确。检查特征向量是否是
evec
的一列,而不是您使用的一行。我认为这不是问题所在-这是整个向量:数组([[2.21531848e-04,-1.70103937e-04,-9.403745e-05],[9.75019721e-05],-3.06140602e-03,2.58381766e-04],[-2.24844525e-03,6.30045019e-03,4.38778520e-03]])你应该将价格转换为对数回报或对数累积回报。你这样做了吗?@MilTom-很好的建议,我简直不敢相信我从来没有想到过。请看我上面的更新。如果我正确阅读特征值和跟踪统计数据,显然没有相关性。