量化交易初学者指南

量化交易初学者指南策略识别策略回测执行系统风险管理总结

本文将介绍整个量化交易系统中的一些基本概念。本文服务于两类读者:第一类想在量化基金找到量化交易员工作的人,第二类是希望尝试和建立自己的零售算法交易业务的个人。

量化交易是量化金融中一个非常复杂的领域。为了通过面试或者构建自己的交易策略 ,你可能需要花费大量的时间来获得必要的知识。不仅如此,量化交易也需要你掌握大量的编程专业知识,至少应掌握一门程序语言,如MATLAB,R或Python。然而,随着交易策略频率的不断增长,编程技术的重要性也日益提升,因此熟悉C/C++也同样至关重要。

量化交易系统由四个主要部分组成:

首先介绍如何识别交易策略:

策略识别

所有的量化交易过程都始于最初的研究阶段。这一研究阶段包括寻找策略,观察该策略是否与你可能正在运行的其他策略组合相契合,获得测试策略所需的全部数据,并尝试优化策略以获得更高的回报以及降低风险。如果你是一个零售交易员,你还需要考虑自己的资本约束,以及任何可能影响你的策略的交易成本因素。

与流行的看法相反,实际上你可以相当直接地通过各种公共资料来源找到有利可图的策略。学术界通常会定期发布一些理论性策略的交易成果(尽管大多数未考虑交易成本)。量化金融博客会详细地讨论策略的细节,而与交易相关的杂志则会涉及量化基金使用的一些策略。

你可能会感到疑惑,为什么个人和公司会热衷于讨论他们的盈利策略,特别是当他们知道别人都使用该策略,可能会使得策略在长期里失去效力。他们这么做的原因在于,通常他们并不会讨论策略的确切参数和识别参数的方法,而这些优化才是使得相对平庸的策略转变为盈利丰厚的策略的关键。事实上,创建自己独特策略的最好方法之一便是找到类似的方法,然后执行自己的优化过程。

下面列出了一些网站与博客,你可以从他们这里开始寻找自已的交易策略:

你看到的很多策略都属于均值回归和趋势跟踪这两个类别。均值回归策略试图利用以下事实,即价格时间序列上有一个长期均值(例如两种相关资产之间的价差),并且任何对该均值的短期偏离最终会消失。动量策略试图利用大众投资心理学和大型基金的交易结构,通过在市场趋势上搭便车的方式,在一个市场方向上积累动量并跟随趋势,直到趋势逆转。

交易策略的频率是量化交易中另一个非常重要的方面。低频交易(LFT)通常指持有资产超过一个交易日的策略,相应地,高频交易(HFT)则指的是在日内持有资产的策略。 超高频交易(UHFT)是指持有大约几秒和几毫秒的资产的策略。 虽然作为个人量化交易从业者也能实施HFT和UHFT,但是只有当从业者充分掌握了相关交易技术细节以及订单簿动态变化的知识后才有可能。这篇介绍性的文章不会详细地讨论这些问题。

一旦确定了一个策略或一组策略,就需要用历史数据对其进行盈利测试,这就是回测需要处理的问题。

策略回测

回测的主要目标是为了提供证据,证明上述过程中识别的策略在应用于历史和样本外数据时确是有利可图的,这为量化交易员设定了策略在现实世界中可能如何表现的期望。然而,由于各种原因,回测并不一定能保证成功。这也许是量化交易中最微妙的领域,因为回测中涉及大量的偏差,必须仔细分析并尽可能地消除。我们将讨论常见的偏差,包括前视偏差,生存偏差和过度优化偏差(也称为“数据窥探”偏差)。回测中其他的重要问题还包括历史数据的可获得性和干净程度,分析现实中策略的交易成本以及确立可靠的回测平台。我们将在下面的执行系统部分进一步讨论交易成本。

一旦确定了交易策略,就需要获得历史数据以进行回测与改进交易策略。每一种资产类别都有相应的数据提供商,数据的成本通常随着数据的质量,深度和及时性提高而提高。传统上,量化交易的初学者(至少在零售层面)的起点是雅虎财经的免费数据集。我不会在这里太多地讨论数据提供商,而只是集中讨论处理历史数据集时会遇到的一般性问题。

