quantmod Exercise2

下载Apple,Microsoft,Oracle,Google公司2011-2012年交易行情数据,分别画出蜡烛图以及ADX子图。

1. 试对ADX指标进行技术分析,指出某段时间里根据ADX及相关指标研读出来的走势预测。

按照ADX指标的解释,以微软股票为例,从图画来看,如果DIp(绿线)从下往上突破DIn(红线),而且ADX很大时,必然大涨;反之,如果DIn突破Dip,而且ADX很大时,必然大跌。

当ADX较小时,DIp和DIn的交叉信号无效,但依然可以通过DIp和DIn观测小幅涨跌的行情。

# 下载数据

library(quantmod)
stocks <- c("AAPL", "MSFT", "ORCL", "GOOG")
getSymbols(stocks, from = "2011-01-01", to = "2012-12-31")
## [1] "AAPL" "MSFT" "ORCL" "GOOG"

# 设置主题:由于数据多而密集,K线和成交量线的灰色边框变得相对太宽,导致整个图灰蒙蒙一片。为了美观起见,这里通过将边框颜色设置为透明色(RGB的最后两位十六进制数字00),使图恢复彩色的效果。

Theme.black <- chartTheme("black")
Theme.black$up.border = "#FFFFFF00"
Theme.black$dn.border = "#FFFFFF00"
Theme.black$up.up.border = "#FFFFFF00"
Theme.black$up.dn.border = "#FFFFFF00"
Theme.black$dn.dn.border = "#FFFFFF00"
Theme.black$dn.up.border = "#FFFFFF00"
Theme.black$border = "#FFFFFF00"
# 画出蜡烛图,并加上ADX曲线图

candleChart(AAPL, theme = Theme.black)

plot of chunk unnamed-chunk-2

addADX()

plot of chunk unnamed-chunk-2

candleChart(MSFT, theme = Theme.black)

plot of chunk unnamed-chunk-2

addADX()

plot of chunk unnamed-chunk-2

candleChart(ORCL, theme = Theme.black)

plot of chunk unnamed-chunk-2

addADX()

plot of chunk unnamed-chunk-2

candleChart(GOOG, theme = Theme.black)

plot of chunk unnamed-chunk-2

addADX()

plot of chunk unnamed-chunk-2

2. 求出每种股票在上述年份内ADX指标同时高于DI+和DI-的时间段。

暂时还没有想出将所取得的日期区间绘制在K线图上的方法。

# 求出ADX
ADXAAPL = ADX(AAPL)
ADXMSFT = ADX(MSFT)
ADXORCL = ADX(ORCL)
ADXGOOG = ADX(GOOG)

# 以AAPL为例显示ADX数据的构成
tail(ADXAAPL)
##              DIp   DIn    DX    ADX
## 2012-12-21 56.13 60.83 4.019 11.075
## 2012-12-24 57.85 56.02 1.609 10.399
## 2012-12-26 57.71 59.90 1.867  9.790
## 2012-12-27 56.47 61.46 4.231  9.393
## 2012-12-28 53.60 59.93 5.582  9.121
## 2012-12-31 52.60 58.56 5.365  8.852

# ADXAAPL并非数据框或矩阵,必须用时间序列专用的index函数取得行号
class(ADXAAPL)
## [1] "xts" "zoo"

# 取得各种股票的日期集合
AAPL.dates = index(AAPL)
MSFT.dates = index(MSFT)
ORCL.dates = index(ORCL)
GOOG.dates = index(GOOG)

# 选择ADX>DI+和DI-的数组下标
AAPL.x <- ADXAAPL[, 4] > ADXAAPL[, 1] & ADXAAPL[, 4] > ADXAAPL[, 2]
MSFT.x <- ADXMSFT[, 4] > ADXMSFT[, 1] & ADXMSFT[, 4] > ADXMSFT[, 2]
ORCL.x <- ADXORCL[, 4] > ADXORCL[, 1] & ADXORCL[, 4] > ADXORCL[, 2]
GOOG.x <- ADXGOOG[, 4] > ADXGOOG[, 1] & ADXGOOG[, 4] > ADXGOOG[, 2]

# 剔除缺失值
AAPL.x[is.na(AAPL.x)] <- F
MSFT.x[is.na(MSFT.x)] <- F
ORCL.x[is.na(ORCL.x)] <- F
GOOG.x[is.na(GOOG.x)] <- F

# 得到ADX指标同时高于DI+和DI-的日期,发现只有MSFT在2012-02-16满足这一条件
AAPL.dates[AAPL.x]
## character(0)
MSFT.dates[MSFT.x]
## [1] "2012-02-16"
ORCL.dates[ORCL.x]
## character(0)
GOOG.dates[GOOG.x]
## character(0)