Ⅰ C++还是Java 哪个响应高频交易应用比较快
看优化吧,C++的内存要自动释放,如果代码行数在10万以上,建议不要用C++ 可以采用纯C(核心算法) + JAVA的方式进行优化。
Ⅱ C++还是Java 哪个响应高频交易应用比较快
概述高频交易的最佳解决方案是什么?对于这个问题,观点一直比较冲突,部分原因是人们不知道什么叫高频交易并且与人们想象的总是存在差异,其次是速度问题,用哪种语言开发速度会快点,本文作者拿当今非常流行的C++和Java这两种语言进行比较。如果你是一个典型的Java和C++程序员,并且用这两种语言编写过典型的面向对象程序。在相同的时间下面编写高频解决方案,Java程序员有可能会提前完成程序并且有时间调整应用程序。在这种情形下,恕我直言,Java应用程序的速度会快些。以我的经验,Java在执行上会好于C++,因为Java进行微基准测试,其实它没有做什么事情。但是如果没有时间限制,对Java和C++程序进行调优,那么C++程序会比Java快些。然而,考虑到资源的有限性和环境的不断变化,一个充满活力的语言可能会现实应用中超常发挥。在股票交易这种高频市场,即使延迟10微秒都需要认真对待。 Java甚至标准的OOP C++,用在商业硬件上都不是最佳选择,你需要借助C或者精简版的C++和一些专业的硬件工具,例如FPGAs、GPUs。然而,在外汇(FX:Foreign Exchange)市场,高频意味着延迟时间不低于100微秒。在这个的环境下,C++或者Java(低GC)都是个不错的选择。个人认为,在不断变化的交易场所,Java拥有更多的灵活性。当人们讨论高频率时,尤其是在做银行系统的时候,他们想把时间缩短1毫秒或者单单几毫秒。在这样的情况下,我会说,灵活/多态的Java、Scala或者C#等语言在编程时间上将会更加充裕,可维护性或可靠性优势将会超过C/C++或FPGA。Java所面临的问题问题不在于这样的语言上,而是缺乏缓存控制和上下文交互。如果你复制一块在本地已经操作过的内存,但是在运行之间使用不同的延迟,副本将会变慢。原因是部分缓存被交换出去,而复制本身也需要一些时间。这和访问内存的任何操作是一样的。例如,访问计划对象将会更慢。private void doTest(Pauser delay) throws InterruptedException { int[] times = new int[1000 * 1000]; byte[] bytes = new byte[32* 1024]; byte[] bytes2 = new byte[32 * 1024]; long end = System.nanoTime() + (long) 5e9; int i; for (i = 0; i < times.length; i++) { long start = System.nanoTime(); System.array(bytes, 0, bytes2, 0, bytes.length); long time = System.nanoTime() - start; times[i] = (int) time; delay.pause(); if (start > end) break; } Arrays.sort(times, 0, i); System.out.printf(delay + ": Copy memory latency 1/50/99%%tile %.1f/%.1f/%.1f us%n", times[i / 100] / 1e3, times[i / 2] / 1e3, times[i - i / 100 - 1] / 1e3 ); } 这个测试其实是在多次执行同一件任务,在执行之间使用不同的延时。其中大部分时间都花在本地方法上,在测试期间没有创建或抛弃对象。YIELD: Copy memory latency 1/50/99%tile 1.6/1.6/2.3 us NO_WAIT: Copy memory latency 1/50/99%tile 1.6/1.6/1.6 us BUSY_WAIT_10: Copy memory latency 1/50/99%tile 2.8/3.5/4.4 us BUSY_WAIT_3: Copy memory latency 1/50/99%tile 2.7/3.0/4.0 us BUSY_WAIT_1: Copy memory latency 1/50/99%tile 1.6/1.6/2.5 us SLEEP_10: Copy memory latency 1/50/99%tile 2.2/3.4/5.1 us SLEEP_3: Copy memory latency 1/50/99%tile 2.2/3.4/4.4 us SLEEP_1: Copy memory latency 1/50/99%tile 1.8/3.4/4.2 us -XX+Java 7的UseLargePagesYIELD: Copy memory latency 1/50/99%tile 1.6/1.6/2.7 us NO_WAIT: Copy memory latency 1/50/99%tile 1.6/1.6/1.8 us BUSY_WAIT_10: Copy memory latency 1/50/99%tile 2.7/3.6/6.6 us BUSY_WAIT_3: Copy memory latency 1/50/99%tile 2.7/2.8/5.0 us BUSY_WAIT_1: Copy memory latency 1/50/99%tile 1.7/1.8/2.6 us SLEEP_10: Copy memory latency 1/50/99%tile 2.4/4.0/5.2 us SLEEP_3: Copy memory latency 1/50/99%tile 2.3/3.9/4.8 us SLEEP_1: Copy memory latency 1/50/99%tile 2.1/3.3/3.7 us 上面是最好的三种运行。进行内存拷贝的典型时间(中间值)是1.6到4.6微秒,依据是否有线程在繁忙等待或休眠状态上使用了1到10毫秒。这大概是3倍的比率,并且与Java无关,这是因为它没有真正的控制权。即使在最好的情况下时间差大概也是2倍。代码ThreadlatencyTest.java总结在极端高频情况下,核心引擎一般会用C、汇编和定制的硬件实现比使用C++或JAVA面向对象实现的方式多。由于延迟需求不再那么紧张(指当基础平台使用C/C++搭建架构之后,应用平台层面,时间响应已不是很重要,反而开发响应更重要)。因此Java和其他动态语言可能会变得更富有成效,在这种情形下,选择Java或许可以帮你轻松应对不断变化的市场/需求。
Ⅲ 外汇高频交易
高频交易一般都是美股里才用吧,据我所知很多外汇交易员都是美股交易员出身,尤其是DT,在训练的时候很多都会着重训练抢单出单的速度
建议可以去金狮汇咨询他们的金牌分析师!
Ⅳ 300ETF为什么有两个一个代码是159919,一个代码是510300,这两个有什么区别
300ETF有两个品种,沪深两市各一个:510300是华泰柏瑞沪深300ETF,在沪市;159919是嘉实沪深300ETF,在深市。两者规则有微小的差别,但对于散户而言没什么不同。
跟普通股票买卖完全一样,没限制。
(4)高频交易c代码扩展阅读:
沪深300ETF是以沪深300指数为标的的在二级市场进行交易和申购/赎回的交易型开放式指数基金。投资者可以在ETF二级市场交易价格与基金单位净值之间存在差价时进行套利交易。沪深300ETF是中国市场推出的重量级ETF基金。 标的指数:沪深300指数。
对中小投资者
长期投资:沪深300指数涵盖了沪深市场六成左右的市值,能够很好地代表中国经济发展得方向,价值特征明显。因此,对于长期价值投资者来说,不妨可以用沪深300ETF长期配置中国经济;
中期波段:历史数据显示,沪深300指数在产业景气加速中后期和产业周期交替收缩期表现较优。因此,华泰柏瑞沪深300ETF既是产业景气加速中后期的进攻选择,同时也是产业周期交替收缩期的防御选择(价值防御);
短线博差价:喜欢做短线搏差价的投资者,则可以利用ETF充分体验短线波段操作的乐趣。
投资者可以用沪深300ETF做哪些策略:
简单套利:于指数期现套利交易者,沪深300ETF是沪深300指数较为匹配的现货;
鲜明配对:于指数配对/对冲交易者,沪深300指数与中证500指数/中小板指,作为全市场典型的大中盘指数和中小盘指数,其配对交易特征明显,历史上也出现过较多的良好的配对交易机会;
高频进出:于指数日内交易者,首个支持一二级市场之间T+0交易模式的跨市场ETF,未来日内高频交易者可以运用华泰柏瑞沪深300ETF来实现对于市场代表性指数(沪深300指数)的日内高频交易;
高效套利:于指数ETF瞬时套利者,沪深300ETF的T+0交易模式基本维持了当前单市场ETF的做法:一方面能保证ETF瞬时套利的高效实时性,从而套利过程中的不确定性小;另一方面基本维持了单市场ETF套利中资金的高运转效率,无论是溢价方向还是折价方向套利,都能方便地实现当日实时现金到现金的高资金周转效率。
参考资料:网络:沪深300ETF
Ⅳ 关于股指期货的高频交易方法。 有的公司对新来的交易员培训首先训练小键盘,而有的不用
那些公司应该是骗人的吧!三个月就可以培训个交易员这个是不真实的,最有可能是让你免费帮他们找客户,或者是给个帐号给你,要你转钱进去操作,盈利多少时能让你做交易员,在你交易时产生的交易费用全打到公司的帐号(这是期货公司的秘密),还有交易员说白了就是股票的散客,操作的资金全是自己出的,公司是不是免费提供给你,因为三个月的培训是没法成为交易员,培养一个交易员是用钱养出来的,没有一两千万是养不出来的。。。。
Ⅵ 高频交易和量化交易到底有什么区别
从历史上看,很多高频交易公司的创始人都是交易员出身,原来就从事衍生品的做市、套利等业务。一开始这些工作并不需要多高深的知识。随着计算机技术的发展,交易的自动化程度和频率也逐渐提高,这些公司逐渐聘请一些数学、统计、计算机背景较强的人员加入以适应形势的发展。当然,这个过程也出现了一些分化,有的公司还是保留了交易员在公司的主导地位,并且始终未放弃人工交易,最终形成了人机结合的半自动交易;而另外一些公司对新鲜技术的接受程度更高一些,往往采取全自动的交易模式。事实上,也没有证据表明全自动交易的公司就比半自动交易的公司更为优越,到目前为止,也只能说是各有利弊。
人工交易的最大弊端在于手动下单的地方离交易所较远,在行情剧变的时候往往抢不到单。在这一点上,全自动交易的公司可以通过托管机房来最大程度减少信号传输的时间,不过自动化交易往往因为程序过于复杂,加上很多公司人员流动较大,在程序的维护上会出现一些失误,最终程序出错酿成大祸,比如著名的骑士资本。
至于过度拟合无法抵御黑天鹅事件,那是人工交易和自动交易都无法避免的问题。一般来说,Getco、Jane Street、SIG、Virtu Financial等是半自动交易,Tower Research、Hudson River Trading、Jump Trading等是全自动交易。
量化投资公司跟高频交易公司则有很大的不同。首先,美国的量化投资公司基本上都是量化背景极强的人创办的,比如说文艺复兴的创始人西蒙斯是数学家出身,DE Shaw的创始人David Shaw是计算机教授出身,AQR的创始人Cliff Asness是金融学家出身,而高频交易公司则更多是传统交易员创办的;其次,量化投资一般依赖于复杂的模型,而高频交易一般依赖于运行高效的代码。
量化投资公司的持仓时间往往达到1—2个星期,要预测这么长时间的价格趋势需要处理的信息自然非常庞大,模型也因此更为复杂,对程序的运行速度反而没那么敏感;高频交易处理信息的时间极短(微秒或毫秒级),不可能分析很多的信息,因此模型也趋于简单,竞争优势更多依靠代码运行的效率,很多人甚至直接在硬件上写程序;而最后,量化投资的资金容量可达几百亿美元,而高频交易公司往往只有几千万至几亿美元,但由于高频交易的策略表现远比量化投资稳定,如Virtu Financial交易1238天只亏1天,因此一般都是自营交易,而量化投资基金一般来说都是帮客户投资。
Ⅶ 以C++为核心语言的高频交易系统是如何做到低延迟的
我认为并不是c++的效率是决定因素。
首先你要考虑的是,你的速度要求有多高,或者你的交易策略真的需要这么高的速度吗?第二个是输入输出比率,不管你的算法是否真的能赚到足够的钱来支持你做所有层次的优化。
Ⅷ 什么是高频交易系统
1、高频交易系统概述
高频交易是指从那些人们无法利用的极为短暂的市场变化中寻求获利的计算机化交易。
比如,某种证券买入价和卖出价差价的微小变化,或者某只股票在不同交易所之间的微小价差。
这种交易的速度如此之快,以至于有些交易机构将自己的“服务器群组”(server farms) 安置到了离交易所的计算机很近的地方,以缩短交易指令到达交易所的距离。
2、高频交易系统特点
(1)交易指令完全由电脑发送,对市场数据的响应延时在微秒级,有的甚至是纳秒级;
(2)系统由专用的软、硬件组成;
(3)系统的硬件需要放在离交易所主机很近的位置上,所谓 co-location。
3、高频交易的两大核心要素
(1)一是产生高频交易信号的交易策略;
(2)二是优化交易执行过程的算法。
1、高频交易系统的特点
高频系统是一种非常有特点的计算机应用。在输入和输出层面,数据比较简单。
输入用的都是市场行情数据,用的是Tick级别,甚至是更细颗粒度,比如用order book上数据。
输出就是报单到交易所,执行层面上频率会比较高,有可能会大量、频繁地向交易所报单。系统运行时处理的信号源是交易所播报的实时行情,要求用最快的速度对信号进行拆解、计算和输出,对于系统的实时计算能力的要求也比较高。
同时,一般高频交易系统从逻辑的层面上来说是比较简单的。
2、编程语言的选择
目前,高频交易系统最主流的是C/C++语言。
这是一种优点及其很显著的语言。相比依赖虚拟机的JAVA和Python而言,C/C++是一种非常接近底层硬件的开发语言,对硬件操控的控制度、灵活度都超过其他语言,在性能上的把控力会更强。
但是,其语法相当复杂,比较难学,没有受过系统编程训练的开发者,掌握起来比较困难。
同时,使用C/C++编程也可以获得及其优越的性能,这对于高频交易系统来说,就非常重要了!并且,国内大多数的交易所提供的都是C++级别的类库,只有用C++进行开发,才能方便进行系统对接。
Ⅸ 如何在区块链上进行高频交易
区块链概念解析:既是一个概念也是一个技术体系
区块链是分布式系统的,是密码学构造的,确实如此,区块链就是又分布式系统和密码学而形成的概念的技术集合,要强调一点它既是一个概念也是一个技术体系,区块链最原始的时候只表示比特币底层技术的账目结构,它是一个狭义的概念。当初由于这个技术的发展应该由一个专门的名词表征它,以和比特币相区分的时候,就用这个词来提,它就更大更丰富变成一个理念,变成一个完整的体系。
再回想一下云计算的时候,云计算在云计算这个词提出来之前也是存在的,但云计算一旦提出来以后,沿着云计算的理念快速的发展,我想区块链也是存在这样的特征会继续的发展下去,它一旦会成为一种完整子技术体系,那么区块链下面所有子领域的技术,子领域里面的算法都会以加试的方式,以质变的方向去发展。区块链是一种分布式的线或者是网络信任技术,在我研究区块链技术的时候,没有这个区块链词,我们叫分布式计算。技术层面端到端,从宏观上看,区块链是由东方参加的多个节点,它是平等的,这些节点的相互协作要完成你在区块链上相互的验证,这时候不需要一个中心的节点做这件事。
宏观:分布式平等部署系统,参与节点协作完成验证和存储。
微观:严谨的数据结构打包存储在block中,逻辑上串联起来构成chain。
数字签名与完整性校验等保证块数据的真实性、实时性与时序性。
最后学完了所有的技术特性,它达到了多斗知情群与监督权,因为它是透明、共享、开放的,联盟的各方要共同参与到这个区块链系统的运行当中来,相当于一个共建、共享、共用、共治。联盟在构造的时候还要想到一个事情,我向区块链来存什么东西,存的东西哪些是透明的,哪些是加密的,这个时候要根据你的业务系统来确定。如果有人故意作弊,在公众甚至是集体联盟的参与情况下就很可能发现你的数据可能是篡改或者伪造的,所以他就会考虑自己作恶的成本问题,这样联盟的信任成本就会降低很多,不会有一些摩擦发生。联盟的外部因为相信你采用了区块链技术,对整个联盟所提供的服务或者产品信任度也会更高,所以这是一个非常好的良性循环的方式。
你做一个区块链系统或者把业务嫁接到区块链系统上,应该怎么做呢?这里面有两个步骤,非常简单。第一步在你的业务逻辑里构造出几个关键的角色,这个角色现在考虑不要有多少个,它可能有多个,但现在就考虑成一个,这几个角度一定是业务逻辑上有关联的,他们需要共享,把这些规则同时映射到区块链里去,或者放到脚本里。接下来提到数据,哪些数据放到区块链当中去,哪些不放,因为区块链效率就是安全,一般是放简单的,关键的,而且只考虑需要共建的,另外一点即便有的数据放到区块链当中去,也不是所有的东西需要大家监督,而可能是闭门的,只有授权以后才能看,一个是隐私考虑,二是监管方面的合规性考虑。
有了第一步以后第二步更简单了,你需要一个便捷可靠的区块链平台,它是一个底层的基础架构,有账本、有网络,有供需算法,有账户,这样的一些东西都得存在,而且一般性查完了,根据你的业务需求这四大块可以查,可以发,下面有一个协议在。上面那一层就是映射,这个映射层很重要,就是要把你的业务抽象成很多模型、逻,抽象成让你容易用的体系,然后你就可以在应用系统上开发出你的业务逻辑,然后开发出基于区块链的业务逻辑来,这是一个快速的过程。实际上一个好的区块链业务平台应该还有自己的应用工具,还有监控、查看、辅助的工具,就像数据库的初期一样。数据库的初期如果只是单纯的数据,没有辅助工具的话,运行起来是很困难的。
接下来分享一个小小的案例,是我们刚刚发布的区块链商业积分的案例。这里面有很多的看法大家都已经探讨过了,一定要用积分通用起来,消费者能得到利,商家也能减轻负担,而且让积分真正的流动起来,引导真正的二次消费。这个意义就很大了,我们选择这个商业竞争还有更多的考虑,商业竞争本身具有一定的金融属性或者货币属性,它是纯粹的低风险的数字,因为它在合规合法的程度上监管的风险是最低的。第二积分可以快速的积累数字资产,积累C端用户,能在一定程度上检验你的区块链平台,甚至测试你的区块链技术,验证你的区块链平台对不对。最后衍生出来跟金融相关的属性,为后面金融手段的扩张都打下了很好的基础。
按照刚才我们看到的构建区块链系统的路径,第一步是决策,在区块链系统当中它的角色是两个,商户和消费者。商户也分成两个层面,发的积分,收的积分,消费者的积分也分两个,转出的和收到。规则是无歧视规则;数据,积分有些数据很有意思,我可以把所有人写在上面,可以把有效信息写在上面,而有一些消费行为,具体买的什么东西,喝的咖啡还是买的面包,这些数据写在上面,我用一个简单的例子引导大家。
第二步就是要找区块链的平台,在我们的布比区块链,我们得到了什么?我们真的得到了一个正向的反馈,我们觉得是一个非常好的反馈。第一点,数字积分代表的是多种数据资产,区块链上可以支持这样的东西。第二它可能有很多用户,不管是真实的用户还是实验室模拟用户,支持上百万的交易和存储量是没有问题的,第三确实为我们构造一个很好的基础,这个基础为后面金融领域的探索打下良好的基础。
Ⅹ Python 做高频交易系统适合哪个级别的延迟
比较现实的说是1ms级别的,如果你用python现成的library(urlib, request)接收数据至少有100us级别的延迟,一般交易系统需要多线程,python的GIL又会增加延迟,而且交易最忙的时候因为处理大量数据,python的GC更容易发生。用C或Cython写核心部分不能提高很多,因为python的延迟是因为language design而不是computation造成的。当然这些问题可以改进,比如自己做一套tcp连接程序什么的,不过这些恐怕并不比写c++更容易。
另外上面的回答里的时间测试不一定有代表性,在一个简单的loop测时间的话compiler和CPU会做很多你想不到的事情,结果会和真实值差很多。