王冠嵩的网站

TAQ数据处理

标签: 2015高频数据日波动率 2015-09-14

高频交易报价数据来自于TAQ数据库。这个项目利用Shell脚本(主要是awk)和R脚本,把大(压缩)数据文件分割成每日每支股票的小数据文件(RData)。此外还包括了一些基本的数据处理和清理。

这个项目是我在UNC为了处理TAQ数据所做,也是我从Matlab转向R之后的第一次实际应用,所以很多地方只做到了可用而已。以下是翻译到中文的README文档。

Github链接:https://github.com/wangguansong/TAQDataTreatment

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文件的元信息。如果过滤文件已存在,将相应信息填入数据框。