quantmod-Exercise1

用quantmod的ETL函数下载Apple,Microsoft,Oracle,Google四家公司全量股票行情数据。

1)求出Apple公司在2013.1-2013.10的股票总成交量;

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

2)找出这些股票暴涨暴跌的时间点(例如开盘价或收盘价比前一天涨跌幅度超过2%),通过搜索引擎寻找是什么原因导致这些暴涨暴跌,观察(或用程序分析)数据,看就暴涨暴跌事件是否有可以利用的买卖规律;

# 用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")))

plot of chunk unnamed-chunk-2


# 只画出涨幅大于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)))

plot of chunk unnamed-chunk-2


3)截取一段时间内这四家公司股价数据(注意分红派息除权对股价的影响),用R中的相关性分析判断股价之间的相关性,或者用R基础课程第八周所讲的MIC指标对其进行分析。

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)

plot of chunk unnamed-chunk-3

参考:

http://f.dataguru.cn/thread-219474-1-1.html

http://f.dataguru.cn/thread-218848-1-1.html