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


雷达卡






京公网安备 11010802022788号







