在 .NET 里开发高频低延迟、量化交易相关的应用都要哪些技术?

论坛 期权论坛 期权     
期权匿名问答   2022-11-15 15:12   7847   5
虽然高频低延迟是 C++ 的强项,但是也有些基金公司、银行甚至交易所用  .NET 开发这方面的应用。我猜可能是为了和前端更好的融合吧。不管什么用因,在  .NET 里要做这方面的开发,需要哪方面具体的技术?哪些具体的库?
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
期权匿名回答  16级独孤 | 2022-11-15 15:13:40 发帖IP地址来自 中国
说dotnet性能不行的人,往往都是不会dotnet的。还有些就是了解不多,一知半解。c#语言真学起来,其实蛮复杂的。用不好肯定没法发挥它的性能,这时候,要做的事谦虚的向懂的人学习,而不是鄙视。
从编译原理角度,Ast相同,性能取决于后端,而不是语言。
比如,CLang,跟开源版本的,用LLVM的dotnet,性能会有什么差别?小米的高通820会比山寨机的同频高通820跑得快?
关于GC,只要不new就不会触发full gc。一般的写法,都是事先把该new的对象都new了, 然后进行高性能的运算,这样gc就没有影响。
还有,Gc是可以指定代来回收的,回收0代和1代都很快。
3#
期权匿名回答  16级独孤 | 2022-11-15 15:14:14 发帖IP地址来自 北京
匿了,怕被熟人看到了打我。
14年在成都一家投资公司用.net做交易系统。偶尔会参加一些私募量化基金的路演,这些活动一般都是期货公司牵头,一方面是期货公司为了拉资金做交易量,另一方面还是期货公司为了拉资金做交易量。
      会上各路大神过招,有常春藤练过武,华尔街耍过刀的。有500强炫过技,BAT垒过码的。从Linux内核优化讲到FPGA加速,再从大数据讲到人工智能。PPT上各种技术名词,看得我眼花缭乱,目瞪口呆,自卑感顿生心头。
      后来在这个行业混久了,慢慢的和这些大神有了交流,有用文华财经的,也有用金字塔开拓者的,甚至还有MACD均线KDJRSV拼了一个奇怪的指标手动开撸的。

4#
期权匿名回答  16级独孤 | 2022-11-15 15:14:35 发帖IP地址来自 中国
用C++还是.net 其实不重要。
我手头有个旧的C++写的数据网关用于分发L2行情(沪、深、上期全市场),前年市场交易规模上万亿之后就频频出故障。没时间也懒得深究问题出在哪里,就自己用.net写了个新网关,signalr做数据分发,附带实时全市场计算些简单指标,用起来完全没问题,对硬件要求也不高。
稳定状态下全市场大概是每秒8000条数据,交易高峰时大约是每秒13000~17000条数据。
5#
期权匿名回答  16级独孤 | 2022-11-15 15:14:56 发帖IP地址来自 广东
大家不喜欢用java和c#之类有垃圾回收机制的语言来构建交易系统不是因为效率原因,而是因为gc的不可控因素。gc时,所有的线程都会被挂起(stop the world),这时你的业务逻辑被不可控的打断。
所以这里面的关键问题是控制gc。
6#
期权匿名回答  16级独孤 | 2022-11-15 15:15:43 发帖IP地址来自 北京
很多时候人们都以为那些高频交易用C++是因为有了C++的性能才能有高频,所谓“高频低延迟是c++的强项”。
错。
C++的性能解决的是性价比问题——也就是当你的系统已经优化到无可优化了,发现剩下可以优化的部分来自于语言本身了,才是C++语言发挥价值的地方。
实际上搭建一个高频交易系统,在不考虑最大化成本收益的前提下,应用.Net根本不需要什么特别的技术。所有所谓实现高频必需的技术都是所有语言都可以通用的,例如如何降低计算量、提高数据流量和降低延迟。比方说绝大多数延迟来自计算、传输、和等待。这些东西如何干掉,靠的是对系统的理解。如何避免GC?如何防止线程被挂起?如何防止TCP剪窗口?如何正确缓存和查询历史请求?等等。偶尔有些快餐式的包可以用,但更多时候解决方案是语言不相关的。
所谓“高频低延迟是c++的强项”,更多时候是因为熟练使用C++的团队性能相关的知识储备更丰富。可谓是幸存者偏差。
等你开始需要考虑最大化成本收益的时候,你会发现.Net的托管特性是阻碍成本降低的一大因素,包括内存管理、安全检查等,这时候与其特化利用.Net Native到一定程度不如直接Native C++。但其实在此之前,.Net完全可以实现比C++不差的性能,主要是需要贵不少的硬件而已。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:400157
帖子:80032
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP