「量化交易」是一门汇集数学知识与程式语言的学问,一般人或许会认为那是相关领域专家才能胜任的工作。但此书作者告诉大家并不尽然,这是他身为这领域专家,在历经数次成功与失败的实务操作后所下的结论。在从事量化交易前,需要先厘清一非常重要的观念,那就是这不是能一夕致富的行业,不然到头来只会落得血本无归的下场。积极谨慎的个性与耐心,是做这行业人最普遍具有的特质。
随着网络资源搜索的盛行,大家不难在许多学术文章或是相关网页论坛里,找寻到许多适合自己偏好取向的交易策略。因此大家关心的是如何分辨这些交易策略的好坏,以及避免在这过程中犯下一些常见的错误,例如存活偏误(survivorship bias)、前视偏误(look-ahead bias)、资料窥探偏误(Data-snooping bias)以及对交易成本的考量等,以下一一为大家介绍。
下图为计量交易的流程.首先,交易者会从历史资料或过去经验中得到对于市场的知识,将知识量化后发展出交易策略,并使用策略对过去历史资料做回测,产生对此策略的评估报告.这样做的好处是,可以确保执行者对策略完全了解,另一方面,若在回测中发现不够好的部分,也可以及时修正与改进.最后,此策略就可以进入实际操作的阶段.而从发展策略到回测产生评估报告的过程,就是传统投资方式与量化交易最大的差异处。
关于回测的各种知识
首先,是进行回测的平台,以下介绍几个常用的回测平台:
第一个常用的回测平台是Excel 资料的输入、输出都可在同一张表格上完成,交易人可以轻易地做比较与判读,但Excel的缺点就是只适合用来处理较简单的模型。第二个常见的交易平台为Matlab Matlab的优点如以下这张图所示,它可以轻易的从外部的资料库汇入资料,并有丰富的数学及统计工具帮助投资者建立较复杂的策略和处理大量资料,但Matlab的缺点是测试完策略后,至少到目前在一些的情形下,必须从另外的交易平台做下单。
注:与Matlab较为相似的平台,如「R」、「Python」也是一般常见的使用工具,各有其优缺点。
第三个是在国内较为常见的交易平台Multicharts 除了适用多种标的资产的交易如股票、期货、外汇等项目外,简易的操作方式与其所具备的许多服务功能,像是图表交易、下单匣、交易追踪视窗、市场深度视窗、自动化进场/出场与商品代码转换等特色所著称。
另外,在国外更常被使用的交易平台为Quantopian、Quantconnect、Portfolio123,此三个平台各自拥有相当多使用者,里面有许多社群分享的交易策略,资源十分丰富。许多量化交易的前置作业,如选定标的资产,下载历史资料等都能在这些平台上轻松完成,各网站的资料汇整连接的都十分完善,使用者只需专注在策略上的设计即可。
选定交易平台后,接着是寻找及使用历史资料
交易人可以在网络上寻找到大量的免费资料来源,但在使用上述资料时,必须注意几个要点,避免错误触发交易信号。
1.标的是否有股票分割以及发股利的情况
以(IGE) ETF做个例子,下表为/6/7-10的资料,在8-9间,该ETF做了一次2 :1的股票分割,表格中可以发现两天的收盘价差将近一倍,这时就需对分割前的收盘价做调整。也就是必须将收盘价除以二。
而下面表格则是-07年发放股利的状况,必须针对每一次股利发放计算调整的乘数。乘数计算方式为( Prev. Close – Dividend ) / Prev. Close。
根据上述的调整方式,得到下表为调整完股票分割和股利发放后的收盘价,以此收盘价进行回测,才能得到正确的报酬。
2.标的的存活偏误(Survivorship Bias)
做回测的时候,可能会面临一个情况是部分标的已经下市无法得到资料,而未将这些资料放进历史资料中,而得到有所偏差的报酬。举个虚拟的交易策略为例,买进当年表现最差股票并持有一年。
由上面的两个例子,可以得知交易人在进行回测使用历史资料时必须非常小心,以免产生有所偏差的结果。
而如何公平比较不同的策略和不同交易人的结果,Sharpe Ratio是一个公认较为适合的指标,Sharpe Ratio衡量的是承担每单位风险所得到的超额报酬。
3.前视偏误(Look-ahead bias )
大家使用交易完成之后的资讯会导致前视偏误,比如以在「当日最低价的1%之内买入股票」的策略就有前视偏误,因为在收盘之前是无法得知当日股票的最低价格,使用有落后期数的历史数据可以避免这一偏误的产生。大家能依下列方式检验是否存在前视偏误:
第一步骤是使用标的物的所有历史数据运行程式,将推荐买卖仓位存入一个文件A;第二步骤是移除最近N天(10天或100天)的历史数据后,再次运行程式,将推荐买卖的仓位存入另一个文件B;第三步骤是不考虑文件A的最后N行,比对文件A和文件B的买卖仓位是否相同?如果仓位不一致,则说明移除的N天数据参与了文件A的运算,故回测程式有前视偏误的存在。
4.数据窥探偏误(Data-snooping Bias)
数据窥探偏误指的是大家过度优化参数而夸大了回测绩效,可分为参数优化和非参数优化两种。参数优化是指像进出场门槛值,持有期限和回测期限等;非参数优化是指利用开盘价或是收盘价来交易,是否持有过夜,交易标的为大型股或是小型股等。这些类型的选择往往可以优化回测绩效,但对未来绩效并不能保证会有好的结果。有三种方法来降低这种偏差:
第一种最常见的方法是增加大家的样本量;第二种是样本外回测,样本外回测指的是将历史数据分成两部分,用第一部分来优化参数,大家称为训练集(training set),用第二部分来做样本外测试,大家称为测试集(test set)。
从测试集的损益图可以看出策略的绩效很好,这个配对交易策略在训练集和测试集上的Sharpe ratio都很高,因此,可认为此策略不存在数据窥探偏误。如果把进场门槛值改为1倍标准差,出场门槛值改为0.5倍标准差,即在组合价值向下跌破1倍标准差时,购买该价差组合,当组合价值上升超过0.5倍标准差时,做空该价差组合。在训练集上的Sharpe ratio会上升至2.9,测试集的Sharpe ratio会上升至2.1。显然,后面这组门槛值更好,但并不是所有训练集上的参数优化都会提高测试集上的绩效。这时应该选择使得训练集和测试集上的绩效都较好(很可能不是最好)的参数。最后还要检测是否存在前视偏误。
第三种降低数据窥探偏误的方法为敏感度分析。敏感度分析是指大家在模型参数优化、通过测试集的检验之后,透过改变这些参数,来观察模型在训练集和测试集上的绩效变化。如果绩效变化很大,或者说在参数取任何其它值时绩效都不佳,模型很可能具有数据窥探偏误。
5.交易成本考量
例2:考虑交易成本的均值回归模型
一个简单的交易策略:以1995年到这段期间,大家以收盘价买入前一交易日日收益最差的股票,卖空前一交易日日收益最好的股票。若不考虑交易成本,策略的Sharpe ratio等于0.2510,而考虑交易成本的Sharpe ratio等于-3.1884。因此这个策略是无利可图的。
策略的改进
首先大家需要注意的是所有策略的改进都要有经济学原理或者市场的现象作支撑,而不是乱套入些反覆试验的方法,否则会产生数据迁就偏差。
例3:对例2策略的微小改动
对策略进行如下改动:在市场开盘而非收盘时进行交易,不考虑交易成本的Sharpe ratio会增加到4.43;而考虑交易成本的Sharpe ratio会变为0.78,可以发现这个策略仍有利可图。