问题标签 [hft]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 2 个 JVM 之间的低 CPU 使用率轮询架构
服务器环境
- Linux/红帽
- 6核
- 爪哇 7/8
关于申请:
- 我们正在使用 Java 开发一个低延迟(7-8 毫秒)的高速交易平台
- 有 2 个模块 A 和 B,每个模块都在自己的 JVM 上运行
- B 从 A 获取数据
建筑学:
- 我们已经使用了 MemoryMaps & Unsafe。在这种情况下,模块 A 写入内存映射文件,模块 B 从文件中读取(两者都保存文件的地址位置)
- 我们继续并使用了一个无限循环来继续读取,直到从内存映射文件中获得所需的值
问题
- CPU 利用率飙升至 100% 并在其生命周期内保持不变
问题 :
是否有更复杂的方法来轮询内存映射文件中的值,该值涉及最小开销、最小延迟和最小 CPU 利用率?请注意,每微秒延迟都会降低性能
代码片段
模块 B 的代码片段(从内存映射文件轮询和读取的无休止的 while 循环)如下
performance - 在 Linux 中优化传入的 UDP 广播
环境
- Linux/红帽
- 6核
- 爪哇 7/8
- 10G
应用
- 它是一个低延迟的高频交易应用程序
- 通过多播 UDP 接收广播
- 有多个数据流
- 每个传入数据包大小小于 1K(固定大小)
- 应用程序延迟约为 4 微秒
建筑学
- 单独的应用程序线程映射到每个传入的多播流
- 使用本机字节中的 multicastsocket.receive() 从套接字接收数据
- 解析字节并准备好订单
问题
尽管可容忍的应用程序延迟约为 4 微秒,但我们无法获得理想的性能。我们认为这是因为网络延迟。
使用的调整步骤
- 增加了以下参数的大小:
- netdev_max_backlog
- NIC 环形缓冲区接收大小
- rmem_max
- tcp_mem
- socketreceivebuffer(在代码中)
问题:
- 我们观察到,在我们增加上述参数的值后,应用程序的性能会下降。建议优化的参数和推荐值是什么。请求优化传入广播的指南?
- 有没有办法在这样的环境中以更准确的方式测量网络延迟。请注意,UDP 发送方是外部实体(交换)
提前致谢
multithreading - 为 HFT 应用程序分配内核到线程(CPU 隔离)的策略
我们正在开发一个基于 Java 的 HFT 应用程序,该应用程序需要低于 10 微秒的即时交易性能。详情如下:
核心数:6
应用程序线程数:5
线程的功能和使用
- 线程 1-3 - 捕获交换滴答(3-4% cpu 利用率)
- 线程 4 - 根据简单的算术规则检查交易条件(100% cpu 利用率 - 由于忙自旋)
- 线程 5 - 校验和生成、int、双字节转换、发送命令等(100% cpu 利用率 - 由于忙自旋)
问题 :
我们相信 CPU 隔离(将线程专门分配给内核)将减少上下文切换和缓存未命中。目前,我们已将前 3 个线程分配给 3 个不同的内核。在这种情况下,将线程分配给内核的最佳策略是什么?
python - Python - 聚合窗口中最接近时间的金融交易
假设我收集(在列表中)在特定时间段内(比如上午 11 点后的前 5 分钟)发生的所有交易,用于 n 个股票(为简单起见,我将 n=2 并稍后调整)。假设我们有坚定的 AAA 和坚定的 BBB(如果有帮助,liststocks=['AAA', 'BBB'])。该列表看起来像:
即,股票 AAA 的 2 笔交易和股票 BBB 的 3 笔交易。选择每只股票的最后一笔交易会导致缺乏同步性问题。这个想法是选择每只股票的最后一笔交易并找到最早的交易(['AAA', '2011-01-03', '11:04:20', 21.55])。然后选择时间尽可能接近'11:04:20'的所有其他股票的交易,这将导致我们选择['BBB', '2011-01-03','11:04:19', 32.01 ]。输出应该是一个列表,如:
非常感谢!
hazelcast - 使用完全相同的代码,高频 hazelcast ringbuffer 客户端不更新但低频客户端是
我有以下代码用于收听各种环形缓冲区。有些是高频价格数据,有些是低频交易数据:
问题是用于低频交易数据的代码运行良好:自动发现 hazelcast 集群,当数据发布到 ringbuffer 时,它会被读取并执行。但是,对于大量数据发布到 ringbuffer 的高频数据,上面的阅读器启动,并自动发现 hazelcast 集群,但随后根本不读取任何数据......虽然有一次它做到了设法工作。
我也试过
关于可能出了什么问题的任何想法?
r - R:将数据转换为 xts 对象
我有一个 .csv 文件,其中包含 SIZ5(白银期货)的高频数据,我正试图将它带到 xts 对象中,这样我就可以使用“高频”包中的一些功能。
我使用 read.csv 函数在 R 上加载了数据。在完成删除 Nas 和更改时间格式的所有必要修复之后。
我的结果是:
*为了简洁起见,我省略了几列
然后:
所以我尝试了:
但这就是我得到的:
*再次省略最后几列
首先,时间列没有标题,然后它们都是 1970-01-01(origin),没有任何时间关联。还有一堆不应该出现的0。我还尝试先使用 as.data.frame 将其转换为数据帧,然后再转换为 xts,但我得到了与上述类似的结果。
编辑:我刚刚意识到它完全忽略了“Seq”列,并将时间戳(纳秒)的末尾粘贴到“Seq”列中。是在读取行号吗?作为以秒为单位的时间戳,因此只显示所有时间戳的来源?
我错过了什么吗?请帮忙。让我知道是否需要提供更多信息。
按照要求:
编辑(25/11/15):
文件链接:https ://drive.google.com/folderview?id=0BwwnLqZcphbEb09qa0hzVUlQdGs&usp=sharing
所以我按要求将数据文件上传到谷歌驱动器上。我已经稍微改变了我的方法,就我如何走到最后但仍在寻找相同的输出并面临同样的问题。而且现在更奇怪了。
就像我在原始帖子中所说的那样,我有一个包含 SIZ5 一天的高频数据的文件,但现在我没有在整个文件上运行我的函数,而是将它分成不同的文件,每个文件有 50000 行数据。(您将在我上传的数据文件夹中看到)。这些文件被命名为“split_aa.csv”、“split_ab.csv”等等。
当我为第一个文件运行 midpoint.agg(如上所示)函数时。它运行完美,并产生了我想要的东西:
但是当我出于某种原因在“split-ab.csv”上运行它时,xts 函数会读取前几个时间戳作为 1970/01/01 的原始日期,然后从那里聚合数据。因此“b”包含 4808544 行并且是一个 73.4mb xts 对象:
我不知道为什么会这样。更奇怪的是它发生在文件夹中的几个文件而不是其余文件。我已经指出问题出现在 as.xts 函数中,当它尝试将“p”数据帧转换为 xts 对象时。前几行然后读取 1970-01-01,然后收敛到正常状态。我什至尝试将数据分成 100,000 行而不是 50,000 行,但我仍然面临同样的问题。我怀疑,就像许多人建议的那样,这可能是数据的问题,但我似乎无法确定问题出在哪里,甚至根本无法确定问题所在。多看几眼会有很大帮助。
如果需要任何其他信息,请告诉我。
java - 为什么JVM需要预热?
我了解在 Java 虚拟机 (JVM) 中,可能需要预热,因为 Java 使用延迟加载过程加载类,因此您希望确保在启动主要事务之前初始化对象。我是一名 C++ 开发人员,不必处理类似的要求。
但是,我无法理解的部分如下:
- 您应该预热代码的哪些部分?
- 即使我预热了代码的某些部分,它还能保持多久(假设这个术语只意味着你的类对象在内存中保持多长时间)?
- 如果我有需要在每次收到事件时创建的对象,它有什么帮助?
考虑一个示例,该应用程序预计将通过套接字接收消息,并且事务可能是新订单、修改订单和取消订单或交易确认。
请注意,该应用程序是关于高频交易 (HFT) 的,因此性能非常重要。
matlab - MATLAB如何过滤时间序列分钟柱数据以计算实际波动率?
我有一个数据集如下所示:
第一列是记录数据一切5分钟的时间戳,第二列是返回。
对于每一天,我想计算 5 分钟柱回报的平方和。在这里,我将一天定义为从下午 5:00 到下午 5:00。(所以日期2014-01-07
是从2014-01-06 17:00
到2014-01-07 17:00
)。因此,对于每一天,我都会从下午 5:00 到下午 5:00 对收益进行平方和。输出将类似于:
我该怎么做?
java - 如何捕获连接事件?
我真的对chronicle的连接界面感到困惑。我找不到任何关于它的测试代码或源代码。
我想捕捉断开和连接事件。
我的设置看起来像(香草编年史 3.6.2。);
两个相同的过程,相互连接。
资源::
裁缝::
r - 如何在没有来自高频包的聚合交易的情况下进行先前的分时聚合
我需要每隔 5 分钟对我的刻度数据集进行先前的刻度聚合。请注意,我想做的类似于高频包中的 aggregateTrades() 函数。但是由于其他一些数据处理问题,我需要在不使用高频包的情况下解决这个问题。这是我的数据集:
这是我之前的刻度聚合代码:
我试图用上面的代码做的是每天为 A 和 B 的价格设置 5 分钟的间隔。但我得到了错误。请建议如何解决此错误:
谢谢。
编辑: 将 xts 对象转换为数据框:
新错误:
编辑:尝试:
错误:
结果看起来像这样。每五分钟时间戳将具有该特定时间戳的值,或者如果存在 NA,则该时间戳将具有股票 A 和 B 的最后一个非 NA 值