TAQ数据处理
2015-09-14
高频交易报价数据来自于TAQ数据库。这个项目利用Shell脚本(主要是awk)和R脚本,把大(压缩)数据文件分割成每日每支股票的小数据文件(RData)。此外还包括了一些基本的数据处理和清理。
这个项目是我在UNC为了处理TAQ数据所做,也是我从Matlab转向R之后的第一次实际应用,所以很多地方只做到了可用而已。以下是翻译到中文的README文档。
TAQ数据库包括了股票成交和报价记录。由于电子交易网络的出现,交易量大大地增加了。SAS用户可以从TAQ数据库直接获取数据,但如果从TAQ网站直接请求下载交易数据,下载文件常常十分巨大很难直接分析。
这个项目利用Shell脚本(主要是awk)和R脚本,把大(压缩)数据文件分割成每日每支股票的小数据文件(RData)。此外还包括了一些基本的数据处理和清理。
文件和脚本如下所列,按功能分类:
(1)基本信息
- dj30.txt
- 包含道琼斯30指数(在2012年时)成份股符号列表,用于从TAQ数据库请求数据时的股票符号列表。
- dj30_name.csv
- 包含道琼斯30指数成份股的符号、名称和交易列表。
- halfdays.txt
- 包含从1993年到2012年的所有半交易日列表,格式为yyyymmdd(例如20150923)。
- Overview of TAQ Data.pdf
- TAQ数据的概览(官方文档)。
(2)分割大文件
- TAQSplit2gz.sh
- 把大文件(csv, gz,或zip格式)分割成每日每支股票的小文件,分割后的小文件包含了一支股票在一天内的交易/报价记录。分割后的csv文件被压缩为gz文件。
- TAQSplit2RData.sh
- 本项目的核心程序。如同上一个文,只是本脚本分割后的csv文件保存成RData文件。这个脚本依赖于下面的R脚本(和R程序)。
- TAQcsv2RData.R
- 读取一个csv文档并输出为一个RData文件。数据列类型需要指明。
- SortRDataBySymbol.sh
- 当TAQ大文件包含很多支股票和日期时,分割后会生成很多小文件。此脚本将这些小文件整理为按股票分类的文件夹。
- TAQLoop.sh
- 在TAQ大文件中扫描所有的股票符号和日期,然后生成一个索引文件或者对每一个股票/日期组合运行一个处理小csv的脚本。
(3)获取一日一支股票的记录
- TAQExtract.sh
- 给定一个股票符号和一个日期,此脚本在大文件中寻找所有该股票/日期组合的记录。如果存在索引文件,此脚本会利用索引信息提高速度。运行时间会和记录在大文件中所处位置有关,通常为几分钟。
- TAQExtract.R
- 在R中引用上个脚本。
(4)无效记录的粗略处理
- TAQFilter.R
- R方程,输入一个R数据框(data frame)或一个包含数据框的RData文件名,返回一个长度为数据框行数的逻辑向量,其中TRUE代表正常数据而FALSE代表无效数据。
- TAQError.R
- R方程,输入一个R数据框(data frame)或一个包含数据框的RData文件名,返回一个长度为数据框行数的逻辑向量,其中FALSE代表离奇的数据(比如点错小数点的价格)。
- TAQOutLiersBHLS.R
- R方程,输入一个价格的向量,返回一个对应长度的逻辑向量,其中TRUE代表可能为异常值。
- TAQSparseSample.R
- R方程,输入一个R数据框(data frame),给定采集数据的频率(每秒、每10秒等等),返回一个R数据框,其中第一列为采集时间,第二列为对应的原数据框的行数。
- TAQCondPlot
- R方程,输入一个R数据框(data frame)或一个包含数据框的RData文件名,生成一个价格走势图,其中标示出所有异常的记录点。
(5)生成可用数据
- TAQApplyFilter.R
- R方程,给定一个RData的文件名,检查其中列的格式,如果需要则更新原RData文件。运行指定的过滤程序,把结果保存到新RData文件中。
- TAQCreateSamples.R
- 类似于上个文件,但运行更多的过滤程序。另外会报告检查到的格式错误而不会自动改变原文件。
- TAQCheckData.R
- R脚本,生成一个数据框,保存所有小RData文件的元信息。如果过滤文件已存在,将相应信息填入数据框。