用quantmod的ETL函数下载Apple,Microsoft,Oracle,Google四家公司全量股票行情数据。
require(quantmod)
# 下载行情数据
getSymbols("AAPL", src = "yahoo", from = "2013-01-01", to = "2013-10-31")
## [1] "AAPL"
getSymbols("MSFT", src = "yahoo", from = "2013-01-01", to = "2013-10-31")
## [1] "MSFT"
getSymbols("ORCL", src = "yahoo", from = "2013-01-01", to = "2013-10-31")
## [1] "ORCL"
getSymbols("GOOG", src = "yahoo", from = "2013-01-01", to = "2013-10-31")
## [1] "GOOG"
# 计算Apple股票的总成交量
v = Vo(AAPL)
cat(format(sum(v), scientific = F))
## 3219250600
# 用Delt函数求出每天比前一天的收盘价的涨幅
DeltAAPL = Delt(Cl(AAPL))
DeltMSFT = Delt(Cl(MSFT))
DeltORCL = Delt(Cl(ORCL))
DeltGOOG = Delt(Cl(GOOG))
# 放入数据框delt中
delt = data.frame(DeltAAPL, DeltMSFT, DeltORCL, DeltGOOG)
delt <- delt[-1, ]
names(delt) <- c("AAPL", "MSFT", "ORCL", "GOOG")
delt$date <- as.Date(row.names(delt), format = "%Y-%m-%d")
# 找出涨幅超过2%的数据
VarDeltAAPL = delt[delt[, 1] > 0.02, 1, drop = F]
VarDeltMSFT = delt[delt[, 2] > 0.02, 2, drop = F]
VarDeltORCL = delt[delt[, 3] > 0.02, 3, drop = F]
VarDeltGOOG = delt[delt[, 4] > 0.02, 4, drop = F]
# 苹果是4月份整体涨幅比较大。貌似是新IPAD上市引起的
VarDeltAAPL
## AAPL
## 2013-01-16 0.04151
## 2013-01-28 0.02262
## 2013-02-05 0.03509
## 2013-02-07 0.02377
## 2013-03-05 0.02640
## 2013-03-15 0.02580
## 2013-03-18 0.02718
## 2013-03-22 0.02028
## 2013-04-10 0.02040
## 2013-04-22 0.02084
## 2013-04-26 0.02160
## 2013-04-29 0.03097
## 2013-04-30 0.02943
## 2013-05-06 0.02385
## 2013-05-20 0.02232
## 2013-07-01 0.03200
## 2013-07-02 0.02265
## 2013-07-24 0.05136
## 2013-08-12 0.02841
## 2013-08-13 0.04752
## 2013-09-04 0.02069
## 2013-09-18 0.02056
## 2013-09-23 0.04970
## 2013-10-01 0.02351
## 2013-10-21 0.02450
# 微软4月涨幅较高可能是因为WIN8的发售
VarDeltMSFT
## MSFT
## 2013-04-09 0.03568
## 2013-04-10 0.02263
## 2013-04-19 0.03404
## 2013-04-22 0.03561
## 2013-04-24 0.03791
## 2013-04-29 0.02579
## 2013-05-17 0.02318
## 2013-05-28 0.02189
## 2013-06-07 0.02031
## 2013-06-26 0.02020
## 2013-07-11 0.02853
## 2013-08-08 0.02589
## 2013-08-22 0.02468
## 2013-08-23 0.07286
## 2013-09-10 0.02306
## 2013-10-10 0.02086
## 2013-10-25 0.05961
# ORACLE的整体涨幅比较小,没什么可分析的
VarDeltORCL
## ORCL
## 2013-03-14 0.02024
## 2013-04-09 0.02101
## 2013-04-10 0.02088
## 2013-06-13 0.02178
## 2013-07-11 0.02017
## 2013-07-15 0.02432
## 2013-10-10 0.02485
# GOODLE10月18日大涨,这是由于谷歌发布了超市场预期的三季报
# http://tech.qq.com/a/20131018/017718.htm
VarDeltGOOG
## GOOG
## 2013-01-23 0.05496
## 2013-02-01 0.02635
## 2013-03-05 0.02082
## 2013-04-19 0.04434
## 2013-04-29 0.02201
## 2013-05-15 0.03245
## 2013-10-18 0.13796
## 2013-10-23 0.02424
## 2013-10-29 0.02093
# 数据展现
library(ggplot2)
library(reshape2)
# 将数据重构为长型
long <- melt(delt, id = "date", variable.name = "stock", value.name = "delt")
long[seq(1, 840, by = 210), ]
## date stock delt
## 1 2013-01-03 AAPL -0.0126223
## 211 2013-01-03 MSFT -0.0133961
## 421 2013-01-03 ORCL -0.0109542
## 631 2013-01-03 GOOG 0.0005807
# 画出所有的点
(g1 <- ggplot(data = long, aes(date, delt, colour = stock)) + geom_point() +
scale_colour_manual(values = c(AAPL = "gold", MSFT = "blue", ORCL = "red",
GOOG = "green")))
# 只画出涨幅大于2%的点
riseup <- long[long$delt > 0.02, ]
(g2 <- ggplot(data = riseup, aes(date, delt, colour = stock)) + geom_point(size = 3.5) +
scale_colour_manual(values = c(AAPL = "gold2", MSFT = "blue", ORCL = "red",
GOOG = "green")) + scale_x_date(limits = as.Date(c("2013-01-01", "2013-10-31")),
breaks = "1 month") + scale_y_continuous(breaks = seq(0.02, 0.15, 0.01)))
options(width = 600)
# 截取2013年1~10月的股价数据
cl.aapl = Cl(AAPL["2013-01::2013-10"])
cl.msft = Cl(MSFT["2013-01::2013-10"])
cl.orcl = Cl(ORCL["2013-01::2013-10"])
cl.goog = Cl(GOOG["2013-01::2013-10"])
# 将数据放入数据框,并写入csv文件以便用MINE包分析
cl.all = data.frame(cl.aapl, cl.msft, cl.orcl, cl.goog)
write.csv(cl.all, "close.csv", quote = F)
# 使用MINE包(注意要把MINE.r和MINE.jar两个文件都放在工作目录下;在R
# Markdown编译的时候,工作目录就是.rmd文件所在的当前目录)
# rJava的配置要求:R和Java必须同为32位或64位版本,环境变量中必须带上Java的bin目录
library(rJava)
source("MINE.r")
MINE("close.csv", "all.pairs")
## **********************************************************
## MINE version 1.0.1d
## Copyright 2011 by David Reshef and Yakir Reshef.
##
## This application is licensed under a Creative Commons
## Attribution-NonCommercial-NoDerivs 3.0 Unported License.
## See
## http://creativecommons.org/licenses/by-nc-nd/3.0/ for
## more information.
## **********************************************************
##
##
## input file = close.csv
## analysis style = allpairs
## results file name = 'close.csv,allpairs,cv=0.0,B=n^0.6,Results.csv'
## print status frequency = every 100 variable pairs
## status file name = 'close.csv,allpairs,cv=0.0,B=n^0.6,Status.txt'
## alpha = 0.6
## numClumpsFactor = 15.0
## debug level = 0
## required common values fraction = 0.0
## garbage collection forced every 2147483647 variable pairs
## reading in dataset...
## done.
## Analyzing...
## 1 calculating: AAPL.Close vs ...
## 10 variable pairs analyzed.
## Sorting results in descending order...
## done. printing results
## Analysis finished. See file "close.csv,allpairs,cv=0.0,B=n^0.6,Results.csv" for output
# 查看MINE分析结果
read.csv("close.csv,allpairs,cv=0.0,B=n^0.6,Results.csv")
## X.var Y.var MIC..strength. MIC.p.2..nonlinearity. MAS..non.monotonicity. MEV..functionality. MCN..complexity. Linear.regression..p.
## 1 GOOG.Close MSFT.Close 0.8173 0.1297 0.13667 0.8173 3.322 0.82922
## 2 ORCL.Close MSFT.Close 0.6164 0.3868 0.09291 0.6164 4.000 -0.47912
## 3 GOOG.Close AAPL.Close 0.4272 0.4212 0.23896 0.4120 4.585 0.07778
## 4 GOOG.Close ORCL.Close 0.4163 0.2605 0.05636 0.4094 4.585 -0.39479
## 5 MSFT.Close AAPL.Close 0.3754 0.3726 0.18654 0.3571 4.585 -0.05283
## 6 ORCL.Close AAPL.Close 0.3184 0.2848 0.05694 0.3026 4.585 0.18341
结果说明,谷歌与微软、甲骨文与微软之间,股价有较强的关联。这与相关系数矩阵的分析结果相一致:
cor(cl.all)
## AAPL.Close MSFT.Close ORCL.Close GOOG.Close
## AAPL.Close 1.00000 -0.05283 0.1834 0.07778
## MSFT.Close -0.05283 1.00000 -0.4791 0.82922
## ORCL.Close 0.18341 -0.47912 1.0000 -0.39479
## GOOG.Close 0.07778 0.82922 -0.3948 1.00000
pairs(cl.all)
参考: