量化交易入门指南
在这篇文章中, 我将向大家介绍一些量化交易系统的基本概念。这篇文章希望能为两类读者服务。第一类是想在基金公司做量化交易员工作的人。第二类是想尝试建立自己 "个人" 算法交易的。
量化交易是一个极其复杂的量化金融领域。要获得必要的知识, 通过基金公司的面试或构建自己的交易策略, 可能需要相当长的时间。不仅如此, 它还需要广泛的编程专业知识, 至少在诸如 MATLAB、R 或 Python 这样的语言中。然而, 随着策略的交易频率的提高, 技术方面变得更加相关。因此, 熟悉 c/c++ 将是至关重要的。
量化交易系统由四个主要组成部分组成:
•策略识别-寻找策略,利用优势, 决定交易频率
•策略回测-获取数据,分析策略性能和消除偏差
•执行系统-连接到经纪商, 自动交易和最小交易成本
•风险管理-最佳资本配置, "下注大小"/凯利标准和交易心理学
我们将首先看看如何确定交易策略。
测略识别
所有的量化交易过程都是从最初的研究阶段开始的。这个研究过程包括寻找策略, 看看这个策略是否适合你可能正在运行的其他策略的组合, 获得必要的数据来测试策略, 并试图优化策略, 以提高回报率或降低风险。如果是个人交易者,您还将需要考虑您自己的资本需求和交易成本对策略的影响。
与大众的看法相反, 通过各种公共渠道找到有利可图的策略实际上是非常简单的。学术界定期公布理论交易结果 (尽管主要是交易成本的总额)。量化金融博客将详细讨论策略。一些期刊会刊登基金所采用的一些策略。
你可能会质疑为什么个人和公司热衷于讨论他们的盈利策略, 特别是当他们知道其他人都去用他们的策略的话,从策略的长久有效性来看可能会阻碍策略运行。原因在于他们不会经常讨论他们所执行的精确参数和调整方法。这些优化是把一个相对平庸的战略变成一个高利润的策略的关键。事实上, 创建自己独特策略的最好方法之一就是找到类似的方法, 然后执行您自己的优化过程。
您看到的许多策略都属于"均值反转"和"趋势跟踪/动量"类别。一个均值反转策略是试图利用一个长期的平均值在一个"价格序列" (如两个相关资产之间的差价) 存在的事实, 并从这个平均值的短期偏离最终将回归。动量策略试图利用投资者心理和大型基金结构, 在市场趋势上"搭便车", 这样可以在一个方向上积聚动量, 并跟随趋势, 直到反转。
量化交易的另一个极其重要的方面是交易策略的频率。低频交易(LFT)通常指任何持有资产超过一个交易日的策略。相应地, 高频交易(HFT)通常指的是日内持有资产的策略。超高频交易 (UHFT) 是指以秒和毫秒为单位持有资产的策略。
一旦确定了一个策略或一套策略,就需要对策略的盈利能力进行历史数据的测试。这是回测的领域。
策略回测
回测的目的是证明通过上述过程确定的策略在应用于历史和样本外数据时都是盈利的。这将对策略在"真实世界"中的执行情况进行预期。然而, 由于种种原因, 回测并不是成功的保证。它可能是量化交易中最微妙的领域, 因为它存在大量的偏差, 必须仔细考虑和尽可能消除。我们将讨论常见的偏差类型, 包括前视偏差, 生存偏差和优化偏差(也称为"数据窥探 "偏差)。回测中的其他重要领域包括历史数据的可用性和精准度、实际交易成本以及取决于一个牢靠的回测平台。我们将在下面的执行系统部分进一步讨论交易成本。
一旦确定了战略, 就有必要取得历史数据, 以便进行测试, 也许还要改进。在所有资产类别中都有大量的数据供应商。它们的费用一般是随着数据的质量、深度和及时性而增加的。一般量化交易初学者是从使用雅虎金融的免费数据开始的。我不会在这里过多地纠结于提供商, 而是想在处理历史数据时集中讨论一些常见问题。
主要的历史数据问题包括准确性, 生存偏差和上市公司的一些调整动作,如股息和股票分割:
•准确性与数据的总体质量有关-无论它是否包含错误。有时, 一些错误可能很容易被识别, 例如使用峰值过滤, 它会在时序数据中挑出错误的"峰值 ", 并对其进行更正。在其他时候, 他们可能很难被发现。通常需要有两个或多个数据源来对其所有数据进行相互比照检查。
•生存偏差通常是免费或廉价数据的一个"特性"。存在生存偏差的数据意味着它不包含不再进行交易的资产。就股票而言, 这意味着被摘牌/破产股票。这种偏差意味着, 在这样的数据上测试的任何股票交易策略都可能比在"真实世界 "中的表现更好, 因为历史"赢家"已经被预选了。
•公司行为通常导致价格阶梯式变化, 不应包括在计算价格中。股息和股票分割的调整是常见的罪魁祸首。遇到这些都需要执行一个称为"向后调整"的过程。一个人必须非常小心, 不要搞混股票分割与真正的回报调整。
为了进行回测, 必须使用软件平台。您可以选择专用的测试软件(如 Tradestation)、数字平台(如 Excel 或 MATLAB) 或在编程语言 (如 Python 或 c++) 中的完整自定义实现。我不会过多地纠结于Tradestation (或类似的)、Excel 或 MATLAB, 因为我相信创建一个完整的in-house技术栈 (基于下面概述的原因)。这样做的好处之一是, 回测软件和执行系统可以紧密集成, 即使用非常先进的统计策略。尤其对于高频交易策略来说, 使用自定义实现是非常重要的。
当回测一个系统时, 你必须能够量化它的表现。量化策略的"行业标准"是最大回撤和夏普率。最大回撤特征是在特定时段(通常是年度)的账户净值曲线中最大的峰谷比。这是最常引用的百分比。由于一些统计因素, 低频交易策略的最大回撤比高频交易策略要大。历史回测可以显示过去的最大回撤, 这是这个策略未来回撤的一个很好的参考。第二个指标是夏普比率, 原本的定义为超额收益的平均值除以那些超额收益的标准差。在这里, 超额收益指的是策略的回报率高于预先设定的基准, 如标普500或3月期国库券。请注意, 由于不考虑策略的波动性 (不像夏普比率), 通常不会用年度回报率。
一旦策略回测成功并消除了偏差(在尽可能多的情况下), 有一个好的夏普比率和最小的回撤, 现在是建立一个执行系统的时候了。
执行系统
执行系统是由策略生成的交易,传送到经纪商,然后由经纪商执行交易。尽管交易的生成可以是半自动化甚至是全自动化的, 执行机制可以是手动的, 半手动(即"点击一下按键")或完全自动化。对于低频交易策略, 手动和半手动是比较常见的。对于高频交易策略, 有必要建立一个完全自动化的执行机制, 这将经常与交易生成器紧密结合(由于策略和技术的相互依存)。
创建执行系统时的主要考虑的因素是经纪商的界面、最小的交易成本(包括佣金、滑点和价差) 以及实时系统的性能与测试性能的差异。
有许多方法可以与经纪公司进行交互。它们包括打电话给你的经纪到完全自动化的高性能应用程序编程接口 (API)。理想情况下, 您希望尽可能多地自动执行您的交易。这可以让你专注于进一步的研究, 以及允许你运行多个策略甚至更高频率的策略 (事实上, 如果没有自动执行, 高频交易基本上是不可能的)。上述常用的回测软件, 如 MATLAB、Excel和Tradestation, 对低频、更简单的策略都很有好处。然而, 有必要构建一个in-house的执行系统, 以高性能的语言编写, 如 c++, 以做任何真正的高频交易。
在较大的基金公司中,优化交易执行系统往往不是量化交易员的工作领域。然而, 在较小的公司或高频交易公司, 交易员是交易的执行者, 因此更广泛的技能往往是可取的。如果你想受雇于基金公司, 请记住这一点。比起统计学和经济学知识,你的编程技能将是同样重要的!
另一个重大问题是降低交易成本。交易成本一般有三部分组成: 佣金 (或税), 即经纪、交易所和SEC (或类似的政府监管机构)收取的费用;滑点, 这是你的想要成交的价位和实际成交的价位的差异;价差, 这是证券交易的卖价/买价之间的差额。请注意, 这种价差不是恒定的, 而是取决于市场上当前的流动性 (即买入/卖出订单的可得性)。
交易成本可以使一个非常有利可图的策略与一个良好的夏普比率和极端无利可图的策略与可怕的夏普比率之间的差异。从测试中正确预测交易成本可能是一个挑战。根据策略的频率, 您将需要访问历史汇率数据, 这将包括用于出价/询价的tick数据。由于这些原因, 整个宽客团队致力于在较大的基金中优化执行。考虑一下一个基金需要大量交易的情况 (其中的原因是多种多样的)。通过 "倾销 " 这么多的股票到市场, 他们将迅速压低价格, 并可能无法获得最佳的执行。因此, 在市场上存在着 "滴灌" 订单的算法, 尽管该基金有着滑点的风险。这是基金结构套利的领域。
执行系统的最后一个主要问题是策略性能与回测性能的差异。这可能发生的原因有很多。在考虑回测时, 我们已经讨论了前视偏差和最优化偏差。但是, 有些策略在部署之前不容易测试这些偏差。这主要发生在高频交易。在执行系统中可能会有错误,可能没出现在测试上, 但在实时交易中出现了。在你的战略部署之后, 市场可能会受到政权更迭的影响。新的监管环境,投资者情绪的改变和宏观经济现象, 都可能导致市场行为的差异, 从而使你的策略获利。
风险管理
量化交易的难题的最后部分是风险管理的过程。"风险"包括前面讨论过的所有偏见。它包括技术风险, 比如交换服务器突然出现硬盘故障。它包括经纪风险, 例如经纪破产。简而言之, 它涵盖了几乎所有可能干扰交易实施的事情, 其中有许多来源。
风险管理还包括所谓的最优资本配置, 这是投资组合理论的一个分支。这是将资本分配给一套不同策略和这些策略中的交易的手段。它是一个复杂的领域, 依赖于一些特殊的数学。最优资本配置和策略杠杆作用的行业标准称为凯利标准。由于这是一篇介绍性的文章, 我不会详述它的计算。凯利标准对收益的统计性质做了一些假设, 在金融市场中通常不成立, 因此交易者在实施时往往是保守的。
风险管理的另一个关键因素是处理自己的心理状况。有许多认知偏差可以在交易中蔓延。虽然不可否认,如果这个策略是独立运行的,算法交易中很少会发生!一个常见的偏见是损失的厌恶, 破掉的点位将不会被关闭, 由于不想接受损失的痛苦。同样地, 利润也会过早地被实现, 因为不想失去已经到口袋的利润
另一个常见的偏见被称为近因偏见。这体现在交易员过分强调近期事件, 而非长期。当然, 还有经典的对情感的偏见--恐惧和贪婪。这些往往会导致或的过度, 这可能会导致 (即账户净值走向零或更糟!) 或利润减少。
总结
可以看出, 量化交易是一个极其复杂、虽然非常有趣的量化金融领域。因此, 在申请量化基金交易工作之前, 有必要进行大量的基础研究。至少你将需要一个广泛的背景, 在统计和计量经济学, 有很多的实际经验, 通过编程语言, 如 MATLAB, Python 或 R。对于更高频率的更复杂的策略, 您的技能可能要包括 Linux 内核修改、c/c++、程序集编程和网络延迟优化。