使用 R 上的 'highfrequency' 包转换 .csv 文件以进行进一步操作
Convert .csv file for further manipulation using 'highfrequency' package on R
highfrequency
软件包的创建方式是将 .txt
和 .csv
文件分别从 NYSE TAQ 和 WRDS TAQ 转换为 .RData
xts 文件 objects,然后可以通过包轻松操作。
问题是我对 WRDS 数据库的访问权限有限,它只能让我从 CRSP(证券价格研究中心)数据库下载 tick-data,但不能从 TAQ(交易和报价)下载数据库。所以我的数据看起来像 this。可下载文件包含 2014-01-01 至 2014-01-05 REIT 指数的 tick-data。我手动更改了 header PRICE 的代码 header,因为它是由主要作者之一 Kris Boudt 提议的。
我使用的代码如下:
from="2014-03-01"
to="2014-04-31"
datasource="C:/Users/aris/Desktop/raw_data"
datadestination="C:/Users/aris/Desktop/xts_data"
convert(from = from,to=to,datasource = datasource,datadestination = datadestination,
trades=TRUE,quotes=FALSE,ticker="REIT",dir=FALSE,extension="csv",header = TRUE,
tradecolnames = NULL, quotecolnames = NULL,format = "%Y%m%d %H:%M:%S",onefile=TRUE)
我怀疑问题出在 format = "%Y%m%d %H:%M:%S"
行,因为在 .csv
文件中,日期和时间是用逗号分隔的。我试着在 %d and %H
之间放一个逗号,像这样 format = "%Y%m%d,%H:%M:%S"
但什么也没有。
错误显示
Error in `$<-.data.frame`(`*tmp*`, "COND", value = numeric(0)) :
replacement has 0 rows, data has 1048575
欢迎大家提出建议。
highfrequency::convert
函数调用 highfrequency:::makeXtsTrades
,它需要文本文件中的以下列:DATE、TIME、PRICE、SIZE、SYMBOL、EX、COND、CORR、G127。
我在你的文本文件中添加了空列,但没有得到你问题中的错误。编辑后的文本文件如下所示:
DATE,TIME,PRICE,SIZE,SYMBOL,EX,COND,CORR,G127
20140102,9:30:00,1123.77,,,,,,
20140102,9:30:01,1122.81,,,,,,
20140102,9:30:02,1122.77,,,,,,
不过我又遇到了一个错误。
Error in gzfile(file, "wb") : cannot open the connection
In addition: Warning message:
In gzfile(file, "wb") :
cannot open compressed file '/home/josh/Desktop/z_xts/2014-01-02/REIT_trades.RData', probable reason 'No such file or directory'
所以看起来 convert
函数希望所有每日输出目录在您 运行 它之前存在。函数 运行s 并在我创建这些目录后创建输出。
感谢 Joshua Ulrich,我获得了一些额外的直觉并解决了问题。实际上,无需操作 .csv 文件本身并添加额外的列。您可以通过设置 tradecolnames = c("DATE","TIME","PRICE")
让机器知道您的文件中包含哪些列,而不是设置 tradecolnames = NULL
。通过设置 dir=TRUE
修复了不存在目录的问题。最终代码如下所示:
from="2014-03-01"
to="2014-04-31"
datasource="C:/Users/aris/Desktop/raw_data"
datadestination="C:/Users/aris/Desktop/xts_data"
convert(from,to,datasource,datadestination,trades=TRUE,quotes=FALSE,ticker="REIT",dir=TRUE,extension="csv",header= TRUE,tradecolnames=c("DATE","TIME","PRICE"),format = "%Y%m%d %H:%M:%S",onefile=TRUE)
highfrequency
软件包的创建方式是将 .txt
和 .csv
文件分别从 NYSE TAQ 和 WRDS TAQ 转换为 .RData
xts 文件 objects,然后可以通过包轻松操作。
问题是我对 WRDS 数据库的访问权限有限,它只能让我从 CRSP(证券价格研究中心)数据库下载 tick-data,但不能从 TAQ(交易和报价)下载数据库。所以我的数据看起来像 this。可下载文件包含 2014-01-01 至 2014-01-05 REIT 指数的 tick-data。我手动更改了 header PRICE 的代码 header,因为它是由主要作者之一 Kris Boudt 提议的。
我使用的代码如下:
from="2014-03-01"
to="2014-04-31"
datasource="C:/Users/aris/Desktop/raw_data"
datadestination="C:/Users/aris/Desktop/xts_data"
convert(from = from,to=to,datasource = datasource,datadestination = datadestination,
trades=TRUE,quotes=FALSE,ticker="REIT",dir=FALSE,extension="csv",header = TRUE,
tradecolnames = NULL, quotecolnames = NULL,format = "%Y%m%d %H:%M:%S",onefile=TRUE)
我怀疑问题出在 format = "%Y%m%d %H:%M:%S"
行,因为在 .csv
文件中,日期和时间是用逗号分隔的。我试着在 %d and %H
之间放一个逗号,像这样 format = "%Y%m%d,%H:%M:%S"
但什么也没有。
错误显示
Error in `$<-.data.frame`(`*tmp*`, "COND", value = numeric(0)) :
replacement has 0 rows, data has 1048575
欢迎大家提出建议。
highfrequency::convert
函数调用 highfrequency:::makeXtsTrades
,它需要文本文件中的以下列:DATE、TIME、PRICE、SIZE、SYMBOL、EX、COND、CORR、G127。
我在你的文本文件中添加了空列,但没有得到你问题中的错误。编辑后的文本文件如下所示:
DATE,TIME,PRICE,SIZE,SYMBOL,EX,COND,CORR,G127
20140102,9:30:00,1123.77,,,,,,
20140102,9:30:01,1122.81,,,,,,
20140102,9:30:02,1122.77,,,,,,
不过我又遇到了一个错误。
Error in gzfile(file, "wb") : cannot open the connection
In addition: Warning message:
In gzfile(file, "wb") :
cannot open compressed file '/home/josh/Desktop/z_xts/2014-01-02/REIT_trades.RData', probable reason 'No such file or directory'
所以看起来 convert
函数希望所有每日输出目录在您 运行 它之前存在。函数 运行s 并在我创建这些目录后创建输出。
感谢 Joshua Ulrich,我获得了一些额外的直觉并解决了问题。实际上,无需操作 .csv 文件本身并添加额外的列。您可以通过设置 tradecolnames = c("DATE","TIME","PRICE")
让机器知道您的文件中包含哪些列,而不是设置 tradecolnames = NULL
。通过设置 dir=TRUE
修复了不存在目录的问题。最终代码如下所示:
from="2014-03-01"
to="2014-04-31"
datasource="C:/Users/aris/Desktop/raw_data"
datadestination="C:/Users/aris/Desktop/xts_data"
convert(from,to,datasource,datadestination,trades=TRUE,quotes=FALSE,ticker="REIT",dir=TRUE,extension="csv",header= TRUE,tradecolnames=c("DATE","TIME","PRICE"),format = "%Y%m%d %H:%M:%S",onefile=TRUE)