如何在SAS中重新构建限价指令簿(Limit Order Book):使用HashTable
在之前的一篇日志里(http://blog.csdn.net/u010501526/article/details/8875446),我将重新构建LOB(Limit Order Book)分为了三步
1)如何用sas读取nasdaq total-view数据
2)根据每一个message的reference number找到这个message是属于哪只股票
3)利用某只股票的message来重构LOB
第一步已经有代码了,第二步可以自己构思一下,方法不是唯一的。第三步会很有意思,方法可能也不是唯一的,目前找到的效率最好的一种方法是用Hash Table来做,SAS在这块的功能很强大,有一篇文章就专门谈了这一点。
文章地址:http://www.nesug.org/Proceedings/nesug11/fi/fi04.pdf
这篇文章使用伦敦股票交易所的数据来重新构建LOB,步骤大致分为
1)先将数据处理成如下格式
列:每一行是一个新的message
行:从最右边开始,这样逻辑上清晰
第5列,lo_price表示的是价位,比如提单在多少价位,撤单在多少价位,成交在多少价位
第4列,event_date是时间戳
第3列,ohebs是买卖方向
第2列,sflag指令的变动数量
第1列,stamt是股票的变动数量
2)在得到上面这种数据格式之后就可以用下面的程序
/*Hashing programme to reconstruct the both sides of the LOB after each order
event. For each price line, the reconstructed LOB contains the aggregated
volume and the number of orders outstanding.*/
data lob (keep = event_date lo_price ohebs depth ordcnt);
/* initialization */
if _n_ = 1 then
do;
set book point = _n_;
length depth 8 ordcnt 8;
declare hash hh (hashexp: 10);
/* Set up the hash table to recreate outstanding volume and number of
orders at each price line in the buy and sell LOB*/
hh.DefineKey ('lo_price', 'ohebs');
hh.DefineData ('lo_price', 'ohebs', 'depth', 'ordcnt');
DefineDone ();
call missing (lo_price, ohebs, depth, ordcnt);
declare hiter hiter ('hh');
end;
do until (last.event_date);
set book;
/* The objective is to reconstruct the LOB after each event time.*/
by event_date;
rc = hh.find ();
/* If buy or sell limit price is found in the table, add aggregated size of
the new orders to outstanding volume and add the number of new orders to
number of outstanding orders at each price line.*/
if (rc = 0) then
do;
depth ++ stamt;
ordcnt ++ sflag;
hh.replace ();
end;
else
do;
depth = stamt;
ordcnt = sflag;
hh.add ();
end;
end;
/* After each event time dump the content of the hash table.*/
rc = hiter.first();
do while (rc = 0);
/* If the a table address is empty or size of the remaining order is zero
then don't dump the table address.*/
if depth GT 0 and ordcnt GT 0 then output;
rc = hiter.next ();
end;
run;
得到的限价指令簿如下:
最后说一下用hash table的好处,由于sas在data步处理数据一般是从硬盘中读数据再放回,这样速度慢,但是hash table是在内存中存储数据,所以速度会快非常多,但也存在一个制约,即从硬盘读数据存数据意味着可以处理的数据量是硬盘的大小,而用内存处理数据那可以处理的数据量就只有内存的大小,所以在SAS中用hash table可能会出现内存不足,当然这是很极端的情况
如何在SAS中重新构建限价指令簿(Limit Order Book):使用HashTable的更多相关文章
- 如何在Idea中编译构建Spring Framework 5.x
如何在Idea中编译构建Spring Framework 5.x 安装配置Gradle(略) 下载源码:git clone https://github.com/spring-projects/spr ...
- 如何在ASP.NET Core 中快速构建PDF文档
比如我们需要ASP.NET Core 中需要通过PDF来进行某些简单的报表开发,随着这并不难,但还是会手忙脚乱的去搜索一些资料,那么恭喜您,这篇帖子会帮助到您,我们就不会再去浪费一些宝贵的时间. 在本 ...
- 如何在Eclipse中添加Servlet-api.jar的方法
方法一: 点击窗口->首选项->java->构建路径->类路径变量->新建:将你的tomcat目录下的common/lib/servlet.jar加进来.如果你建立了一个 ...
- 如何在Python中从零开始实现随机森林
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 决策树可能会受到高度变异的影响,使得结果对所使用的特定测试数据而言变得脆弱. 根据您的测试数据样本构建多个模型(称为套袋)可以减少这种差异,但是 ...
- 如何在Linux中使用Firejail运行应用程序
有时您可能希望使用在不同环境中未经过良好测试的应用程序,但您必须使用它们.在这种情况下,关注系统的安全性是正常的.在Linux中可以做的一件事是在沙箱中使用应用程序. “沙盒”是在有限环境中运行应用程 ...
- 如何在ChemDraw中绘制分子立体结构
ChemDraw是当前最常用的的化学结构绘图软件,软件功能包括化学作图.分子模型生成.化学数据库信息管理等,可以说是化学家和生物学家所需要最终极的化学结构绘图工具.本教程主要介绍ChemDraw绘制分 ...
- 如何在Eclipse中写Processing的sketch
有时候人们需要写更复杂的sketch,此时Processing提供的IDE就略显单薄,下面将介绍如何在eclipse中开发Processing. 一共分4步: 一.搭建环境:安装JRE.JDK.Ecl ...
- 如何在vue-cli中使用vuex(配置成功
前言 众所周知,vuex 是一个专为 vue.js 应用程序开发的状态管理模式,在构建一个中大型单页应用中使用vuex可以帮助我们更好地在组件外部管理状态.而vue-cli是vue的官方脚手架,它能帮 ...
- Kubernetes入门(四)——如何在Kubernetes中部署一个可对外服务的Tensorflow机器学习模型
机器学习模型常用Docker部署,而如何对Docker部署的模型进行管理呢?工业界的解决方案是使用Kubernetes来管理.编排容器.Kubernetes的理论知识不是本文讨论的重点,这里不再赘述, ...
随机推荐
- Python 2.7 学习笔记 基本语法和函数定义
本文介绍下python的基本语法 一.变量定义 不需要说明类型,也不需要像js等脚本语言使用var等标识符.直接声明即可,如: num=1 说明:上面语句声明了一个变量num,并在声明时初始化值为 1 ...
- 网络爬虫 kamike.collect
Another Simple Crawler 又一个网络爬虫,可以支持代理服务器的FQ爬取. 1.数据存在mysql当中. 2.使用时,先修改web-inf/config.ini的数据链接相关信息,主 ...
- python学习笔记——第三章 串
第三章 字符串学习 1.字符串不灵活, 它不能被分割符值 >>> format = "hello, %s. %s enough for ya?" >> ...
- mysql基础入门
基本命令:(sql分号结束,切记.切记) 登录mysql:mysql -h ip -u用户名 -p 或者 mysql -u用户名 -p密码 查看数据库: show databases: ...
- 以前学习cisco ccna 课程的时候做的笔记
由于学习的专业是计算机网络技术,可是在上学的时候,并没有学习到多少网络知识,所以为了对得起学的专业,在06年工作的时候,在哈工大银河教育报了个ccna的班,两个星期的课程,每天上那么几个小时. 结果依 ...
- c: c代码书写规范
排版: 较长的语句或函数过程参数(>80字符)要分成多行书写, 长表达式要在低优先级操作符处划分新行,操作符放在新行之首, 划分出的新行要进行适当的缩进,使排版整齐,语句可读 参考: 1. 运算 ...
- 解决QT Creator在Linux下的输入法问题
https://vjudge1.github.io/2014/04/02/type-chinese-in-linux/http://blog.csdn.net/ubuntutouch/article/ ...
- VS2008 Project : error PRJ0019: 某个工具从以下位置返回了错误代码: "正在执行生成后事件..."解决方案
右键工程属性 -> 配置属性 -> 生成事件 ->生成后事件,命令行中的路径加上双引号,如 copy $(ProjectDir)\export\win32\Debug\$(Proje ...
- UVA 718 - Skyscraper Floors(数论)
UVA 718 - Skyscraper Floors 题目链接 题意:在一个f层高的楼上,有e个电梯,每一个电梯有x,y表示y + k * x层都能够到,如今要问从a层是否能到达b层(中间怎么换乘电 ...
- CentOS桌面环境如何打开终端以及如何将终端加入右键
安装完CentOS的桌面环境后,默认在桌面以及右键是没有打开终端选项的,要想打开终端,可以由以下步骤: 在左上角菜单[Applications]--->[System Tools]---> ...