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

您所在的位置:网站首页 基于r语言的自动数据收集 R 语言实现股票数据的预处理及分析

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

2024-01-13 13:31| 来源: 网络整理| 查看: 265

基于 R 语言的股票数据分析 一、实验介绍 1.1 实验内容

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

1.2 实验知识点 股票数据抓取股票数据线图绘制及技术分析股票日度收益率计算多支股票的相关性 1.3 实验环境 R version 3.4.1Xfce终端 1.4 适合人群

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

二、实验内容 2.1 相关股票背景介绍 2.1.1 收益率

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

简单收益率:

此处输入图片的描述

对数收益率:

此处输入图片的描述

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)

此处输入图片的描述

3.1.2 tseries 包

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

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

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

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

> goog head(goog)

此处输入图片的描述

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

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

下载以后的默认对象是 zoo

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

3.2 绘制股票图

表 3-1 作图函数

函数chartSerieschartThemecandleChartlineChartbarChart 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")

此处输入图片的描述

增加参数类型

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

此处输入图片的描述

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 宽度

此处输入图片的描述

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

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

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

表 3-2 技术函数

ADX读数意义ADX>= 30趋势就可以是为强劲20 chartSeries(AAPL,up.col='red', dn.col='green',theme="white") > addADX()

此处输入图片的描述

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

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

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

此处输入图片的描述

可以把上面介绍的技术合到一张图上

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

此处输入图片的描述

剩余的函数读者可自行实验讨论,结果报告可提交到实验平台~

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

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

> close close1 head(close1)

此处输入图片的描述

> calclose simplerate names(simplerate)="simplerate" > calrate=merge(calclose,simplerate) > head(calrate)

此处输入图片的描述

3.3.2 对数收益率

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

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

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

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

此处输入图片的描述

3.4 抓取多支股票

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

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

此处输入图片的描述

查看抓取的全量数据情况

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

此处输入图片的描述

此处输入图片的描述

此处输入图片的描述

此处输入图片的描述

3.4.1 求出股票总成交量

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

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

此处输入图片的描述

计算 2017 年 1 月到 6 月的股票总成交量

>sum(Vo(AAPL))

此处输入图片的描述

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

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

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

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

> AAPL length(AAPL[which(AAPL > 0.02), ]) > plot(AAPL[which(AAPL > 0.02), ])

此处输入图片的描述

此处输入图片的描述

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

> ORCL length(ORCL[which(ORCL > 0.02), ]) > plot(ORCL[which(ORCL > 0.02), ])

此处输入图片的描述

此处输入图片的描述

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

> MSFT length(MSFT[which(MSFT > 0.02), ]) > plot(MSFT[which(MSFT > 0.02), ])

此处输入图片的描述

此处输入图片的描述

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

>GOOG length(GOOG[which(GOOG > 0.02), ]) >plot(GOOG[which(GOOG > 0.02), ])

此处输入图片的描述

此处输入图片的描述

3.6 相关性判断 3.6.1 调整数据

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

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

此处输入图片的描述

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

此处输入图片的描述

绘制相关性图

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

此处输入图片的描述

从相关系数中容易看出股票 GOOG 与 MSFT 间的相关系数快达到了 1 ,属于强相关;APPL 与 MSFT、GOOG 、ORCL 股票间的相关系数也超过 0.7,属于明显相关。

四 总结

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3