首发于量化程序

PHP做金融量化交易程序,不输Go、C++、Python等语言

写这篇文章主要是发现太多的人觉得PHP只能做做网页、APP、小程序啥的,然后各种嫌弃,觉得Java Go Python等等要逆天了,当然它们确实非常不错。曾经看到一个段子是 C 看不起 C++、C++看不起Java 、Java看不起Php 、 我大Php看不起所有语言~~哈哈哈。然而我大PHP今天何以沦落到如何地步。我还是要证明一下它还是很牛逼的。

我个人以及我的团队是做金融量化交易程序,主要开发语言是PHP,也用到其他语言但是它们是反而是辅助性的 如Go、Python,它们更多用于微服务化架构设计。我们的业务主要是网络IO问题,当然硬件资源的利用率静态语言肯定比动态强很多。中前期用 PHP 来开发,就算后期也木有压力,后期用静态语言分离模块做微服务化,与 PHP 结合非常强悍,目前我们正在用 GO 开始做部分分离了。

以下图就是我们开发的一个量化交易系统,截图为其中的一个帐号。

这里面有很多的专业术语为了大家都能让大家明白,我就以菜市场买卖菜来举例说明(你可以理解为程序自动在菜市场买菜)。从图上看全是数据报表~所以这套系统基本上为后端执行,用户需要操作的东西很少。后端需要时时监控菜品价格,时时监控是否达到菜品买卖的条件。 和传统开发网页、APP、小程序等等业务需要用户去点点,各种用户操作后才执行的程序有非常大区别,而这就是所谓的后端程序服务。

详细举例一个流程:

一个菜贩子想通过底买高卖的方式来挣差价。去菜市场批发菜~突然发现有一个机器人可以自动给他买菜和卖菜,只需你告诉它购买的策略,比如说:芹菜跌到3元买一斤,涨到4元卖一斤。那么这个机器人需要做什么喃?一:需要时时监控芹菜的价格,二:时时监控是否达到了买卖条件。 如果两个条件都达到就执行交易策略,通过低买高卖的方式机器人小挣一笔。菜贩子突然觉得这个机器人不错,芹菜可以这样~那么其他菜品也可以这样,然后他就想买卖各种菜来扩大受益。

这里面其实就会涉及到很多需要思考的问题,比如:一个菜贩子想要很多机器人咋办? 比如:一个菜贩子还好,如果来一万个喃?又比如:菜品有几百种类型,他们的价格都不一样。你如何来监控?? 等等一系列的问题。那么对于开发人员来说我们又会考虑什么问题??

开发人员必须要考虑异步多任务问题处理,方案一:采用多进程方式,就像php-fpm一样,大多数的php框架都有自带的队列机制,拿来就用。 方案二:PHP有很好的第三方异步框架如:swoole、workerman等工具。方案三:微服务化或者模块独立化,用其他语言都行(比如我们的价格监控就是用的GO)。

那么我们要处理什么喃?? 一:时时监控菜品价格的解决方案,菜市场通常会提供socket server 服务,我们用websocket 客户端监控菜品价格,需要毫秒级别的响应(这里可以微服务设计,独立此模块),也可用php原生socket或者swoole/workerman socket。 二:多菜贩子、多机器人可用swoole/workerman 子进程、协程、php-fpm多进程方式解决。处理了这些问题,还有很多你要考虑的,如:服务器,进程数量,你的资源,多服务器如何协作等等问题。统统都是接触到底层东西。

还有就是php在后端虽然能完成工作,但是资源耗用的非常大,是不是可以用其他语言来辅助php做一个微服务化架构。比如说:我们用GO就独立化时时价格获取这块的业务。

如下图价格系统我们独立出来,为了解耦也为了提高效率。


其实业务上有很多可以跟大家分享的,由于时间问题就先暂时说到这里。

如果关注的人多的话,后期我可以把并发、硬件资源等等更实战的东西分享出来。你们会发现PHP真爽

总结一下:

Php 入门门槛低,但是要深入就很难。很多是自学或者培训几个月的出来工作也大多是小公司,做做网页,app,小程序啥的。根本不能更深入底层一些基础东西如:多进程,子进程,多线程,协程这些东西。再加上PHP有很多优秀的框架诞生~绝大部分人拿来就用,不会去深入了解框架的概念以及思想,造成了只懂表面不能深入理解。

当你有机会了解复杂的业务的时候,你会发现PHP很强大,相对于企业来说成本低、好招人。对开发人员来说好扩展、易维护、快速试错。而 PHP8快出来了,对内存的支持更好了。我非常看好PHP的未来。

为了让大家对底层这块更多的了解,我个人也做了一些PHP量化方面开源的东西。感兴趣的同学可以去看看。我的github


如果你是完全的新手,不程序,不懂量化建议你可以看看这个

Mr.lin:小白如何几小时内学会量化交易zhuanlan.zhihu.com图标

编辑于 10-10

文章被以下专栏收录