如何在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的理论知识不是本文讨论的重点,这里不再赘述, ...
随机推荐
- Verilog实现IIC通讯第二版
HMC5883三轴磁力传感器IIC通讯模块的VerilogHDL的实现 上一版并没有实现我想要的功能 0.0.1版 正在修订中 2013/9/2 //date :2013/7/7 //desi ...
- createObjectURL方法 实现本地图片预览
ie6 可以直接显示本本地路径的图片 如: <img src="file://c:/3.jpg" /> ~~~网上都说ie7就不支持这种文件系统路径的url,但测试 ...
- php language construct 语言构造器
isset和empty看起来像是函数,我们也经常把它当作函数一样使用,但是实际上,它们是语言构造器. php中的语言构造器就相当于C中的预定义宏的意思,它属于php语言内部定义的关键词,不可以被修改, ...
- datanode启动后,在web50070port发现不到datanode节点(能力工场)
直接上问题:这两天为了试验,安装了两套集群: (1)32位hadoop1集群(5个节点); (2)64位hadoop2集群(6个节点) 两个集群中都遇到过这种问题:在namenode正常启动hadoo ...
- 【笨木头Lua专栏】基础补充08:协同程序之resume-yield间的数据返回
这次要介绍几个事实上非常easy,可是一定要小心的返回值规则. 笨木头花心贡献,哈?花心?不,是用心~ 转载请注明.原文地址: http://www.benmutou.com/archives/173 ...
- PHP - 多文件上传
<html> <head> <meta charset="utf-8"> <title>index_uploads</titl ...
- HDOJ 2680 Dijkstra
题目大意: 给你一个有向图,一个起点集合,一个终点,求最短路.... 解题思路: 1.自己多加一个超级源点,把起点集合连接到超级源点上,然后将起点与超级源点的集合的路径长度设为0,这样就称为一个n+1 ...
- 18-UIKit(Core Animation、广播设计模式)
目录: 一.Core Animation 二.广播设计模式 回到顶部 一.Core Animation 1. 是什么? 底层的动画框架 2. 框架对比 UIKit UI ...
- 你知道hover、active这四个伪类为什么要按顺序写吗
刨根问底,你知道:hover等4个伪类为什么要按顺序排列吗 引言 :link,:visited,:hover,:active这4个伪类大家都不陌生,4个伪类要按照LvHa这个爱恨原则来排(外国友人起的 ...
- WCF技术剖析之二十八:自己动手获取元数据[附源代码下载]
原文:WCF技术剖析之二十八:自己动手获取元数据[附源代码下载] 元数据的发布方式决定了元数据的获取行为,WCF服务元数据架构体系通过ServiceMetadataBehavior实现了基于WS-ME ...