在使用历史数据时,主要的关注点包括数据的准确性与清洁程度,数据中可能出现的幸存者偏差以及根据公司市场行为(如股利和股票拆分)对数据进行调整:

为了执行回测程序需要使用软件平台,你可以选择专门的回测软件,比如Tradestation,数值计算工具(如Excel或MATLAB)或者在编程语言(如Python或C++)中完全自定义实现。我不会太多地讨论Tradestation(或类似的软件),Excel与MATLAB,因为我想要创建一套完全属于自己的技术架构。这样做的好处之一是,即使对于非常复杂的统计交易策略,也可以实现回测软件和执行系统的紧密集成。对于HFT来说,自己实现交易技术系统尤为重要。

当对交易系统进行回测时,必须能够量化交易系统的执行情况。衡量量化交易策略盈利能力的通用指标是回撤和夏普比率,最大回撤表示特定时间段(通常为一年)账户净值曲线出现的最大下跌,通常用百分比表示。因为一些统计上的原因,LFT策略往往相比HFT策略有更大的回撤。回测可以展示过去的最大回撤,这是该策略未来回撤表现的良好指南。第二个指标是夏普比率,它的定义是超额回报的平均值除以超额回报的标准差。在这里,超额回报是指策略的回报与预先确定的基准的差值,例如标普500指数或三月期国库券收益率的差值。需要注意的是,年化收益并不是广泛使用的业绩标准,因为它没有考虑交易策略的波动性(在这点上夏普比率不同)。

一旦已经进行了回测,发现历史数据中没有偏差,而且交易策略有一个较好的夏普比率和最小化的回撤,就应该建立交易执行系统了。

执行系统

执行系统是一种将交易策略生成的交易命令发送给经纪商执行的手段。尽管交易命令的生成可以是半自动甚至全自动的,但是执行系统可以是手动的,半手动的(即一次点击)或全自动的。对于LFT策略,手动和半手动技术较为常见。对于HFT策略,则有必要创建一个全自动的执行系统,这个系统通常与交易生成器紧密相联(因为高频交易的策略和执行系统是相互依赖的)。

创建执行系统时,需要考虑的关键因素是经纪商的接口,最小化交易成本(包括佣金,滑点和价差)以及实时交易系统的表现与回测表现的差异。

可以通过多种方式连接到经纪商,从最简单地直接给你的经纪商打电话,到一个全自动的高性能应用程序编程接口(API)。理想情况下,你会希望尽可能自动地执行你的交易。这使你可以专注于进一步的研究,以及允许你运行多个策略甚至更高频率的策略(事实上,HFT基本上不可能不自动执行)。之前简略提到的常用回测软件,如MATLAB,Excel和Tradestation可以适用于简单的低频策略。然而,为执行真正的高频交易,确有必要构建用高性能语言(如C++)编写的执行系统。在我以前工作的基金,我们有一个10分钟的交易循环,每10分钟下载一次新的市场数据,然后在同一时间框架内执行基于该信息的交易。我们使用的是优化过的Python脚本,然而对于分种级或秒级的交易策略,我相信C/C++会更加理想。

在较大规模的量化基金中,通常不需要量化交易员来优化执行系统。然而,在较小的基金或HFT公司中,交易员就是是执行者,因此交易员通常需要掌握更广泛的技能。记住,如果你希望受雇于一个量化基金,你的编程技能将与你的统计和计量经济学知识一样重要(如果不是更重要的话)。

执行系统中的另一个主要问题是交易成本的最小化。交易成本通常有三个组成部分:佣金(或税收),即由经纪人,交易所和证监会(或类似的政府监管机构)收取的费用。滑点,这是你打算执行的订单与实际执行的订单之间的价格差异,这是所交易证券的买价与卖价之间的差额。注意,价差并不是常数,并且取决于市场当前流动性。

