在本文中,我将向你介绍一些关于端对端的量化交易系统的概念。这篇文章希望为两类读者服务。第一类是试图在基金中找到一份量化交易员工作的人。第二类是希望尝试并建立自己“零售”量化交易业务的人。
量化交易是在量化金融中一个非常复杂的领域。需要花费大量时间去学习必要的知识来通过相应的面试去获取职位或者构建你自己的交易策略。不仅如此,它还需要广泛的编程专业知识,至少你需要掌握像MATLAB,R或Python这样的编程语言。然而随着策略的交易频率不断增高,将更加依赖技术层面。因此熟悉C/C++是至关重要的。
量化交易系统由四个主要部分组成:
1、策略识别-找到策略,利用优势,决定交易频率
2、策略回测-获取数据,分析策略表现,修正偏差
3、执行系统-对接经济公司,实习自动化交易,将交易成本降至最低
4、风险管理-最佳资本配置,“下注规模”/凯利准则,交易心理
我们先来看看如何确定交易策略。
一、策略识别
所有的量化交易过程在研究之初就开始了。这个研究过程包括找到一个策略,看看这个策略是否适合你可能运行的其他策略,获得一些必要的数据测试这个策略,试图去优化这个策略以获得更高的回报/更低的风险。如果以“零售”交易者的身份运行策略,你需要考虑自己的资本需求以及影响策略的任何交易成本。
与普遍看法相反的是,事实上很容易通过公共渠道找到有利可图的策略。学术界定期公布理论交易结果(尽管大部分是交易成本总额)。量化交易博客会详细地讨论策略。交易期刊会概述一些基金采用的策略。
你可能会质疑为什么个人和公司热衷于讨论他们盈利的策略,尤其是他们明明知道其他人“挤占交易”可能会阻止策略长期有效。原因在于他们实际上不会经常讨论具体的参数和他们实施策略的调整方法。这些优化是将相对平庸的策略转变为高利润策略的关键。事实上,创造自己独特策略的最佳方法之一是去找到相似的方法,然后按照你自己优化的程序执行。
这里一个小列表列出了开始寻找策略想法的地方:
社会科学研究网-www.ssrn.com
arXiv量化金融-arxiv.org/archive/q-fin
寻找Alpha-www.seekingalpha.com
精英交易员-www.elitetrader,com
核能学社-www.nuclearphynance.com
量化-quantivity.wordpress.com
你将会看到的许多策略都属于均值回归和趋势跟踪/动量的种类。均值回归试图利用这样一种事实,“价格序列”(如两个相关资产的价差)上的长期均值是存在的并且该均值短期的偏差最终会回落。动量策略试图去利用投资者心理和大型基金组织中在市场上出现的“搭便车”行为,来获得在一个方向上聚集动量,并跟随趋势直到它逆转。
量化交易中另一个很重要的方面是交易策略的频率。低频交易(LFT)通常指持有资产超过一个交易日的策略。相应的,高频交易(HFT)通常指当天持有资产的策略。超高频交易(UHFT)指的是持有资产在秒和毫秒级别的策略。作为一名自营交易从业者,高频交易与超高频交易的策略是可行的,但是必须对交易的“技术栈”和订单动态有充分的掌握。我们不在这篇介绍性文章中作详细地讨论这些内容。
一旦一个策略或者一组策略被确定,那就需要根据历史数据对其盈利能力进行测试。这属于回测的领域。
二、策略回测
回测的目标是提供证据证明当应用历史和样本外的数据的时候,通过上文过程确定的策略是能够盈利的。这设定一个预期,在“真实世界”中策略的表现如何。然而,由于各种原因,回测并不能保证真实世界的成功。这可能是量化交易中最精细的部分,因为回测包含了许多偏差,必须仔细考虑并尽可能地消除这些偏差。我们将讨论几种常见的偏差,包括预测偏差,幸存偏差,优化偏差(也被称为“数据窥视”偏差)。回测中其他的重要领域包括历史数据的可用性和纯净度,考虑现实的交易成本以及基于一个强大的回测平台。我们将在执行系统部分下进一步讨论交易成本。
一旦确定了一个策略,就有必要获取历史数据,通过这些历史数据去执行测试,当然这些数据可能还需要完善。所有的的资产类别中都有大量的数据供应商。他们的成本通常随着数据的质量,深度和及时性而不断变化。刚起步的量化交易员(至少是零售级别的)的传统起点是使用雅虎财经上的免费数据库。在这里我不想把重点放在数据提供方,而是把精力集中于处理历史数据集时的一般性问题。
历史数据的主要关注点包括准确性/纯净度,幸存偏差和调整如股息和股票分割的公司行为。
准确性与数据的整体质量有关—是否包括任何错误。错误有时很容易识别,例如使用窄带滤波器,它将找出时间序列数据中不正确的“尖峰”并对其进行修正。另一些时候,错误很难被发现。通常需要有两个或者更多个数据提供方相互对照检查他们的所有数据。
幸存偏差通常是免费或者廉价数据的“特性”。具有幸存偏差的数据集意味着它不在包含不再进行交易的资产。就权益类资产而言,它意味着退市/破产的股票。这种偏差意味着,在这样一个数据集上测试的任何股票交易策略都可能比“现实世界”中表现得更好,因为历史“赢家”已经被预选。
公司行为包括公司执行的“物流”活动,这些活动通常会导致原材料价格的阶跃函数变化,同时不应该包括返还价格的计算。股息和股票分割的调整是常见的罪魁祸首。在每个这样的行为发生后都需要执行一系列的反向调整。人们必须十分小心,不要把股票分割和真正的收益调整混淆。许多交易者已经被此类公司行为所迷惑。
为了执行回测程序,必须使用软件平台。你可以选择使用专用回测软件(如贸易站),数字平台(如Excel或MATLAB)或利用编程语言(如Python或C++)完全定制化策略。我不过多地在贸易站(或类似的平台),Excel或MATLAB上描述,因为我倾向于创建一个完整的内部技术堆栈(原因如下)。这样做的好处是,即使使用非常先进的统计策略,回测软件和执行系统也可以紧密集成。特别对于HFT策略来说,使用定制化策略是至关重要的。
回测一个系统时,必须能够量化它的表现。量化策略的“行业标准”是最大回撤还有夏普比率。最大回撤是特定时期(通常是每年)账户权益曲线中最大的峰谷跌幅。它通常用百分比来表示。由于一些统计因素,LFT策略将比HFT有更大的最大回撤率。历史回撤将显示过去的最大回撤,这可以很好地指示这个策略未来的回撤表现。第二个衡量标准是夏普比率,它被定义为超额回报的平均值除以这些超额回报的标准差。在这里,超额回报是指策略高于预期的回报基准(如S&P500或3个月国库券)。请注意,年度回报率通常不是一个常用的衡量标准,因为它没有考虑策略的波动性(不同于夏普比率)。
一旦一个策略通过了回测并且别认为是没有偏差的(尽可能的!),同时有较好的夏普比率和最小的回撤率,那么就是时候建立一个执行系统了。
三、执行系统
执行系统的意思是策略生成的一系列交易的发送和经纪商的执行。尽管交易的生成可以是半自动化或者甚至全自动化的,但是执行机制可以是手动的,半手动的(即“一次点击”)或者全自动化的。对于LFT策略,手动和半手动技术很常见。对于HFT战略,有必要创建一个全自动的执行机制,该机制通常与交易产生装置紧密结合(由于策略与技术的相互依赖)。
创建执行系统时考虑的关键因素是与经纪商的对接,最小化交易成本(包括佣金,滑点和差价)和回测表现的实时系统的性能差异。
有许多方法可以与经纪公司联系。从直接打电话给你的经纪人,到全自动高性能应用编程接口(API),不一而足。理想情况下,您希望尽可能地进行自动化交易的执行。这让你可以集中精力去做进一步的研究,也让你可以运行多种策略,甚至更高频率的策略(事实上,没有自动执行,HFT基本上是不可能的)。上面概述的通用回测软件,如MATLAB,Excel和贸易站,很适合应用于较低频率和更简单的策略。然而,为了实现真正的HFT,有必要构建一个用高性能语言(如C++)编写的内部执行系统。有一个轶事,在我以前受雇的基金中,我们有一个10分钟的“交易循环”,在这个循环中,我们每10分钟下载一次新的市场数据,然后在相同的时间框架内利用这些数据信息进行交易。这使用的是优化的Python脚本。对于任何接近分钟或秒频率的数据,我相信C/C++会更理想。
在大型基金中,优化执行通常不是量化交易者的职责。然而,在较小的公司或者HFT公司,交易者是执行者,因此通常需要更广泛的能力。如果你想被基金雇佣,请记住这一点。你的编程技能和你的统计学,计量经济学才华一样重要。
另一个属于执行范畴的主要问题是交易成本最小化。交易成本通常有三个组成部分:佣金(或税),即由经纪公司,交易所和证券交易委员会(或类似的政府监管机构)收取的费用。滑点,这是你想要你的订单完成的价格和实际完成之间的差异;价差,即交易证券的出价/要价之间的差额。请注意,价差不是恒定的,取决于市场中当前的流动性(即买卖订单的可成交性)。
交易成本可以区分拥有良好夏普比率的高利润策略和夏普比率差的低利润策略。不过从回测中正确预测交易成本可能是一个挑战。基于策略的交易频率,你需要找到历史交易数据,其中包括买卖价格的数据。出于这些原因,整个量化团队致力于优化大型基金的执行。考虑一个基金抛售大量交易的场景(这样做的原因多种多样!)。通过向市场“倾销”如此多的股票,他们将迅速压低价格,你可能无法获得最佳的执行点位。因此,将订单“滴进”市场的算法是存在的,尽管这样基金有滑点的风险。除此之外,其他策略“掠夺”这些资源大多是低效的。这就是基金结构套利的力量。
执行系统的最后一个主要问题是策略表现和回测表现之间的差异。这可能有多种原因。在讨论回测时,我们已经深入讨论了预测偏差和优化偏差。然而,有些策略在部署前不容易测试这些偏差。这主要发生在HFT。执行系统和交易策略本身可能存在缺陷,这些缺陷不会在回测实验中出现,但会在实时交易中出现。在你的策略部署之后,市场可能会受到政权的更迭而发生改变。新的监管环境,不断变化的投资者情绪和宏观经济现象都可能导致市场行为变化,从而影响你策略的盈利能力。
四、风险管理
量化交易难题的最后一部分是风险管理部分。“风险”包括我们之前讨论过的所有偏差。它包括技术风险,例如位于交易所的服务器突然出现硬件故障。它包括经纪风险,它包括经纪风险,例如经纪人破产(不像听起来的那么疯狂,不过尝试想一下最近全球曼氏金融的恐慌!)。简而言之,它涵盖了几乎所有可能干扰交易实施的内容,而它的来源多种多样。我们的整本书都致力于量化策略的风险管理,所以我不会试图在这里阐述所有可能的风险来源。
风险管理也包括所谓的最佳资本配置,它是投资组合理论的一个分支。它意味着将资本分配给一系列不同的策略并按照这些策略进行交易。这是一个十分依赖数学的复杂领域。在行业里,最佳资本配置和杠杆相关的策略被称为凯利准则。由于这是一篇介绍性文章,我就不详述它的计算了。凯利准则对收益的统计性质做了一些假设,这些假设在金融市场中并不是经常成立的,所以交易者在执行时往往持保守态度。
风险管理的另一个关键组成部分是处理自己的心态。交易中有许多认知偏差。不可否认的是,不考虑整体策略的话而只考虑算法交易的话,那就没有这么多问题了。一个常见的偏差是损失厌恶,亏损的头寸不会因为你意识到损失的痛苦而消失。类似地,可能因为害怕失去已获得利润的恐惧太大,盈利可能被拿的太早。另一种常见的偏见成为近期偏见。当交易者过于强调近期事件而不是长期事件时,这一点就会显现出来。当然还有一对典型的情感偏见—恐惧和贪婪。这些通常会导致杠杆作用不足或者过度,从而导致急速亏损(即账户权益变为零或更糟)或利润减少。
总结
可以看出,量化交易是一个极其复杂但非常有趣的量化金融领域。我已经在这篇文章中概述了这个主题的表面性问题,而且已经写得非常长了!整本书和论文都写到了那些我只用一两句带过的问题。因此,在申请量化基金交易工作之前,有必要进行大量的基础研究。至少你需要有广泛的统计学和计量经济学背景,并对如MATLAB,Python或R等编程语言有丰富的操作经验。对于需要更高频率的复杂策略,你的技能还应该包括Linux内核修改,C/C++,汇编编程和网络延迟优化。
如果你有兴趣尝试创建自己的算法交易策略,我的第一个建议是要擅长编程。我倾向于尽可能多地自己构建数据抓取器,策略回测器和执行系统。如果你的资本已经投入到市场中,是不是当你已经全面测试了你的系统,并且意识到他的陷阱和特殊问题时你会睡得更好?将这些外包给供应商,虽然在短期内有可能节省时间,但是从长期来看可能会非常昂贵。
-----------------------------------------------------------------------
推荐阅读: