选择回测和自动执行的平台

选择回测和自动执行的平台

本文将讨论自动执行的概念。广义上讲,这是允许交易策略通过电子交易平台生成交易执行信号而无需任何后续人工干预的过程。迄今为止,QuantStart 上讨论的大多数系统都被设计为自动执行策略。本文将介绍提供回溯测试和自动执行功能的软件包和编程语言。

首先要考虑的是如何对策略进行回测。我个人认为,使用一流的编程语言定制开发回测环境可以提供最大的灵活性。相反,供应商开发的集成回测平台总是必须对如何进行回测做出假设。尽管如此,可用的编程语言选择范围很广,而且种类繁多,这往往让人不知所措。在开发之前,很难确定哪种语言可能合适。

在将策略编纂成系统规则时,量化交易者必须确信其未来表现将反映其过去表现。通常有两种形式的回测系统可用于测试这一假设。广义上,它们分为研究回测器事件驱动回测器。我们将针对这两个范例考虑定制回测器与供应商产品,并比较它们。

研究工具

在识别算法交易策略时,通常不需要完全模拟市场互动的所有方面。相反,可以进行近似计算,以快速确定潜在的策略绩效。此类研究工具通常对交易成本、可能的成交价格、卖空限制、场地依赖性、风险管理和头寸规模做出不切实际的假设。尽管存在这些缺点,但仍然可以有效地评估此类策略的表现。常用的研究工具包括 MATLAB、R、Python 和 Excel。

这些软件包附带矢量化功能,可实现快速执行和更轻松的策略实施。MATLAB和pandas就是矢量化系统的示例。借助此类研究工具,可以快速、迭代地测试多种策略、组合和变体,而无需完全“充实”真实的市场互动模拟。

虽然此类工具通常用于回测和执行,但这些研究环境通常不适合以亚分钟级的更高频率进行日内交易的策略。这些库往往无法有效地连接到实时市场数据供应商或以稳健的方式与经纪 API 交互。

尽管存在这些执行缺陷,研究环境在专业量化交易行业中仍被广泛使用。它们为所有策略理念提供“初稿”,然后将其推向现实回测环境中更严格的检查。

事件驱动的回测

一旦研究认为某个策略合适,就必须对其进行更现实的评估。这种现实主义试图解释之前 文章中描述的大多数(如果不是全部)问题。理想的情况是能够使用相同的交易生成代码进行历史回测以及实时执行。这是通过事件驱动的回测器实现的。

事件驱动系统在软件工程中应用广泛,通常用于处理基于窗口的操作系统中的图形用户界面 (GUI) 输入。它们也非常适合算法交易,因为实时市场订单或交易执行的概念可以封装为事件*。*此类系统通常用 C++、C# 和 Java 等高性能语言编写。

考虑这样一种情况:自动交易策略连接到实时市场信息流和经纪商(这两者可能是同一个)。新的市场信息将发送到系统,从而触发事件以生成新的交易信号,从而生成执行事件。这些系统以连续循环的方式运行,等待接收事件并进行适当处理。

可以生成子组件,例如历史数据处理程序和经纪模拟器,它们可以模拟其实际对应物。这允许以与实际执行极为相似的方式回溯测试策略。

与简单的研究工具相比,此类系统的缺点在于设计复杂。因此“上市时间”更长。它们更容易出现错误,并且需要具备良好的编程和软件开发方法知识。

延迟

在工程术语中,延迟定义为模拟和响应之间的时间间隔。在量化交易中,它通常指执行信号的生成和从执行该信号的经纪人处收到填充信息之间的往返时间延迟。

这种延迟很少成为低频日间策略的问题。延迟期间的预期价格变动不会对策略产生很大影响。对于延迟变得极其重要的高频策略而言,情况并非如此。HFT 的最终目标是尽可能减少延迟以减少滑点

降低延迟涉及最小化算法交易系统与执行订单的最终交易所之间的“距离”。这可能涉及缩短系统之间的地理距离,从而减少网络布线的传输时间。它还可能涉及减少在网络硬件中进行的处理或选择具有更复杂基础设施的经纪公司。许多经纪公司在延迟方面展开竞争以赢得业务。