交易成本可以使具有较高夏普比率的盈利可观的策略变成具有糟糕的夏普比率的非常不盈利的策略。在回测中正确地预测交易成本是一个巨大的挑战,根据交易策略的频率,你需要获得历史交易数据,甚至买卖价的Tick数据来为预测交易成本提供依据。正因为此,大型基金中会有一整个团队来优化交易系统的执行。考虑以下场景,一个基金需要卖出大量股票,将这么多股票一下倾销到市场会使得股价迅速下降,基金可能无法获得最佳的执行价格。因此,存在一种“滴加”订单到市场上的算法,尽管这种算法也面临着执行价格滑动的风险。此外,有些策略会以这种必然要执行的交易为捕猎的对象,利用交易中的低效率来盈利,这属于基金结构套利的领域。

执行系统的最后一个主要问题是策略实际表现与回测表现的差异,这可能是由多种原因造成的。当分析回测时,我们已经深入讨论了前视偏差和过度优化偏差。然而,对于有些策略,在部署之前进行测试并不容易,这在高频交易策略中经常发生。执行系统和交易策略可能存在错误,但这些错误不会在回测中表现出来,但却会在实时交易中表现出来。此外,在部署策略之后,市场可能已经受到体制变化的影响,新的监管环境,变化了的投资者情绪和宏观经济现象都可能导致市场行为发生变化,从而影响了你的策略的盈利能力。

风险管理

量化交易难题的最后一个部分是风险管理。风险包括我们之前已经讨论的所有偏差。它也包括技术风险,例如与交易所联合部署的服务器突然出现硬盘故障,还包括经纪风险,例如经纪商破产。简而言之,这些风险涵盖了几乎所有可能干扰你执行交易的事件。这些风险有各种来源,详细地讨论量化策略的风险管理需要一整本书,所以我不打算在这里阐明所有可能的风险来源。

风险管理还包括所谓的最优资产配置,它是投资组合理论的一个分支,是一种将资本分配给不同策略以及在这些策略内进行交易的手段。这是一个复杂的领域,完全理解它需要一些高深的数学知识。 最佳资本配置和交易策略的杠杆紧密相关,两者关系的通行标准称为凯利标准。由于这只是一篇介绍性的文章,我不会详细讨论它的计算过程。凯利标准对回报的统计性质做出了一些假设,这些假设在金融市场中并不经常成立,因此交易者在执行交易时通常比凯利标准要求的更为保守。

风险管理的另一个关键组成部分是应对自己的心理活动。交易中会出现很多认识偏差,尽管如果让交易策略独自执行不受人工干预,这些偏差对算法交易来说都不是问题。一个常见的偏差是损失厌恶,即交易员由于不愿意实现损失而迟迟不平掉已经亏损严重的头寸。与之类似,盈利则实现的太早,因为交易员非常害怕失去已经获得的利润。 另一个常见的偏差被称为近因性偏差,这表现在交易员过分强调最近发生而不是更长期的事件。最后,经典的情感偏差——恐惧和贪婪也是存在的,这些偏差往往导致杠杆不足或杠杆过度,并可能导致爆仓或减少盈利。

总结

可以看出,量化交易是一个非常复杂虽然也非常有趣的量化金融领域。虽然我目前只触及到这个话题的皮毛,文章就已经变得相当冗长,这篇文章里的一两句话都可以用一整本书来阐述。因此,在申请量化基金交易工作之前,有必要进行大量的准备工作。至少,你需要在统计学和计量经济学方面有广泛的背景知识,具备至少一门编程语言的实践经验。对于更高频率的更复杂的策略,你还可能需要掌握包括Linux内核修改、C/C++、汇编语言和网络延迟优化。

如果你有兴趣建立自己的算法交易策略,我的第一个建议是要擅长编程。我推荐你尽可能多地自己构建数据抓取器,策略回测器和执行系统。如果你自己的资金正在交易,知道你已经完全测试了你的系统并了解它的陷阱和具体问题,不应该让你在晚上谁的更香吗? 将交易系统外包出去,虽然可能在短期内节省时间,但是从长远来看可能付出高昂的代价。