分享

用R检验两支股票是否协整

 上通下达 2013-05-15

用R检验两支股票是否协整

2013-2-21 23:21| 发布者: 仙豆| 查看: 653| 评论: 0|来自: 科学网

摘要: 载入数据把CSV文件转换为zoo对象需要几个步骤:将读入的两个文件变成两个数据框。把字符串格式的日期转换为Date对象。把两个数据转换为zoo对象。合并两个zoo对象。代码如下:library(zoo) #载入zoo包#把CSV文件转换为 ...

载入数据

 CSV 文件转换为 zoo 对象需要几个步骤:

  1. 将读入的两个文件变成两个数据框。
  2. 把字符串格式的日期转换为Date对象。
  3. 把两个数据转换为zoo对象。
  4. 合并两个zoo对象。

代码如下:

library(zoo) # 载入 zoo 

 CSV 文件转换为数据框
#
gld <- read.csv("http://ichart.finance.yahoo.com/table.csv?s=GLD&ignore=.csv", stringsAsFactors=F)
gdx <- read.csv("http://ichart.finance.yahoo.com/table.csv?s=GDX&ignore=.csv", stringsAsFactors=F)


第一列包含日期,用as.Date 把字符串转换为Date对象
#
gld_dates <- as.Date(gld[,1])
gdx_dates <- as.Date(gdx[,1])


第七列是调整后的收盘价。用 zoo 函数建立 zoo 对象
#
gld <- zoo(gld[,7], gld_dates)
gdx <- zoo(gdx[,7], gdx_dates)


 merge 函数合并两个 zoo 对象
#
t.zoo <- merge(gld, gdx, all=FALSE)

现在 t.zoo  zoo 对象,而统计函数期望使用数据框
#
t <- as.data.frame(t.zoo)

告诉用户日期的范围
#
cat("日期范围:", format(start(t.zoo)), "", format(end(t.zoo)), "\n")


as.Date 函数默认日期是国际标准格式 yyyy-mm-dd如果要转换为美国常用格式 mm/dd/yy要做下面转换。

gld_dates <- as.Date(gld[,1], format="%m/%d/%y")
gdx_dates <- as.Date(gdx[,1], format="%m/%d/%y")

 

计算价差

 

首先构造价差然后对价差进行单位根检验。如果价差在单位园内,那么可以两支股票有协整关系。

价差定义为:

S = y - (β × x )


 β 
是对冲比价,使用普通最小二乘法计算。重新调整,可以用下面的方程找出最优 β 

y = (-β) × x


这是去掉截距的最简单线性方程。R中使用 lm 函数拟合线性模型。

# lm 函数使用OLS建立线性回归模型, m, 强迫截距为零,然后提取第一个回归系数
#

m <- lm(gld ~ gdx + 0, data=t)
beta <- coef(m)[1]

cat("套保率
", beta, "\n")

现在计算价差
#
sprd <- tgldbetatgdx

协整关系检验<="" td="">

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多