全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1569 1
2019-12-11

WindR是Wind官方提供的R语言接口,包括数据获取、交易等函数,本文仅介绍其中部分常用函数的使用方法。
Wind提供了详细的WindR用户手册,是非常好的学习手册/工具书。如果没有积分下载也可以微信搜索我的个人公众号PurePlay, 后台回复WindR即可获取。

文章目录

  • 安装
  • 载入与启动
  • 历史序列数据函数
  • 日期函数
  • 实例

安装

直接在R语言控制台输入以下命令即可

# 注意根据Wind所在路径修改路径参数
install.packages("D:\\Program Files\\Wind\\Wind.NET.Client\\WindNET\\bin\\WindR.tar.gz", 
                 repos = NULL, type="source")

注:其他安装方法见WindR官方手册

载入与启动

标准载入与启动代码如下:

library(WindR)
w.start() 

然而在我的RStudio中会导致程序重启,原因是w.strat()会自动打开导航界面,而只要尝试导航界面就会让程序重启,之前运行的程序全部失效。

# 尝试打开导航界面就会让程序重启
w.menu()

因此载入并启动WindR库时需要添加showmenu=FALSE参数

library(WindR)
# 不显示登录界面
w.start(showmenu=FALSE);
# 命令超时时间为 300 秒,可将其设置成 60 秒
w.start(waitTime=60,showmenu=FALSE);
# 判断 WindR 是否已经登陆成功
w.isconnected()

历史序列数据函数

w.wsd()命令用来获取选定证券品种的历史序列数据,包括日间的行情数据、基本面数据以及技术指标数据。可以使用?w.wsd查看命令说明。

命令原型为:

  • data <- w.wsd(security, fields, startdate, enddate, option]);

返回值为列表类型,包括以下三项:

  • Data是返回的序列数据,为 data.fr ame 格式;

  • Code 对应的WindCode代码;

  • ErrorCode表示是否成功,值为0时表示成功。

实例:

# 取浦发银行2016年4月30日至昨天的收盘价,复权方式为前复权
data<-w.wsd("600000.SH","close",
            "2016-04-30",Sys.Date()-1,
            'PriceAdj=F')

注:一次只能一个品种的数据,并且品种名为带有“.SH”等后缀的Wind代码;

其中,可以设置三种复权方式:前复权PriceAdj=F,后复权PriceAdj=B,定点复权PriceAdj=A

日期函数

获取交易日序列

# 返回5月1日到6月8日之间的交易日序列
w.tdays("2019-05-01","2019-06-08")
# 返回5月1日到当前时间的交易日序列
w.tdays("2019-05-01")
# 返回5月1日前推五个交易日的日期,返回2019-4-19
w.tdaysoffset(-5,"2019-05-01")
# 返回当前时间前推五个交易日的日期
w.tdaysoffset(-5)
# 返回5月1日到6月8日之间的交易日序列长度,为27
w.tdayscount("2019-05-01","2019-06-08")
# 返回5月1日到当前时间的交易日序列长度
w.tdayscount("2019-05-01")

WindR 函数中的时间指标是以距离某个时间点的天数形式输出的,是一个浮点数,使用w.asDateTime() 把这种格式的时间值转换成 R 语言时间格式

# 取两支股票最近交易日,以及前收盘价
data<-w.wss("600000.SH,000002.SZ","last_trade_day,pre_close")
# 返回的最近交易日是数字化时间格式,用w.asDateTime 转换,假设当前是2019.8.2号
w.asDateTime(data$Data[,2]) 
## "2019-08-02 00:00:00 CST" "2019-08-02 00:00:00 CST"
w.asDateTime(data$Data[,2],asdate=T)
## "2019-08-02" "2019-08-02"

实例

在Wind终端找到股票、债券以及商品三大类资产中需要下载的资产的Wind代码后,下载1990年至今的收盘价数据保存到excel文件中,同类资产保存到同一个sheet。

library(WindR)
library(openxlsx)
# 启动WindR
w.start(waitTime=60,showmenu=FALSE);
w.isconnected()
# 初始化参数
	# 需要下载的三类资产的wind代码
indexCodes <- list(stockIndexes = c("000001.SH", "HSI.HI", "IXIC.GI","SPX.GI", 
                                   "N225.GI", "FTSE.GI", "FCHI.GI", 
                                   "GDAXI.GI", "AS51.GI", "SENSEX.GI"),
                   bondIndexes = c("H11001.CSI"),
                   commodityIndexes = c("S0031505", "S0031506", "S0031507", 
                                        "S0031508", "S0031509","S0031510", 
                                        "S0031511")
                   )
fields <- c("close") 
startDate<-'19900101';
	# 截止到前一日
endDate<-Sys.Date()-1;

# 函数体
getIndexs <- function(indexCodes, fields, startDate, endDate) {
  # 输入:初始化参数
  # 输出:本地excel文件,每类资产的
    
  # 遍历大类资产
  for (i in 1:length(indexCodes)) {   
    subIndexes <- indexCodes[[i]]
    # 遍历各大类资产的子资产
    for (j in 1:length(subIndexes)) {
      if (j != 1) {
        # 获取第i类第j个资产的序列数据
        tempData <- w.wsd(subIndexes[j], fields, startDate, endDate,'priceadj=F')
        # 保留收盘数据并将指数代码命名为列名
        tempData <- tempData$Data
        colnames(tempData) <- c("DATETIME", subIndexes[j])
        # 将收盘价合并到prices中
        prices <- merge(prices, tempData, by = "DATETIME")
        cat("第",i,"类第", j, "个资产下载完成…\r")
      } else {
        # 获取第i类第1个资产的序列数据
        data <- w.wsd(subIndexes[j], fields, startDate, endDate,'priceadj=F')
        # 保留收盘数据并将指数代码命名为列名
        prices <- data$Data
        colnames(prices) <- c('DATETIME', subIndexes[1])
        cat("第",i,"类第", j, "个资产下载完成…\r")
      }
    }
    cat("第", i, "类资产下载完成…\n")
    # 将第i类资产的序列数据保存到prices`i`
    assign(paste("prices",i,sep=""),prices)
    print(head(prices, 5))
  }
  # 3类资产下载完成后分别保存到rawData.xlsx的不同sheet
  list_data <- list("Sheet1" = prices1,
                    "Sheet2" = prices2, 
                    "Sheet3" = prices3)
  write.xlsx(list_data, 
             file="D:\\Workfiles\\Finance\\Quants\\DataResources\\wind\\rawData.xlsx")
}

# 调用函数下载数据
getIndexs(indexCodes, fields, startDate, endDate)
# 停止WindR
w.stop()

##	数据示例
##	DATETIME 	000001.SH HSI.HI IXIC.GI SPX.GI N225.GI
##	<date> 		<dbl>	<dbl>	<dbl>	<dbl>	<dbl>
##	1990-12-19	100.00	3083	371.22	330.20	24876.78	
##	1990-12-20	104.39	3078	372.30	330.12	24524.94	
##	1990-12-21	109.13	3079	373.60	331.75	24119.60	
##	1990-12-24	114.55	3060	372.41	329.90	24119.60	
##	1990-12-25	120.25	3060	372.41	329.90	23767.88

欢迎关注我的知乎|简书|CSDN|微信公众号PurePlay , 会不定期分享量化金融与R干货。
在这里插入图片

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2019-12-12 11:40:59
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群