在之前的一篇日志里(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的更多相关文章

  1. 如何在Idea中编译构建Spring Framework 5.x

    如何在Idea中编译构建Spring Framework 5.x 安装配置Gradle(略) 下载源码:git clone https://github.com/spring-projects/spr ...

  2. 如何在ASP.NET Core 中快速构建PDF文档

    比如我们需要ASP.NET Core 中需要通过PDF来进行某些简单的报表开发,随着这并不难,但还是会手忙脚乱的去搜索一些资料,那么恭喜您,这篇帖子会帮助到您,我们就不会再去浪费一些宝贵的时间. 在本 ...

  3. 如何在Eclipse中添加Servlet-api.jar的方法

    方法一: 点击窗口->首选项->java->构建路径->类路径变量->新建:将你的tomcat目录下的common/lib/servlet.jar加进来.如果你建立了一个 ...

  4. 如何在Python中从零开始实现随机森林

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 决策树可能会受到高度变异的影响,使得结果对所使用的特定测试数据而言变得脆弱. 根据您的测试数据样本构建多个模型(称为套袋)可以减少这种差异,但是 ...

  5. 如何在Linux中使用Firejail运行应用程序

    有时您可能希望使用在不同环境中未经过良好测试的应用程序,但您必须使用它们.在这种情况下,关注系统的安全性是正常的.在Linux中可以做的一件事是在沙箱中使用应用程序. “沙盒”是在有限环境中运行应用程 ...

  6. 如何在ChemDraw中绘制分子立体结构

    ChemDraw是当前最常用的的化学结构绘图软件,软件功能包括化学作图.分子模型生成.化学数据库信息管理等,可以说是化学家和生物学家所需要最终极的化学结构绘图工具.本教程主要介绍ChemDraw绘制分 ...

  7. 如何在Eclipse中写Processing的sketch

    有时候人们需要写更复杂的sketch,此时Processing提供的IDE就略显单薄,下面将介绍如何在eclipse中开发Processing. 一共分4步: 一.搭建环境:安装JRE.JDK.Ecl ...

  8. 如何在vue-cli中使用vuex(配置成功

    前言 众所周知,vuex 是一个专为 vue.js 应用程序开发的状态管理模式,在构建一个中大型单页应用中使用vuex可以帮助我们更好地在组件外部管理状态.而vue-cli是vue的官方脚手架,它能帮 ...

  9. Kubernetes入门(四)——如何在Kubernetes中部署一个可对外服务的Tensorflow机器学习模型

    机器学习模型常用Docker部署,而如何对Docker部署的模型进行管理呢?工业界的解决方案是使用Kubernetes来管理.编排容器.Kubernetes的理论知识不是本文讨论的重点,这里不再赘述, ...

随机推荐

  1. docker学习笔记17:Dockerfile 指令 ONBUILD介绍

    ONBUILD指令可以为镜像添加触发器.其参数是任意一个Dockerfile 指令. 当我们在一个Dockerfile文件中加上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A ...

  2. Citrix 服务器虚拟化之二 Xenserver加域管理

    Citrix 服务器虚拟化之二   Xenserver加域管理 如果要使用多个用户和用户组来管理XenServer服务器,就必须使用 Active Directory 用户账户进行身份验证.XenSe ...

  3. Codeforces 331A2 - Oh Sweet Beaverette (70 points)

    贪心搞就行,用map记录每个数出现的下标,每次都取首尾两个.将中间权值为负的删掉后取sum值最大的就行. #include<iostream> #include<algorithm& ...

  4. host字段变复杂了

    声明: 本博客欢迎转载,但请保留原作者信息! 作者:李人可 团队:华为杭州OpenStack团队 讨论的是openstack中卷的host属性. 印象中.社区H版本号对于volume的host值表示的 ...

  5. eclipse上 安装php插件

    首先在安装之前需要有eclipse   以及SDK环境已经搭建好 eclipse开发工具下载路径: http://dl.oschina.net/soft/eclipse java sdk下载路径: h ...

  6. RequiredFieldValidator控件--必填验证控件

    RequiredFieldValidator控件: ·RequiredFieldValidator控件也被称之为必填验证控件,顾名思义,也就是与RequiredFieldValidator控件关联的控 ...

  7. RadioButton控件

    前台代码: <div> <asp:RadioButton ID="RadioButton1" runat="server" GroupName ...

  8. sourceinsight 相对路径设置

    1. mkdir sin(source insight prj dir) 2. creat sin prj 3. push OK directly without setting source fil ...

  9. C++的运算符

    C++的运算符十分丰富,使得C++的运算十分灵活方便.例如把赋值号(=)也作为运算符处理,这样,a=b=c=4就是合法的表达式,这是与其他语言不同的.C++提供了以下运算符: 算术运算符+(加)  - ...

  10. 【译】在Asp.Net中操作PDF – iTextSharp-列表

    原文 [译]在Asp.Net中操作PDF – iTextSharp-列表 在前文中,我们已经知道了如何利用iTextSharp创建PDF文档,设置字体样式和风格.本文开始讲述iTextSharp中的有 ...