R 语言实现股票数据的预处理及分析

栏目: R语言 · 发布时间: 7年前

内容简介:本实验是以股票数据作为分析背景,股票数据如何从雅虎财经板块上获取,观察股票每日价格和成交量数据开始,接着计算某一支股票数据中比较重要的日度收益率。然后通过各种股票线图进行技术分析,最后在一支股票的基础上同时分析多支股票的成交量,涨幅时间点,最后得出它们之间的相关性等数据特征。本课程难度为简单,属于初级级别课程,需要一定金融股票知识和 R 语言的基础背景。在实际建模之前,往往需要我们对数据进行预处理和分析:计算均值和方差,数据之间做相关性分析,回归分析等等。

基于 R 语言的股票 数据分析

一、实验介绍

1.1 实验内容

本实验是以股票数据作为分析背景,股票数据如何从雅虎财经板块上获取,观察股票每日价格和成交量数据开始,接着计算某一支股票数据中比较重要的日度收益率。然后通过各种股票线图进行技术分析,最后在一支股票的基础上同时分析多支股票的成交量,涨幅时间点,最后得出它们之间的相关性等数据特征。

1.2 实验知识点

  • 股票数据抓取
  • 股票数据线图绘制及技术分析
  • 股票日度收益率计算
  • 多支股票的相关性

1.3 实验环境

  • R version 3.4.1
  • Xfce终端

1.4 适合人群

本课程难度为简单,属于初级级别课程,需要一定金融股票知识和 R 语言的基础背景。

二、实验内容

2.1 相关股票背景介绍

2.1.1 收益率

在股票市场中大家十分关注收益率的日度变化值。每天的市场都会开盘和收盘(除开周六、日),计算收益率的方法可以基于开盘情况也可以基于收盘情况,不过通常的做法还是以收盘价格为基准来计算收益率。在收益率中的计算可以分为简单收益率(或者叫百分数收益率)和对数收益率,相对于简单收益率,用得更多的是对数收益率,因为对数收益率具有严谨的“对称性”,同时也具有更容易的统计特性。

简单收益率:

R 语言实现股票数据的预处理及分析

对数收益率:

R 语言实现股票数据的预处理及分析

2.2 预建模

在实际建模之前,往往需要我们对数据进行预处理和分析:计算均值和方差,数据之间做相关性分析,回归分析等等。

数据具体要做什么变化的方法有很多,而到底选择何种变换也同样取决于我们要研究的数据本身以及目的。

在本实验中,主要就是完成对股票数据的初期分析,为后面的实验建模打下一定的基础。

三、实验步骤

3.1 股票数据获取

R 语言是一个开源的软件工具,它提供了很多 package 软件包支持在线下载股票数据,因此我们很容易通过调用相应的包从网络上获取需要的数据,下面为读者介绍两种比较好用的数据获取方法。

3.1.1 quantmod 包

quantmod 包是做金融技术分析最有用的包之一。

调用 'quantmod' 软件包,可以直接从‘yahoo’、‘google’等网站的财经板块下载我们需要的股票数据。(在调用 之前,需要载入它的依赖包 ‘zoo’、‘xts’、‘TTR’)

> library(quantmod)

> library(zoo)
> library(xts)
> library(TTR)

通过 ‘quantmod’ 包里的 ‘getSymbols’ 函数下载苹果公司从 2017 年初到当前的股票数据。选用的数据来源是 ‘yahoo’ 网,也可以从多个来源下载股票数据,

包括 yahoo, google, MySQL, FRED, csv, RData 和 oanda。

> getSymbols("AAPL",from = "2017-01-01",to = Sys.Date(),src = "yahoo")

查看前几行的数据

> head(AAPL)

R 语言实现股票数据的预处理及分析

3.1.2 tseries 包

tseries 包主要用于时间序列分析与计算金融。

首先下载 tseries 包,然后载入。

> install.packages("tseries")
> library(tseries)

调用 get.hist.quote 函数获取谷歌公司的股票数据。

> goog<-get.hist.quote(instrument = "GOOG", start="2017-01-01", end="2017-07-01",quote = "AdjClose")
> head(goog)

R 语言实现股票数据的预处理及分析

quote = c("Open", "High", "Low", "Close"),AdjClose 是向前复权的价格

provider = c("yahoo","oanda"),默认下载是 yahoo

下载以后的默认对象是 zoo

instrument = "GOOG" 获取股票的代码

3.2 绘制股票图

表 3-1 作图函数

函数
chartSeries
chartTheme
candleChart
lineChart
barChart

3.2.1 以 chartSeries 为例做 K 线图

