从订单示例构建订单簿[关闭]

2024-02-04

我正在寻找从订单构造订单簿的代码

例如,如果订单是

side | price | quantity
buy   100      1
buy   101      10
buy   100      1000
buy   100      10000

汇总订单簿应该是:

side | price | quantity
buy    100     11001
buy    101     10 

在计划生命周期内,订单会被添加、修改或删除。每次订单更新时,我都需要快速更新 OrderBook。

我确定这是很常见任务,所以互联网上应该已经有很多实现了。

感谢您提供的任何参考,我正在寻找 C# 实现,但如果需要,我可以用另一种语言重写它。

upd实际上我应该重新表述我的问题。最初订单簿是空的。然后我收到事件:添加订单、更改订单数量或取消订单。我应该根据此消息重新计算 orderBook。但现在我清楚了它应该有多简单。添加订单时,我只需按此价格水平添加数量。当订单数量更改时,我只需要添加“更改”,当订单取消时,我只需要从相应的价格水平中删除相应的数量。唯一的问题是我应该在哪里存储“最后订单数量”总共有很多订单(数以百万计),但没有很多活跃订单(不超过100 000)并且对于每个活跃订单我需要通过 orderId 获取“最后数量”...当然我可以使用字典,但这可能太慢了。我想要更快的东西。但我不能使用 50 000 000 个项目数组。


这是测试的代码LINQPad http://www.linqpad.net/


var orders = new [] {
    new {Side = "Buy", Price = 100, Quantity = 1 },
    new {Side = "Buy", Price = 101, Quantity = 10 },
    new {Side = "Buy", Price = 100, Quantity = 1000 },
    new {Side = "Buy", Price = 100, Quantity = 10000 },
    new {Side = "Sell", Price = 100, Quantity = 10000 }
};

var orderboook 
    = from o in (           
                    from order in orders
                    group order by order.Side into sideGroup
                    select new {
                        Side = sideGroup.Key,
                        SideGroup = 
                            from s in sideGroup
                            group s by s.Price into g
                            select new {
                                Side = sideGroup.Key,
                                Price = g.Key, 
                                Quantity = g.Sum( s => s.Quantity) 
                            }
                    }
                )
     from g in o.SideGroup
     select g;

orderboook.Dump(); // .Dump() is LINQPad helper method...