随着“互联网距离”(定义为两台服务器之间的网络距离)的增加,降低延迟的成本将呈指数级增长。因此,对于高频交易者来说,必须在降低延迟的成本和最小化滑点的收益之间达成妥协。这些问题将在下面的主机托管部分中讨论。

语言选择

一些影响语言选择的问题已经概述。现在我们将考虑各个编程语言的优点和缺点。我已将语言大致分为高性能/开发更困难与低性能/开发更容易。这些都是主观术语,有些人会根据其背景持不同意见。

编写自定义回测环境最重要的方面之一是程序员熟悉所使用的工具。对于那些刚接触编程语言的人来说,以下内容将阐明算法交易中通常会使用哪些工具。

C++、C# 和 Java

C++、C# 和 Java 都是通用面向对象编程语言的例子。这意味着它们无需相应的集成开发环境 (IDE) 即可使用,都是跨平台的,拥有广泛的库,几乎可以完成任何可以想象到的任务,并且在正确使用时可以实现快速的执行速度。

如果追求极致的执行速度,那么 C++(或 C)可能是最佳选择。它在管理内存和优化执行速度方面提供了最大的灵活性。这种灵活性是有代价的。C++ 很难学好,而且经常会导致一些难以察觉的错误。开发时间可能比其他语言要长得多。尽管存在这些缺点,但它在金融行业中仍然很普遍。

C# 和 Java 类似,因为它们都要求所有组件都是对象,除了浮点数和整数等原始数据类型。它们与 C++ 的不同之处在于执行自动垃圾收集。垃圾收集会增加性能开销,但可以加快开发速度。这些语言都是开发回测器的不错选择,因为它们具有原生 GUI 功能、数值分析库和快速的执行速度。

就我个人而言,我使用 C++ 来创建需要极快执行速度的事件驱动回测器,例如 HFT 系统。只有当我觉得 Python 事件驱动系统存在瓶颈时,我才会这样做,因为后者将是此类系统的首选。

MATLAB、R 和 Python

MATLAB 是一种用于数值计算的商业 IDE。它在学术、工程和金融领域得到了广泛的认可。它有许多用于科学计算的数值库。它以快速的执行速度为豪,前提是任何正在开发的算法都要经过矢量化并行化。尽管有这些优势,但它价格昂贵,对预算有限的零售交易者来说吸引力较小。MATLAB 有时用于直接执行经纪业务,例如 Interactive Brokers。

R 是一个专用的统计脚本环境。它是免费的、开源的、跨平台的,包含大量可免费使用的统计软件包,可用于执行极其高级的分析。R 在学术统计学和量化对冲基金行业中应用非常广泛。虽然可以将 R 连接到经纪公司,但它并不适合这项任务,而应该更多地将其视为一种研究工具。除非操作是矢量化的,否则它的执行速度也会很慢。

尽管 Python 介于 MATLAB、R 和前面提到的通用语言之间,但我还是将其归入这一类别。它是免费的、开源的和跨平台的。它是解释型的,而不是编译型的,这使得它比 C++ 本身慢。但是,它包含一个库,可以执行几乎任何可以想象到的任务,从科学计算到低级 Web 服务器设计。特别是它包含 NumPy、SciPy、pandas、matplotlib 和 scikit-learn,它们提供了一个强大的数值研究环境,当矢量化时,其执行速度可与编译型语言相媲美。

Python 还拥有用于连接经纪商的库。这使得它成为创建事件驱动的回测和实时执行环境的“一站式商店”,而无需使用其他更复杂的语言。对于在几分钟及以上的时间范围内进行交易的日内交易者来说,执行速度绰绰有余。与 C++ 等低级语言相比,Python 非常容易掌握和学习。出于这些原因,我们在 QuantStart 文章中大量使用 Python。

集成开发环境

