发布时间:2025-03-10 17:35:23    次浏览
概述和Python计算环境中的tushare包一样,在R中我们使用quantmod包接入第三方数据源,实现自定义量化分析平台的构建。本文打算以陌陌的股票分析为背景,介绍如何通过quantmod包构建专属的量化分析平台。什么是quantmodquantmod就是提供给宽客们使用的专业模块,Quantmod本身提供强大的数据接入能力,默认是雅虎财经的数据源,此外quantmod还以绘制专业的行情分析图表以及各种技术指标计算等功能著称,常常只要几行函数就能完成从数据获取和处理到画图的复杂功能,其工作效率之高让行家里手都觉得膛目结舌。 利用API读取在线行情首先,我们利用雅虎财经的默认接口直接体验一下读取多只股票。原理利用API读取的方式,我们需要设定一个读取序列和对应的配置,获取行情函数getSymbols类似于原生的assign和get函数,用函数的方式将变量名传入后完成变量的赋值。基于这个原理,我写了一个Quote函数来优化参数配置的体验。首先我们需要定义一个股票池序列,然后调用Quote函数获取某只股票的行情返回数据。下面以美股的陌陌、360和A股的平安银行为例:代码# 加载quantmod包if(!require(quantmod)){install.packages('quantmod')}# 股票行情匹配函数Quote = function(code){index = match(code,universes)temp = lapply(universes,get)return(temp[[index]])}# 基本配置universes - c('000001.SZ','QIHU','MOMO')from = '2015-01-04'to = Sys.Date() # 结束时间设为当前日期src= 'yahoo' # 来源雅虎财经# 行情加载 速度有点慢,耐心等待quantmod::getSymbols(universes,from=from,to=to,src=src)# 绘制行情quantmod::chartSeries(Quote('MOMO'),up.col='red',dn.col='green',TA='addVo(); addADX();addMACD(); addSMA(n=10);addBBands(n=14,sd=2,draw='bands')') 效果 利用CSV读取离线行情接着,在离线模式或者网络访问缓慢的情况下,我们也可以用一些实现准备好的CSV文件来读取行情。原理分析底层数据结构后,我们知道quantmod包读取后的数据格式是 xts 和 zoo,我们只需要将csv文件按一定的格式读取到内存后再进行相应变换,quantmod强大的分析和作图能力就可以为我们所用。zoo本身是一种时间序列格式,而xts则是在这基础上一种时间序列格式的加强版。在读取csv的时候,我们需要用首行确定header。在转化为zoo时,我们则需要首列来确定时间序列对应的时间。最后通过xts转化为可以被quantmod识别的xts时间序列对象。下面以平安银行为例:代码# 加载 zoo 时间序列包library(zoo)library(quantmod)# 配置文件路径filePath = '/Users/harryzhu/temp.csv'# 读取CSV并转化时间格式csv - read.csv(filePath,header=TRUE,sep=',')csv$LZ_GPA_QUOTE_TCLOSE - as.POSIXct(as.character(csv$LZ_GPA_QUOTE_TCLOSE),tz='',format='%Y%m%d')# 转化为zoo类型temp = read.zoo(csv)# 转化我xts类型payh =as.xts(temp[,1]);colnames(payh)='Close'# 制图chartSeries(payh,name='000001.SZ')# 添加MACD曲线addMACD()效果 指标计算参考官方文档,我们知道,利用quantmod和TTR包,我们可以快速计算常见指标,下面是对应的计算列表。 Web应用构建参考 Rich Harken大神 制作的 以及源码,我们可以将上述参数暴露为网页上的选项,利用shiny的ajax和websocket的实时链接特性定制我们的chartSeries函数,达到通过选项实时作图的功能。效果图 尾注综上所述,我们可以发现,利用quantmod、shiny包,我们可以快速实现各种姿势的行情获取以及常见的关键指标的计算和绘制,并且转化为实时的Web应用,建立一个专属的量化分析Web平台。参考资料quantmod官方文档Rich Harken: R quantmod Demonstration for Data Products ClassShiny Tutorial:Use reactive expressions作者:Harry ZhuFinanceR 专栏:,提示:鉴于程序较长,需要的童鞋请留下邮箱,直接发给大家~~~