chartSeries(stock)  chartSeries(stock,theme='white')  chartSeries(stock,theme='white.mono')

中国习惯是涨红跌绿

> chartSeries(AAPL,up.col='red', dn.col='green',theme="white")

R 语言实现股票数据的预处理及分析 增加参数类型

> chartSeries(AAPL,name = "AAPLBARCHART",subset="2017-01-01::2017-07-17",type="bars")
> chartSeries(AAPL,name = "AAPLLINECHART",subset="2017-01-01::2017-07-17",type="line")
> chartSeries(AAPL,name = "AAPLCANDCHART",subset="2017-01-01::2017-07-17",type="candlesticks")

R 语言实现股票数据的预处理及分析

3.2.2 技术分析图

表 3-2 技术函数

函数 定义
addADX() 趋势衡量指标
addBBands() 求出股价的标准差及信赖区间
addMACD() 指数平滑异同移动平均线
addCCI() 测量股价是否超出常态分布范围
addRSI() 测量速度和变化的价格变动
addVo() 测量成交量
addWPR() 表示市场处于超卖还是超买状态
addATR() 测量价格的波动性指标
addSAR() 显示市场价格变化的趋势
addDPO() 排除价格趋势的震荡指标

(1)addBBands() 布林线指标

原理:一般而言,股价的运动总是围绕某一价值中枢(如均线、成本线等)在一定的范围内变动,布林线指标正是在上述条件的基础上,引进了“股价信道”的概念,其认为股价信道的宽窄随着股价波动幅度的大小而变化,二期股价信道又具有变异性,它会随着股价的变化而自动调整。正是由于它的灵活性、直观性和趋势性的特点,BOLL (布林)指标渐渐成为投资者广为应用的市场上热门指标。

> chartSeries(AAPL,up.col='red', dn.col='green',theme="white")
> addBBands(n=14,sd=2,draw='bands')
#只画区间还有 percent 百分比 width 宽度
R 语言实现股票数据的预处理及分析

(2)addADX() 平均趋向指标

特点:ADX无法告诉你趋势的发展方向。但是,如果趋势存在,ADX可以衡量趋势的强度。ADX读数上升,代表趋势转强;如果ADX读数下降,趋势转弱。

缺点:单就ADX本身来说,由于指标落后价格走势,所以算不上很好的指标,不适合单就ADX进行操作。不过如果和其他指标配合运用,ADX可以确认市场是否存在趋势,并衡量趋势的强度。

表 3-2技术函数

ADX读数 意义
ADX>= 30 趋势就可以是为强劲
20 <= ADX < 30 属于中性读数
ADX< 20 代表市场动能偏。期间内,行情来回游走,没有明显的方向
> chartSeries(AAPL,up.col='red', dn.col='green',theme="white")
> addADX()

R 语言实现股票数据的预处理及分析

(3) addMACD( ) 指数平滑异同移动平均线

这是一个常用的震荡指标,由Gerald Appel发明。用序列的快速移动平均线减去慢速移动平均线,可用来识别市场趋势。

> chartSeries(AAPL,up.col='red', dn.col='green',theme="white")
> addMACD()

R 语言实现股票数据的预处理及分析 可以把上面介绍的技术合到一张图上

> chartSeries(AAPL,up.col='red', dn.col='green',theme="white",TA=c(addBBands(),addMACD(),addADX(),addVo()))

R 语言实现股票数据的预处理及分析 剩余的函数读者可自行实验讨论,结果报告可提交到实验平台~

3.3 计算某支股票日度收益率

3.3.1 简单收益率

我们可以先通过 R 语言来手工计算简单收益率

> close <- AAPL[,4]
> close1 <- lag(close,1)
> head(close1)

R 语言实现股票数据的预处理及分析

> calclose <- merge(close,close1)
> simplerate <- (close-close1)/close1
> names(simplerate)="simplerate"
> calrate=merge(calclose,simplerate)
> head(calrate)

R 语言实现股票数据的预处理及分析

3.3.2 对数收益率

使用 R 里的 ‘PerformanceAnalytics’ 包来进行计算,先载入安装包

> install.packages("PerformanceAnalytics")
> library(PerformanceAnalytics)

调用 periodReturn 函数计算不同阶段的收益率,type 选择的是对数类型。

> rate=periodReturn(close,period="daily",type="log")
> head(rate)

R 语言实现股票数据的预处理及分析

3.4 抓取多支股票

利用 quantmod 包中的 ETL 函数下载 Apple, Microsoft, Oracle, Google 四家公司股票行情数据,并进行简要分析

> library(quantmod)
> new.environment <- new.env()

抓取四家公司的全部股票行情数据