IDE 一词在算法交易中具有多重含义。软件开发人员使用它来表示允许使用语法突出显示、文件浏览、调试和代码执行功能进行编程的 GUI。算法交易者使用它来表示完全集成的回测/交易环境,具有历史或实时数据下载、图表、统计评估和实时执行功能。出于我们的目的,我使用该术语来表示任何回测/交易环境,通常基于 GUI,不被视为通用编程语言。

Excel

虽然一些量化交易员可能认为 Excel 不适合交易,但我发现它对于“检查结果的合理性”非常有用。所有数据都直接可见,这使得实施非常基本的信号/过滤策略变得非常简单。Interactive Brokers 等经纪公司还允许使用 DDE 插件,使 Excel 能够接收实时市场数据并执行交易订单。

尽管 Excel 易于使用,但对于任何合理规模的数据或数值计算水平来说,它都极其缓慢。我只在针对其他策略进行开发时使用它来检查错误。特别是,它对于检查策略是否受到前瞻偏差的影响非常方便。由于该软件的电子表格性质,这在 Excel 中很容易检测到。

如果您不熟悉编程语言并且正在执行日间策略,那么 Excel 可能是一个不错的选择。

商业/零售回测软件

零售图表、“技术分析”和回溯测试软件市场竞争非常激烈。此类软件提供的功能包括实时价格图表、丰富的技术指标、定制回溯测试语言和自动执行。

一些供应商提供一体化解决方案,例如TradeStation。TradeStation是一家在线经纪公司,其生产的交易软件(也称为 TradeStation)可提供跨多种资产类别的电子订单执行。我目前不知道是否有用于自动执行的直接 API。相反,订单必须通过 GUI 软件下达。这与 Interactive Brokers 形成鲜明对比,后者拥有更精简的交易界面(Trader WorkStation),但同时提供其专有的实时市场/订单执行 API 和 FIX 界面。

另一个非常流行的平台是MetaTrader,它在外汇交易中用于创建“专家顾问”。这些是用专有语言编写的自定义脚本,可用于自动交易。我对 TradeStation 或 MetaTrader 都没有太多经验,所以我不会花太多时间讨论它们的优点。

如果您不熟悉深入的软件开发,并且希望处理大量细节,那么此类工具非常有用。但是,使用此类系统会牺牲很多灵活性,而且您通常只能依赖一家经纪公司。

开源和基于 Web 的工具

目前两种流行的基于 Web 的回测系统是QuantopianQuantConnect。前者使用 Python(和 ZipLine,见下文),而后者使用 C#。两者都提供了丰富的历史数据。Quantopian 目前支持与 Interactive Brokers 进行实时交易,而 QuantConnect 正在努力实现实时交易。

Algo-Trader是一家总部位于瑞士的公司,为其系统提供开源和商业许可证。据我所知,该产品似乎相当成熟,他们拥有许多机构客户。该系统允许进行完整的历史回溯测试和复杂事件处理,并与 Interactive Brokers 相关联。企业版提供了更多高性能功能。

Marketcetera提供了一个回测系统,该系统可以与许多其他语言(例如 Python 和 R)结合使用,以便利用您可能已经编写的代码。“策略工作室”提供了编写回测代码以及优化执行算法的能力,随后可以从历史回测过渡到实时纸质交易。我以前没有用过它们。

ZipLine是支持上述 Quantopian 服务的 Python 库。它是一个完全事件驱动的回测环境,目前支持以分钟为单位的美国股票。我还没有广泛使用 ZipLine,但我知道其他人认为它是一个很好的工具。仍有许多方面需要改进,但团队一直在努力开发该项目,并且非常积极地维护它。

您可能还希望研究一些 Github/Google Code 托管项目。我没有花太多时间研究它们。这些项目包括OpenQuantTradeLinkPyAlgoTrade

机构回测软件

零售算法交易员通常不会使用DeltixQuantHouse等机构级回测系统。软件许可证通常远远超出基础设施预算。话虽如此,此类软件却被量化基金、自营交易公司、家族理财室等广泛使用。

