PART 2.Trading Systems 4.Automated Execution-自动执行 自动执行是让策略自动生成执行的过程,在没有任何人工干预的情况下发送给代理的信号。这是最纯粹的算法交易策略,因为它将人为干预带来的问题最小化。 回测平台 用于策略反测试的软件环境非常广阔。解决方案的范围从完全集成的机构级复杂软件到编程语言,如c++、Python几乎所有的东西都必须从头编写(或者获得合适的“插件”)。作为量化交易员,我们感兴趣的是能够“拥有”我们的交易技术堆栈与我们开发方法的速度和可靠性之间的平衡。下面是选择软件需要考虑的关键因素: ● 编程技能:环境的选择在很大程度上取决于你编写软件的能力,控制整个堆栈对您的长期PnL的影响将比尽可能多地外包给供应商软件更大。这是由于外部缺陷或特性的下降风险,您无法在供应商软件中修复这些缺陷或特性,如果您对“技术堆栈”有更多的控制,这些缺陷或特性将很容易修复。您还需要一个在生产力、库可用性和执行速度之间取得适当平衡的环境。 ● 执行能力/代理交互:某些回测软件,如Tradestation,与经纪公司直接相关。如果您绑定到一个特定的代理(并且交易“强迫”您这样做),那么如果需要的话,您将很难过渡到新的软件(或新的代理)。交互式代理提供了一个健壮的API,尽管接口有点迟钝。 ● 自定义:像MATLAB或Python这样的环境在创建算法策略时提供了很大的灵活性,因为它们为几乎所有可以想象到的数学操作提供了出色的库,而且在必要时还允许广泛的自定义。 ● 策略的复杂性:某些软件不适合处理复杂的数字或数学问题。Excel就是这样一个软件。虽然它适用于更简单的策略,但它不能真正快速地处理大量资产或更复杂的算法。 ● 偏差最小化:某个特定的软件或数据是否更容易产生交易偏见?您需要确保,如果您想自己创建所有功能,就不要引入可能导致偏见的bug。 ● 开发速度:不应该花几个月的时间来实现一个回测引擎。原型制作只需要几周的时间。确保您的软件没有仅仅为了获得几个额外的执行速度百分点,在很大程度上阻碍您的进度。 ● 执行速度:如果您的策略完全依赖于执行时效性,那么就需要使用C或c++这样的语言。 ● 成本:许多可以编写算法交易策略的软件环境都是完全免费和开源的。事实上,许多对冲基金在整个算法交易栈中都使用开源软件。此外,Excel和MATLAB都相对便宜,甚至都有免费的替代品。 编程 在一流编程语言中定制回测语言的开发在测试策略时提供了最大的灵活性。相反,供应商开发的集成回测平台总是必须对如何进行回测做出假设。可供选择的编程语言是多种多样的。在开发之前,哪种语言是合适的并不明显。 一旦一项策略被编纂成系统的规则,就有必要对其进行回测,以使量化交易员确信其未来表现将反映其过去的表现。通常有两种形式的回测系统用于测试这个假设。从广义上讲,它们被划分为研究后台测试人员和事件驱动后台测试人员。 研究工具 通常首先考虑的是较简单的回测工具,即研究工具。研究工具被用来快速确定一个策略是否可能有任何效果。这些工具常常对交易成本、可能的补仓价格、做空限制、地点依赖、风险管理以及上一章概述的许多其他问题做出不切实际的假设。常用的研究工具包括MATLAB、R、Python和Excel。研究阶段是有用的,因为软件包提供了重要的向量化功能,这将带来良好的执行速度和简单的实现(更少的代码行)。因此,可以以快速、迭代的方式测试多个策略、组合和变体。 虽然这类工具通常同时用于回溯测试和执行,但是这类研究环境通常不适用于接近日内交易频率较高(分分钟)的策略。这是因为这些环境通常不具备连接到实时市场数据供应商服务器的必要库,或者不能以一种干脆的方式与经纪api接口。尽管存在这些执行上的不足,但研究环境在专业的量化环境中被大量使用。它们是所有策略思想的“第一个测试”,然后在一个实际的反测试环境中对它们进行更严格的检查。 事件驱动回测 一旦一项战略在研究基础上被认为是合适的,就必须以更现实的方式进行测试。理想的情况是能够使用相同的交易生成代码进行历史回溯和实时执行。这可以使用事件驱动的回测来实现。 事件驱动系统广泛应用于软件工程中,通常用于处理基于窗口的操作系统中的图形用户界面(GUI)输入。它们也是算法交易的理想工具。这样的系统通常是用诸如c++、c#和Java之类的高性能语言编写的。 考虑这样一种情况,自动交易策略连接到实时市场提要和代理(这两者可能是一个,而且是相同的)。系统将发送新的市场信息,触发和事件生成新的交易信号,从而产生执行事件。 因此,这样的系统处于一个连续的循环中,等待接收事件并正确地处理它们。可以生成子组件,例如历史数据处理程序和代理模拟器,它们可以模拟活动的对应组件。这允许以一种非常类似于实时执行的方式进行回测策略。这些系统的缺点是,它们的设计和实现要比简单的研究工具复杂得多。因此,“上市时间”更长。它们更容易出现bug,并且需要合理的编程知识,在一定程度上还需要软件开发方法。 延迟 通常指从生成执行信号到从实现执行的代理接收填充信息之间的往返时间延迟。这种延迟对于低频日内策略来说很少是一个问题,因为在延迟期间可能发生的价格变动不会在很大程度上影响策略。不幸的是,高频策略并非如此,在这些频率下,延迟变得很重要。最终的目标是尽可能地减少延迟,减小滑点。 降低延迟包括最小化算法交易系统与执行订单的最终交易所之间的“距离”。这可能包括缩短系统之间的地理距离(从而减少下行网络布线)、减少在网络硬件中执行的处理(在高频交易策略中很重要)或选择具有更复杂基础设施的经纪公司。随着“网络距离”(即两台服务器之间的网络距离)的增加,降低延迟的代价将成倍增加。因此,对于高频交易者来说,必须在减少延迟的支出和减少下滑的收益之间达成妥协。 |