问题标签 [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.

0 投票
1 回答
709 浏览

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 循环)如下

0 投票
1 回答
1465 浏览

performance - 在 Linux 中优化传入的 UDP 广播

环境

  • Linux/红帽
  • 6核
  • 爪哇 7/8
  • 10G

应用

  • 它是一个低延迟的高频交易应用程序
  • 通过多播 UDP 接收广播
  • 有多个数据流
  • 每个传入数据包大小小于 1K(固定大小)
  • 应用程序延迟约为 4 微秒

建筑学

  • 单独的应用程序线程映射到每个传入的多播流
  • 使用本机字节中的 multicastsocket.receive() 从套接字接收数据
  • 解析字节并准备好订单

问题

尽管可容忍的应用程序延迟约为 4 微秒,但我们无法获得理想的性能。我们认为这是因为网络延迟。

使用的调整步骤

  • 增加了以下参数的大小:
  • netdev_max_backlog
  • NIC 环形缓冲区接收大小
  • rmem_max
  • tcp_mem
  • socketreceivebuffer(在代码中)

问题:

  1. 我们观察到,在我们增加上述参数的值后,应用程序的性能会下降。建议优化的参数和推荐值是什么。请求优化传入广播的指南?
  2. 有没有办法在这样的环境中以更准确的方式测量网络延迟。请注意,UDP 发送方是外部实体(交换)

提前致谢

0 投票
1 回答
521 浏览

multithreading - 为 HFT 应用程序分配内核到线程(CPU 隔离)的策略

我们正在开发一个基于 Java 的 HFT 应用程序,该应用程序需要低于 10 微秒的即时交易性能。详情如下:

核心数:6

应用程序线程数:5

线程的功能和使用

  • 线程 1-3 - 捕获交换滴答(3-4% cpu 利用率)
  • 线程 4 - 根据简单的算术规则检查交易条件(100% cpu 利用率 - 由于忙自旋)
  • 线程 5 - 校验和生成、int、双字节转换、发送命令等(100% cpu 利用率 - 由于忙自旋)

问题 :

我们相信 CPU 隔离(将线程专门分配给内核)将减少上下文切换和缓存未命中。目前,我们已将前 3 个线程分配给 3 个不同的内核。在这种情况下,将线程分配给内核的最佳策略是什么?

0 投票
2 回答
186 浏览

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 ]。输出应该是一个列表,如:

非常感谢!

0 投票
1 回答
262 浏览

hazelcast - 使用完全相同的代码,高频 hazelcast ringbuffer 客户端不更新但低频客户端是

我有以下代码用于收听各种环形缓冲区。有些是高频价格数据,有些是低频交易数据:

问题是用于低频交易数据的代码运行良好:自动发现 hazelcast 集群,当数据发布到 ringbuffer 时,它会被读取并执行。但是,对于大量数据发布到 ringbuffer 的高频数据,上面的阅读器启动,并自动发现 hazelcast 集群,但随后根本不读取任何数据......虽然有一次它做到了设法工作。

我也试过

关于可能出了什么问题的任何想法?

0 投票
1 回答
425 浏览

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 行,但我仍然面临同样的问题。我怀疑,就像许多人建议的那样,这可能是数据的问题,但我似乎无法确定问题出在哪里,甚至根本无法确定问题所在。多看几眼会有很大帮助。

如果需要任何其他信息,请告诉我。

0 投票
7 回答
18019 浏览

java - 为什么JVM需要预热?

我了解在 Java 虚拟机 (JVM) 中,可能需要预热,因为 Java 使用延迟加载过程加载类,因此您希望确保在启动主要事务之前初始化对象。我是一名 C++ 开发人员,不必处理类似的要求。

但是,我无法理解的部分如下:

  1. 您应该预热代码的哪些部分?
  2. 即使我预热了代码的某些部分,它还能保持多久(假设这个术语只意味着你的类对象在内存中保持多长时间)?
  3. 如果我有需要在每次收到事件时创建的对象,它有什么帮助?

考虑一个示例,该应用程序预计将通过套接字接收消息,并且事务可能是新订单、修改订单和取消订单或交易确认。

请注意,该应用程序是关于高频交易 (HFT) 的,因此性能非常重要。

0 投票
2 回答
113 浏览

matlab - MATLAB如何过滤时间序列分钟柱数据以计算实际波动率?

我有一个数据集如下所示:

第一列是记录数据一切5分钟的时间戳,第二列是返回。

对于每一天,我想计算 5 分钟柱回报的平方和。在这里,我将一天定义为从下午 5:00 到下午 5:00。(所以日期2014-01-07是从2014-01-06 17:002014-01-07 17:00)。因此,对于每一天,我都会从下午 5:00 到下午 5:00 对收益进行平方和。输出将类似于:

我该怎么做?

0 投票
0 回答
88 浏览

java - 如何捕获连接事件?

我真的对chronicle的连接界面感到困惑。我找不到任何关于它的测试代码或源代码。

我想捕捉断开和连接事件。

我的设置看起来像(香草编年史 3.6.2。);

两个相同的过程,相互连接。

资源::

裁缝::

0 投票
2 回答
646 浏览

r - 如何在没有来自高频包的聚合交易的情况下进行先前的分时聚合

我需要每隔 5 分钟对我的刻度数据集进行先前的刻度聚合。请注意,我想做的类似于高频包中的 aggregateTrades() 函数。但是由于其他一些数据处理问题,我需要在不使用高频包的情况下解决这个问题。这是我的数据集:

这是我之前的刻度聚合代码:

我试图用上面的代码做的是每天为 A 和 B 的价格设置 5 分钟的间隔。但我得到了错误。请建议如何解决此错误:

谢谢。

编辑: 将 xts 对象转换为数据框:

新错误:

编辑:尝试:

错误:

结果看起来像这样。每五分钟时间戳将具有该特定时间戳的值,或者如果存在 NA,则该时间戳将具有股票 A 和 B 的最后一个非 NA 值