此类系统的优势显而易见。它们为单一工具或投资组合提供数据收集、策略开发、历史回溯测试和实时执行的一体化解决方案,最高可达高频水平。此类平台经过了广泛的测试和大量“现场”使用,因此被认为是可靠的。

该系统是事件驱动的,回测环境通常可以高度准确地模拟实时环境。系统还支持优化的执行算法,以尽量减少交易成本。这对于拥有较大资本基础的交易者尤其有用。

我必须承认,我对 Deltix 或 QuantHouse 的使用经验并不多。话虽如此,但预算本身就让大多数散户交易者望尘莫及,所以我不会详细讨论这些系统。

主机托管

算法交易的软件前景现已调查完毕。现在我们可以将注意力转向执行我们策略的硬件的实现。

零售交易员可能会在市场营业时间内在家中执行其策略。这将涉及打开他们的电脑、连接到经纪商、更新他们的市场软件,然后让算法在白天自动执行。相反,拥有大量管理资产(AUM)的专业量化基金将拥有专用的交易所托管服务器基础设施,以尽可能减少延迟以执行他们的高速策略。

家庭桌面

硬件部署的最简单方法就是使用通过宽带(或类似)连接连接到经纪公司的家用台式计算机来执行算法策略。

虽然这种方法很容易上手,但也有很多缺点。台式机容易断电,除非有 UPS 备份。此外,家庭互联网连接也受 ISP 的支配。在交易的关键时刻可能会发生断电或互联网连接故障,导致算法交易员无法平仓。操作系统强制重启(这在专业环境中确实发生在我身上!)和组件故障也会导致同样的问题。

出于上述原因,我不太推荐使用家用台式电脑进行算法交易。如果您决定采用这种方法,请确保同时拥有一台备用计算机和备用互联网连接(例如 3G 加密狗),以便在停机情况下平仓。

虚拟专用服务器

比家用台式机更高级的是使用虚拟专用服务器(VPS)。VPS 是一种远程服务器系统,通常以“云”服务的形式销售。它们比相应的专用服务器便宜得多,因为 VPS 实际上是更大服务器的一个分区。它们拥有仅供每个用户使用的虚拟隔离操作系统环境。CPU 负载由多个 VPS 共享,系统 RAM 的一部分分配给 VPS。这一切都是通过称为虚拟化的过程进行的。

常见的 VPS 提供商包括Amazon EC2Rackspace Cloud。它们提供从 RAM 和基本 CPU 使用率较低的入门级系统到企业级高 RAM、高 CPU 服务器。对于大多数算法零售交易者来说,入门级系统足以满足低频日内或日间策略以及较小的历史数据数据库的需求。

基于 VPS 的系统的优点包括全天候可用性(尽管有一定的实际停机时间!)、更强大的监控功能、易于添加的附加服务(如文件存储或托管数据库)和灵活的架构。缺点是持续的费用。随着系统的增长,专用硬件的单位性能成本会降低。此价格点假设主机托管远离交易所。

与家用台式机系统相比,选择 VPS 提供商并不总能改善延迟。您的家庭位置可能比云提供商的数据中心更靠近某个金融交易所。选择一家专门为算法交易提供 VPS 服务的公司(位于交易所或交易所附近)可以缓解这种情况。这些公司的费用可能比亚马逊或 Rackspace 等通用 VPS 提供商更高。

交易所主机托管

为了最大限度地降低延迟,有必要将专用服务器直接放在交易所数据中心。对于几乎所有零售算法交易者来说,除非他们资金充足,否则这是一个非常昂贵的选择。这实际上是专业量化基金或经纪商的领域。正如我上面提到的,一个更现实的选择是从交易所附近的提供商那里购买 VPS 系统。

可以看出,回溯测试、自动执行和托管策略有很多选择。确定正确的解决方案取决于预算、编程能力、所需的定制程度、资产类别可用性以及交易是在零售还是专业基础上进行的。

猜你喜欢

转载自blog.csdn.net/m0_74840398/article/details/143041738