> getSymbols(c("AAPL", "ORCL", "MSFT", "GOOG"), src = "yahoo", env = new.environment)

R 语言实现股票数据的预处理及分析 查看抓取的全量数据情况

> str(get("AAPL", env = new.environment))
> str(get("ORCL", env = new.environment))
> str(get("MSFT", env = new.environment))
> str(get("GOOG", env = new.environment))

R 语言实现股票数据的预处理及分析 R 语言实现股票数据的预处理及分析 R 语言实现股票数据的预处理及分析 R 语言实现股票数据的预处理及分析

3.4.1 求出股票总成交量

计算出 Apple 公司在 2017.1-2017.7 的股票总成交量使用情况

> getSymbols("AAPL", src = "yahoo", from = "2017-01-01", to = "2017-07-01")
> summary(AAPL)

R 语言实现股票数据的预处理及分析 计算 2017 年 1 月到 6 月的股票总成交量

>sum(Vo(AAPL))

R 语言实现股票数据的预处理及分析

3.5 分析股票暴涨暴跌的时间点

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

3.5.1 查看各公司涨跌幅超过 2% 的情况

查看 AAPL 涨跌幅超过 2% 的情况

> AAPL <- Delt(Cl(get("AAPL", env = new.environment)))
> length(AAPL[which(AAPL > 0.02), ])
> plot(AAPL[which(AAPL > 0.02), ])

R 语言实现股票数据的预处理及分析 R 语言实现股票数据的预处理及分析

查看 ORCL 涨跌幅超过 2% 的情况

> ORCL <- Delt(Cl(get("ORCL", env =new.environment)))
> length(ORCL[which(ORCL > 0.02), ])
> plot(ORCL[which(ORCL > 0.02), ])

R 语言实现股票数据的预处理及分析 R 语言实现股票数据的预处理及分析

查看 MSFT 涨跌幅超过 2% 的情况

> MSFT <- Delt(Cl(get("MSFT", env = new.environment)))
> length(MSFT[which(MSFT > 0.02), ])
> plot(MSFT[which(MSFT > 0.02), ])

R 语言实现股票数据的预处理及分析 R 语言实现股票数据的预处理及分析

查看 GOOG 涨跌幅超过 2% 的情况

>GOOG <- Delt(Cl(get("GOOG", env = new.environment)))
>length(GOOG[which(GOOG > 0.02), ])
>plot(GOOG[which(GOOG > 0.02), ])

R 语言实现股票数据的预处理及分析 R 语言实现股票数据的预处理及分析

3.6 相关性判断

3.6.1 调整数据

截取一段时间内这四家公司股价数据(注意分红派息除权对股价的影响),用 R 中的相关性分析判断股价之间的相关性。

> periodicity(get("GOOG", env = new.environment))

R 语言实现股票数据的预处理及分析

> getSymbols(c("AAPL", "ORCL", "MSFT", "GOOG"), src = "yahoo", env = new.environment, from = "2017-01-03", to = "2017-07-01")
# 将四家公司股票的每天调整价格整理在一个数据框中
> m <- cbind(Ad(get("AAPL", env = new.environment)), Ad(get("ORCL", env = new.environment)), Ad(get("MSFT", env = new.environment)), Ad(get("GOOG", env = new.environment)))

R 语言实现股票数据的预处理及分析

3.6.2 分析判断相关性并绘图

利用 corr.test() 函数计算四家公司股票的调整价格的相关系数和概率。

> library(psych)
> corr.test(as.data.frame(m))

R 语言实现股票数据的预处理及分析 绘制相关性图

> install.packages("corrplot")
> library(corrplot)
> corrplot.mixed(cor(m), lower = "ellipse", upper = "circle")

R 语言实现股票数据的预处理及分析 从相关系数中容易看出股票 GOOG 与 MSFT 间的相关系数快达到了 1 ,属于强相关;APPL 与 MSFT、GOOG 、ORCL 股票间的相关系数也超过 0.7,属于明显相关。

四 总结

本次实验在股票数据的预建模处理上,运用到了 quantmod 包进行数据获取,然后通过图形的可视化处理可以将技术分析更加直观,再通过多支股票的横向分析,得出它们之间的相关性。通过本次实验可以为股票分析打下基础,为后面的建模分析做好铺垫。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Where Wizards Stay Up Late

Where Wizards Stay Up Late

Katie Hafner / Simon & Schuster / 1998-1-21 / USD 16.00

Twenty five years ago, it didn't exist. Today, twenty million people worldwide are surfing the Net. "Where Wizards Stay Up Late" is the exciting story of the pioneers responsible for creating the most......一起来看看 《Where Wizards Stay Up Late》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具