交易类业务
上一节讲的信贷类业务,主要还是由传统银行来完成,对信息技术的应用比较有限。金融行业也是有很多高科技的,它们主要体现在投资银行和其他新兴金融机构身交易类业务占比最大。
场内交易
大家应该都听过股票交易所这个金融机构,在交易所内的交易叫作场内交易,交易的场所就是交易所。
交易所角度
交易所中的一级市场与二级市场
公司上市指这家公司的股票可以在股票交易所内交易,也就是股票在二级市场交易。
既然有二级市场,那么肯定还有一个一级市场,一级市场其实就是公司股东之间的私下交易。
如何消除信息不对称
一级市场
一级市场的信息不对称主要体现在如何匹配大额股票的买家和卖家。投资银行解决信息不对称的方式是通过公司和自己的人脉来撮合买卖双方。由于解决方案是靠人而不是靠技术,所以这一阶段对信息系统要求不高。
二级市场
公开交易市场能发现合理的价格信息。所以为了解决价格信息不对称的问题,投资银行会帮助客户公司将股票在流动性高的二级市场上销售。由于二级市场是个公开市场,靠大量的交易来解决价格信息不对称问题,而不是靠人脉关系。这时候就对信息系统有很高的要求。
股票系统面临的挑战
极低延迟与极高吞吐量
信息沟通得越快,就越能发现资产的合理价格。所以股票交易强调交易的速度,也就是系统延时。对开发人员来说,股票交易所是一个秒杀系统。只不过和电商秒杀的区别在于股票交易所每时每刻都在秒杀。所以股票交易所需要有一个极低延时、极高吞吐量的系统架构.
股票交易所系统技术
有很多互联网场景都会有应对大流量的方案,比如横向拓展,异步消息队列,增加缓存,分库分表,读写分离等,但这些方案都是建立在牺牲延时的基础上的。
事实上,软件处理很难实现微秒级延时,就算达到这个延时了系统吞吐量也上不去。但是股票交易所确确实实既有低延时又有高吞吐量。那它是怎么做到的呢?
硬件技术
答案很简单,就是用硬件,比如用 FPGA 来实现。理论上硬件能实现和所有软件一样的功能,但是硬件研发成本高,而且非常耗时。股票交易所恰好不怕这些问题。交易所别的没有,就是钱多,所以只要投资回报比足够,再多的钱都能拿出来。而研发时间久在交易所里问题也不大,主要是因为交易所业务逻辑非常单。
交易所业务流程
交易所的主要功能是撮合买方和卖方。
- 交易所在系统内维护了还没有成交的卖方订单和买方订单。
- 当一个新的订单进来的时候,交易所会查看能不能成交。
- 如果不能成交就等待下一笔订单。
交易所用户间的尔虞我诈
投资银行如何通过制造信息不对称来实现盈利?
算法交易平台的拆单
如果交易所用户是个股票小散户的话,在股市上是掀不起多大风浪的。但是如果用户掌管了一家大型机构,机构里每次买卖都是上亿的资金,那很有可能会影响到市场价格。而且通常是负面影响,也就是说会让用户买得更贵,或者卖得更便宜。
为了消除上述影响,金融机构会有一个算法交易平台,这个平台需要实时对市场数据进行分析,用算法 来拆解和执行订单,从而造成信息不对称,从而让一般用户无法获取你正在大量交易股票这个信息。
投资银行或者券商一般会给用户提供一个拆单的服务。他们会将大订单拆成很多小订单,并且选择在不同的时间发送到股票交易所,避免产生剧烈的市场波动。
金融机构如何通过消除信息不对称来赚钱?
高频交易系统的超短线操作
做高频交易的对冲基金就是一类通过发现和消除信息不对称来赚钱的金融机构。他们的核心竞争力就是极低的系统延时。当延时高的时候,股票体现的是宏观规律,比如你会看公司的基本面,或者猜是不是庄家在出货。但是当延时低的时候,股票体现的是统计规律。
比如前面提到的将股票拆单的操作。如果你发现了一个小的买单,那么接下来很有可能会有很多小的买单。如果你系统的延时足够低,就可以挤在这些小单的前面买入,然后马上卖出,从而通过超短线操作获利。所以高频交易系统里也有算法交易平台。这个平台也需要以极低的延时来分析实时市场数据,并且也要以极低的延时来执行订单。
交易所技术特点\
- 机构用户要求系统的消息处理时间在毫秒和微秒之间(1/1000~1/1000000 秒)。
- 编程语言的选择。一般来说 C 是首选,核心代码用汇编语言实现。要求不高的地方用 C++ 也可以。至于互联网常见的编程语言,比如 Java、Go、Python、Javascript 等,都不适合。
- 软件架构,互联网软件通常会使用 SOA 或微服务架构。这种架构导致业务的调用链很长,每次调用都有网络延时,交易所用户架构则完全相反。系统会用单个进程来完成所有的事情,最好不要有网络开销。
场外交易
股票市场和其它的场内交易只是金融市场的冰山一角,绝大部分的金融交易都发生在交易所外,也叫场外交易。
金融产品
场外交易的金融产品非常多,比如私下交易股票,外汇交易,资产证券化后的P2P,花呗,白条,供应链金融等都属于场外交易。
场外交易对技术的要求
合同定价与市场风险计算
我们在场外交易的时候没法被动地发现价格,那么就只能主动发现价格了。所以对于场外交易的金融产品来说,我们需要独立计算出合同的价格。
定价系统需要处理复杂度和数据量的问题,这一点也是对所有场外交易定价系统的要求。但资产证券化只是一种场外交易的金融产品,金融行业还有很多其它的金融产品,不同的产品定价方式完全不一样,时间长了会有定价系统数量多带来的高复杂度问题。
领域驱动设计 所有场外交易的金融产品都存在共性,比如说它们肯定都跟钱有关。这些共性可以进一步提炼出来,从而有希望搭建一个金融产品的统一定价平台,这个抽象总结的方法就是领域驱动设计。
交易类业务特点及技术挑战图