R语言基础(3)——获取金融数据及处理分析

quantmod包

quantmod包提供了量化投资分析的一体化解决方案,它能够帮助使用者完成提取数据、数据重整、金融建模、交易回测和模型可视化等诸多环节。

getSymbols()函数

  1. 安装和加载包
install.packages("quantmod")
library(quantmod)
  1. 查看该函数的主要参数

> args(getSymbols)
function (Symbols = NULL, env = parent.frame(), reload.Symbols = FALSE, 
    verbose = FALSE, warnings = TRUE, src = "yahoo", symbol.lookup = TRUE, 
    auto.assign = getOption("getSymbols.auto.assign", TRUE), 
    ...) 

对各项参数的解释
在这里插入图片描述

  • getSymbols()函数可以从网络上常用金融数据库中抓取金融数据,目前支持的数据库包括:yahoo、google、FRED、oanda
    从上面几个数据库中,我们可以获取上市公司的股票数据,包括股票日交易数据、股息数据、拆股数据、财务报表数据、期权列表数据;以及汇市数据、重金属交易数据以及美联储官网公布的若干经济数据(注:获取数据时可能会由于网络问题出现’服务器无响应’或’操作超时’的提示,特别是指定抓取数据的网址为’yahoo’时)。

getSymbols()函数参数的特例

getSymbols(‘AAPL’,src=’csv’) 目前尝试把csv文件放在其他目录会发生错误,虽然路径也改了

  • getSymblos.csv 会发生错误,以后再试试 - – getSymbols.FRED
  • getSymbols.google
  • getSymbols.MySQL
  • getSymbols.oanda
  • getSymbols.rda
  • getSymbols.yahoo
  • getSymbols.yahooj
  • setSymbolLookup
交易数据获取与处理函数目的
getDividends获取分红数据
getSplits获取送股数据
getFinancials获取财务报表
getQuote获取实时股票数据
getFX获取外汇数据
getMetals获取金属价格数据
adjustOHLC除权除息函数
Delt计算两个序列对应数据差值比例
finsPeaks找到某一序列最高值
has.OHL
OHLC.TransformationsOHLC对象数据的提取与变换
options.expiry
periodReturn计算区间的收益
adjustOHLC()除权、出息函数
Next()、Lag()前置、后置函数,有可选项
redenominate改变某一instrument的基础货币
volep生成volumebar的端点(这对包含volume的时间序列数据)

specifyModel modelData getModelData builData buildModel fittedModel
等函数是一个系列

绘图函数及其附件
chartSeries
chart_Series
chartTheme
chob-class
chobTA-class
newTA
setTA
TA
zoomChart
saveChart
建模函数
specifyModel
buildData
buildMode
tradeModel
fittedMode
modelSignal
moldeData
getModelData
is.quantmod
defaults
creat.binding
getOptionChain

获取股票数据

1. 股票日交易数据

代码中的’.ss’表示该公司的股票从属于上交所。类似地,可以获取上证A股指数(代码为 000002.ss)、上证B股指数(代码为000003.ss)、上证综合指数(代码为000008.ss)、沪深300指数(代码为 000300.ss)、深圳成指(代码为 399001.sz)等,需要获取深交所股票数据时,把’.ss’替换为’.sz’。

一个例子

# 查询微软公司的股票交易数据
> getSymbols("MSFT",src='yahoo')  #google失效
[1] "MSFT"
# 获取最近三天的交易数据
> tail(MSFT,3)
           MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume MSFT.Adjusted
2019-10-30    143.52    145.00   142.79     144.61    18471700        144.61
2019-10-31    144.90    144.93   142.99     143.37  2459620000        143.37
2019-11-01    144.26    144.42   142.97     143.72    33119200        143.72
> 

getSymbols结果重命名

# 获取上交所基金科瑞(500056)的股票数据
> setSymbolLookup(JJKR=list(name="500056.SS",src="yahoo"))
> getSymbols("JJKR")

2. 各种指数的日数据

# 获取上证指数的日数据(^SSEC)
> getSymbols("^SSEC")
> tail(SSEC,3)
           SSEC.Open SSEC.High SSEC.Low SSEC.Close SSEC.Volume SSEC.Adjusted
2017-08-24  3287.959  3297.989 3266.359   3271.512      163500      3271.512
2017-08-25  3271.461  3331.915 3271.461   3331.522      205800      3331.522
2019-11-01  2924.340  2959.833 2917.146   2958.199  3105835412      2958.199
> 

3. 股息数据

# 获取微软公司的股息数据(只显示三条数据)
> getDividends("MSFT")
           MSFT.div
2003-02-19     0.08
2003-10-15     0.16
2004-08-23     0.08
2004-11-15     3.08
2005-02-15     0.08
2005-05-16     0.08
2005-08-15     0.08
2005-11-15     0.08