The result in LINQPad is
orderbook result in LINQPad

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从订单示例构建订单簿[关闭] 的相关文章

  • 在 3d 网格中转发(绘制)线

    我需要类似 Bresenham 算法的东西 但是 对于 3d 网格空间来说不完全是这样 我需要 3d 单元网格 边缘尺寸 1 0 从 S 点开始 前进到 K 点 接触 该线接触的所有单元格 即使只有边缘 点被触摸我需要触摸所有 8 个单元
  • 一种良好且简单的随机性测量方法

    获取一长整数序列 例如 100 000 个 并返回序列随机性的测量值的最佳算法是什么 该函数应返回单个结果 如果序列并非完全随机 则返回 0 如果完全随机 则返回 1 如果序列有点随机 它可以给出介于两者之间的东西 例如0 95 可能是一个
  • 线段树java实现[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 你知道 二进制 的良好实现吗线段树 http en wikipedia org wiki Segmen
  • 如何为多边形创建内部螺旋?

    对于任何形状 我如何在其内部创建类似形状的螺旋 这与边界 使用 Minkowski 和 类似 尽管它会是相同形状的螺旋 而不是在形状内部创建相同的形状 我找到了这个 http www cis upenn edu cis110 13su le
  • LRU算法,实现这个算法需要多少位?

    我有一个关于 LRU 算法的小问题 如果您有一个包含四个块的高速缓存 那么需要多少位来实现该算法 假设您指的是 4 路组关联缓存 完美 LRU 本质上是按照使用顺序为每一行分配一个精确的索引 您也可以将其视为 年龄 因此 4 个元素中的每一
  • Java 2d 游戏中的路径查找?

    本质上它是我正在开发的一款吃豆人克隆游戏 我有一个 Enemy 类 并创建了该类的 4 个实例 它们都代表游戏的 4 个幽灵 所有幽灵都会在屏幕的随机区域启动 然后它们必须朝着吃豆人角色前进 当玩家控制吃豆人并移动它时 他们应该跟随它并尽可
  • 贝尔曼福特算法可以有任意的边顺序吗?

    我刚刚开始学习新算法 但当我阅读 极客为极客而写的贝尔曼福特算法 时 我陷入了困境 http www geeksforgeeks org dynamic programming set 23 bellman ford algorithm h
  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素
  • 删除近排序数组中未排序/离群元素

    给定一个像这样的数组 15 14 12 3 10 4 2 1 我如何确定哪些元素乱序并删除它们 在本例中为数字 3 我不想对列表进行排序 而是检测异常值并将其删除 另一个例子 13 12 4 9 8 6 7 3 2 我希望能够删除 4 和
  • 为什么 Dijkstra 算法使用减密钥?

    Dijkstra 教给我的算法如下 while pqueue is not empty distance node pqueue delete min if node has been visited continue else mark
  • 排序矩阵的选择算法

    这是谷歌面试问题 给定一个 N N 矩阵 所有行均已排序 所有列均已排序 找到矩阵的第 K 个最大元素 在 n 2 中执行它很简单 我们可以使用堆或合并排序 n lg n 对它进行排序 然后得到它 但是有没有更好的方法 比 n lg n 更
  • String.contains() 的时间复杂度

    String contains 的时间复杂度是多少 假设 n 是与另一个长度为 k 的字符串进行比较的字符串的长度 如果不知道您感兴趣的 String contains 的实际实现 就没有答案 或者你打算使用什么算法 一个完全幼稚的实现可能
  • sigmoid 的导数

    我正在使用反向传播技术创建一个神经网络进行学习 我知道我们需要找到所使用的激活函数的导数 我正在使用标准 sigmoid 函数 f x 1 1 e x 我已经看到它的导数是 dy dx f x f x 1 f x 这可能是一个愚蠢的问题 但
  • 调度算法,找到设定长度的所有非重叠区间

    我需要为我的管理应用程序实现一种算法 该算法将告诉我何时可以将任务分配给哪个用户 我实现了一个蛮力解决方案 它似乎有效 但我想知道是否有更有效的方法来做到这一点 为了简单起见 我重写了算法以对数字列表进行操作 而不是数据库查询等 下面我将尝
  • Java 中旅行商问题的暴力算法

    我正在学校的数学课上做一个项目 我选择做旅行商问题 这是我一直想进行更多研究的问题 但是 我的暴力求解算法遇到了问题 请前往底部更新查看最新版本代码 如果您知道旅行推销员问题是什么 请跳过本段 尽可能概括地说 TSP 是这样的 您是一名推销
  • Z 算法背后的直觉

    Z算法是一种复杂度为O n 的字符串匹配算法 一种用例是从字符串 B 中查找字符串 A 的最长出现次数 例如 overdose from stackoverflow 将会 over 您可以通过使用组合字符串调用 Z 算法来发现这一点 ove
  • 用于在链表中查找结点的生产代码

    我在一次采访中被问到这个问题 我被要求编写代码 用于在 O 1 空间和线性时间的生产环境中在链表 其形式为 Y 形式 双臂不一定相等 中查找结点 我想出了这个解决方案 我以前在某处见过 1 Measure lengths of both l
  • 在 Python 中从 Excel 复制 YEARFRAC() 函数

    因此 我使用 python 来自动执行一些必须在 Excel 中执行的重复任务 我需要做的计算之一需要使用yearfrac 这在Python中被复制了吗 I found this https lists oasis open org arc
  • 高度并行化的Levenshtein距离算法

    实际上 我必须实现一个字符串比较 最后得到匹配百分比 不仅仅是布尔结果匹配 不匹配 为此 我找到了 Levenstein 距离算法 但现在的问题是性能 例如 我有 1k 个字符串需要相互比较 现在大约需要 10 分钟 对于每个算法 我已经并
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • Hadoop 文件分割:CompositeInputFormat:内连接

    我正在使用 CompositeInputFormat 为 hadoop 作业提供输入 生成的分割数是作为 CompositeInputFormat 用于连接 输入的文件总数 该作业完全忽略块大小和最大拆分大小 同时从 CompositeIn
  • Android:检查服务是否正在运行。绑定服务

    检查 Android 服务是否正在运行的最佳方法是什么 我知道ActivityManagerAPI 但对于与我类似的场景 似乎不建议使用API source http www mail archive com android develop
  • 使用 SpringBootRequestHandler 访问函数内部的 AWS Lambda 上下文?

    我需要访问我的 lambda 函数的 AWS Lambda 上下文 我在用SpringBootRequestHandler接收请求 应该调用实现 Function 接口的类 下面是这两个类的代码示例 public class A exten
  • Typescript 在 Pick 实现中进行了扩展

    这是 Typescript 的基本实现Pick实用程序类型来自本教程 https learntypescript dev 09 l3 condition utility types type ObjectWithKeys
  • Angular 2 / 4 / 5 - 提前编译如何

    我正在尝试按照本指南引导我的 Angular 2 RC5 应用程序https angular io docs ts latest guide ngmodule html https angular io docs ts latest gui
  • JSF 中的 class 和 styleClass 属性有什么区别?

    我发现 在 JSF 中 大多数标准组件都映射到 HTML 标签 例如
  • 拆分数据库是合法的安全措施吗?

    当我公司以前的开发人员必须存储敏感的用户数据 例如医疗记录 时 他们做了以下操作 我怀疑它的优点 有些数据被认为是 不敏感 用户登录 个人资料信息 和 敏感 用户医疗记录 共有三个数据库 中的不敏感数据A 医疗记录在B 以及之间的映射A a
  • 使用 Web 服务将报价导入 vtiger crm

    我需要将报价导入到vtiger 我发现可以使用 vtiger Web 服务 API 来完成 我找到了参考手册 https wiki vtiger com archives index php vtiger510 Webservice ref
  • 在 shell 脚本中转义单引号

    我需要转义变量中的单引号 ssh command file hostname server setup date Y m d tar gz cd var tar zcvf file ini wc l xargs printf Num fil
  • 如何在不重新启动 MySQL 的情况下刷新 Performance_schema 统计信息?

    我知道性能模式中的统计数据在 MySQL 重新启动后不会持续存在 我想在不重新启动 MySQL 的情况下刷新所有统计信息 有什么办法可以做到吗 Thanks 截断每个单独的表更容易的是调用以下过程 CALL sys ps truncate
  • 如何编写可读的 JavaScript

    在 JavaScript 中 代码格式化的标准规则似乎并没有解决这个问题 你最终还是会陷入混乱 到处都是 我不相信我什至不知道正确缩进声明为其他函数的参数的匿名函数的既定规则 简而言之 我在阅读自己的 JavaScript 时遇到了困难 而
  • 如何在 Oracle 包中执行私有过程?

    这是我第一次尝试创建一个包 所以我一定错过了一些非常明显的东西 我在谷歌上搜索过的东西似乎都不认为值得一提 显然 如果包体中有未包含在规范部分中的过程 那么这些过程就是私有的 我遇到的问题是我似乎不知道如何参考那些私人包裹一旦我做好了 而且
  • 实体包装器 - 自定义

    我想找到一种解决方法来完成一个简单的解决方案 以便通过 EF 自动执行某些操作 我需要的是在保存和检索过程中接管以修改查询结果 但此类将能够使其适用于任何类型的实体 示例 我有一个 MyTestDb 因此 在我的 C 项目中 我创建了一个新
  • 无法更改 Android 中的导航抽屉图标颜色

    好吧 我知道这是一个微不足道的问题 但由于某种原因它对我不起作用 我已经做了很多其他答案中建议的事情 但都是徒劳的 我的可绘制文件夹有白色图标 我什至尝试从 styles xml 更改它 但这也不起作用 我正在我的棒棒糖设备上测试它 任何帮
  • 使用 `` 或 `@import` 包含 CSS - 哪个更好?

    我有一个网站 并且有多个用于打印 电视 屏幕 手持设备等的 css 样式表 我想知道这些方法中哪一种更好用 性能 可用 性等 or
  • 正则表达式问题组名称重新定义?

    所以我有这个正则表达式 s P
  • 线串长度(以英里为单位)

    我将运行数据表示为 Shapely LineStrings 其中 LineString 中的每个点都是一个坐标 我试图计算出以英里为单位的 LineString 长度 我知道 LineString 有一个length方法 但我不知道结果是什
  • 从 Spring Boot jar 文件运行非主类

    我有一个 spring boot jar 文件 里面有一个清单文件 如下所示 Manifest Version 1 0 Implementation Title myApp Implementation Version 0 1 Built
  • delphi中如何分割字符串

    我只需要分割一个字符串 例如 STANS Payment chk 1 1210 000进入一个基于数组 字符串列表中的结果将是 STANS Payment chk 1 1210 000 创建一个TStringList并将逗号分隔的字符串分配
  • 从订单示例构建订单簿[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找从订单构造订单簿的代码 例如 如果订单是 side price quantity buy 100 1 buy 101 10 buy