高频交易系统资讯技术探讨系列 (2)[系统交易]
4. 演算法设计
HFT系统无止境的追求执行效率,就软体面,效率决定于「演算法的设计方式」、「选择的发展语言」,甚至连使用的「作业系统」都有关系。
先从演算法的设计谈起,以HFT系统中常常必须处理的排序与搜寻来说(过去学习资料结构时,光是排序、搜寻就有许多不同的演算法,「旅行者问题」、「背包问题」折磨多少学者的脑细胞),不同演算法的效率不同。
评估演算法效率的指标,包括时间複杂度(执行过程的耗时)、空间複杂度(执行过程的记忆体耗用)与正确性(对于大空间的搜寻,不见得可以即时得到全域最佳解,只能力求接近)等。
交易过程的许多步骤,都涉及搜寻的工作,一般的搜寻策略包括线性搜寻与二元搜寻,複杂空间的搜寻策略则可以写一整本书,很多AI的演算法都用于空间搜寻。
举例来说,我目前有一个研究,研究的目的是验证短期Pattern的持续性;研究中运用日内资料(台指期货秒K资料),动态搜寻过去一段时间(例如5天)的最佳策略组合(解空间包括20馀种技术指标组合、指标的参数组合,与指标间的逻辑运算组合),再外推一段时间(例如1天)以验证策略效果。实证过程使用前滚式移动视窗测试。(来源 www.cxh99.com )
实证系统用C#编码,同时动用数十台电脑平行处理,演算法则用基因演算法代替穷举法(注:我们曾用模拟退火法,效果比穷举法好很多,但还是不及基因演算法。模拟退火法与基因演算法等AI领域方法,都是用来解决搜寻问题的方法)。
5. 软体开发平台选择
其次是使用的语言,要作HFT,可以选择使用C++或C#、Java(注:C#简单的说就是微软的Java),C#与Java将C作了简化,好处是编码较C++容易(开发时间较短),代价是无法像C++那麽「接近硬体」,C++可以用指标(Pointer)对记忆体作较佳控制,也可以方便管理记忆体(动态释放用不到的记忆体,所谓Garbage Collection),在HFT竞速过程中会是比较好的选择。
那麽BASIC家族的语言效率如何?写这篇文章同时,作了一个简单测试,在同样的演算法、同样的硬体条件、同样编译成执行档,情形下 VB. Net的速度比VC# .Net的速度慢约1倍。VBA就更不用提了。
6. 讯息传递方式
最后提到HFT系统不同子系统间的讯息传递(Message)。讯息传递系由事件(Event)驱动,例如「取得市场报价」子系统收到来自于市场的报价后,播送讯息(Publication),其他单元则接收讯息(Subscription),此过程称为「播送接收传讯」(Pub-sub Messaging)。在一个HFT系统中有众多的子系统,彼此间依据时序作複杂的讯息传递。(来源 www.cxh99.com )
讯息传递有两种方式,一种是使用TCP/IP socket,此法建立传送与接收者间的专用通道,当子系统的传讯複杂时可能影响效率;另一种选择是多方播送方式(Multicast),送迅子系统儘管将讯息丢出去,由收讯子系统负责接受,由于不是专用通道,可靠性较低,但效率较好。
有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友
可联系技术人员 QQ: 511411198 进行 有偿 编写!(不贵!点击查看价格!)
- 上一篇:高频交易系统资讯技术探讨系列 (3)
- 下一篇:高频交易系统资讯技术探讨系列 (1)
相关文章
-
没有相关内容