接下来,我们根据股息调整股票价格,adjustOHLC函数可以对股票数据进行除息调整。

> getSymbols("MSFT", from="2010-01-01", src="yahoo")
> tail(MSFT.a <- adjustOHLC(MSFT),3)
           MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume MSFT.Adjusted
2019-10-30    143.52    145.00   142.79     144.61    18471700        144.61
2019-10-31    144.90    144.93   142.99     143.37  2459620000        143.37
2019-11-01    144.26    144.42   142.97     143.72    33119200        143.72
> 

4. 除权除息数据

# 获取苹果公司的除权股息数据
> getSplits("AAPL")
           AAPL.spl
1987-06-16 0.5000000
2000-06-21 0.5000000
2005-02-28 0.5000000
2014-06-09 0.1428571

5. 股票分割数据

> tail(getSplits("MSFT"),3)
           MSFT.spl
1998-02-23      0.5
1999-03-29      0.5
2003-02-18      0.5

6. 期权交易数据

利用**getOptionChain()**函数可以获取上市公司的期权交易数据
新浪财经50ETF期权行情接口
四种波动率

获取汇率数据

**getFX()**函数可以帮助我们从oanda获取汇率数据

# 获取美元与日元的汇率数据
> getFX("USD/JPY",from='2016-01-01')
[1] "USDJPY"
> tail(USDJPY,3)
           USD.JPY
2016-11-06 103.126
2016-11-07 104.312
2016-11-08 104.312
# 同样我们可以使用getSymbols函数来获取
> getSymbols("USD/JPY",src="oanda",from="2016-01-01")
[1] "USDJPY"

获取重金属交易数据

**getMetals()**函数可以获取重金属的交易数据

> getMetals(c("gold","XPD"),from='2016-01-01')
[1] "XAUUSD" "XPDUSD"
> tail(c(XAUUSD,XPDUSD),3)
            XAU.USD
2016-11-07  653.402
2016-11-08 1288.540
2016-11-08  653.402

获取美联储经济数据

> getSymbols('CPIAUCNS',src='FRED')
[1] "CPIAUCNS"
> tail(CPIAUCNS,3)
           CPIAUCNS
2016-07-01  240.628
2016-08-01  240.849
2016-09-01  241.428

Delt计算差值比例

Stock.Open <- c(102.25,102.87,102.25,100.87,103.44,103.87,103.00)
Stock.Close <- c(102.12,102.62,100.12,103.00,103.87,103.12,105.12)

Delt(Stock.Open)                    #one period pct. price change
Delt(Stock.Open,k=1)                #same
Delt(Stock.Open,type='arithmetic')  #using arithmetic differences (default)
Delt(Stock.Open,type='log')         #using log differences

Delt(Stock.Open,Stock.Close)        #Open to Close pct. change
Delt(Stock.Open,Stock.Close,k=0:2)  #...for 0,1, and 2 periods

periodReturn计算期间收益

getSymbols("YHOO")
#计算自2003年以来的dailyReturn、weeklyReturn、
#monthlyReturn、quaterlyReturn、annualReturn.
allReturns(YHOO,subset = "2003::")
periodReturn(YHOO,period='yearly',subset='2003::')#计算自2003年以来的年收益
periodReturn(YHOO,period='yearly',subset='2003')  # 计算2013年收益
yearlyReturn(YHOO,subset="2003")#同上

从数据库获取数据

quantmod除了支持从网络数据库直接抓取数据外,当然也支持从本地数据库读入数据。目前,能支持的数据库类型及调用函数如下:

  • getSymbols.rda():读取以.r格式存储的数据
  • getSymbols.csv():从csv文件读取OHLC数据
  • getSymbols.SQLite():从SQLite数据库读取数据
  • getSymbols.MySQL():从MySQL数据库读取数据

获取上市公司的财务报表

getFinancials()函数和getFin()函数可以获取上市公司的财务报表数据。
通过
view.Fin
函数,我们可以查看财务报表数据。

> getFinancials("AAPL")
[1] "AAPL.f"
> head(viewFin(AAPL.f),5)
                                 2016-09-24 2015-09-26 2014-09-27 2013-09-28
Cash & Equivalents                    11883       9731       3612       5554
Short Term Investments                46671      20481      11233      26287
Cash and Short Term Investments       67155      41601      25077      40546
Accounts Receivable - Trade, Net      15754      16849      17460      13102
Receivables - Other                      NA         NA         NA         NA

上证50ETF期权隐含波动率
参考自:
Quantmod Tutorial:数据获取(一)
R量化交易工具篇—quantmod包的基本应用

  • 19
    点赞
  • 150
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值