所有交易策略都会遇到偶尔的亏损,技术上称为回撤(Drawdown)。回撤可能持续几分钟到几年不等。要从量化交易业务中获利,必须以限制回撤到可承受水平的方式来管理风险,同时又要能够使用最优杠杆来实现财富的最大增长。此外,如果你有多个策略,还需要找到在它们之间最优分配资金的方法,以最大化整体的风险调整后收益(Risk-Adjusted Return)。
资金的最优分配和杠杆的最优使用,以在风险管理和最大增长之间找到恰当平衡,是本章的重点。我们使用的核心工具是Kelly公式(Kelly Formula)。
最优资本配置与杠杆#
假设你计划交易多个策略,每个策略都有自己的预期收益和标准差。应该如何在这些策略之间以最优方式分配资金?此外,整体杠杆(Portfolio Leverage,即投资组合规模与账户权益的比率)应该是多少?我在前言中提到的Edward Thorp博士在他的一篇论文中就此主题写了一篇优秀的阐述文章(Thorp, 1997),本章将紧密跟随他的讨论。(Thorp博士的讨论以证券组合为中心,而我的讨论围绕策略组合构建。不过,数学原理几乎相同。)
每个优化问题都从目标开始。我们的目标是最大化长期财富——我认为这对个人投资者来说是毫无争议的。最大化长期财富等同于最大化投资组合的长期复合增长率(Compounded Growth Rate)$g$。这个目标隐含地意味着必须避免破产(Ruin),即因为亏损导致权益归零或变为负数。因为如果破产在某个时刻以非零概率可达,长期财富必然为零,长期增长率亦然。
(在所有讨论中,我假设我们将所有交易利润再投资,因此杠杆化的复合增长率才是最终重要的。)
我将做一个近似假设:每个交易策略$i$的收益概率分布是高斯分布(Gaussian Distribution),具有固定的均值$m_{i}$和标准差$s_{i}$。(这些收益率应该是扣除所有融资成本后的超额收益率。)这是金融中的常见近似,但可能相当不准确。金融市场中某些重大损失的发生频率远高于高斯分布所允许的水平(或者说,发生的幅度远大于高斯分布所允许的)。不过,就像其他科学和工程领域一样,金融研究也从最简单的模型和最粗糙的近似开始,我将在本章后面讨论如何修正这种不准确性。
让我们用列向量${\cal F} ^{\ast} = ( f_{1} ^{\ast}$ $f_{2} ^{*} , \ldots , f_{n} ^{*} ) ^{\mathrm{T}}$表示分配给每个策略的最优资金比例。这里T表示转置(Transpose)。
根据我们的优化目标和高斯假设,Thorp博士已经证明最优配置为
$$ F^{*} = C^{- 1} M $$这里,$C$是协方差矩阵(Covariance Matrix),矩阵元素$C_{i j}$是第$i$个和第$j$个策略收益的协方差,${}^{-1}$表示矩阵逆,$M = ( m_{1} , m_{2} , \ldots , m_{\bar{n}} ) ^{T}$是策略平均收益率的列向量。注意,这些收益率是单期的、简单的(非复合的)、无杠杆的收益率。例如,如果策略是做多1美元A股票同时做空1美元B股票,在一个时期内获得0.10美元利润,那么$m$就是0.05,无论账户权益是多少。
如果我们假设策略之间统计独立,协方差矩阵变成对角矩阵,对角元素等于各策略的方差。这导致一个特别简单的公式:
$$ f_{i} = m_{i} / s_{i} ^{2} $$这就是著名的Kelly公式(关于这个公式的许多有趣故事,参见Poundstone, 2005),应用于连续金融(Continuous Finance)而非离散结果的赌博。它给出了特定交易策略应使用的最优杠杆。
感兴趣的读者可以在本章末尾的附录中找到Kelly公式在简单单策略情况下的推导。
例5.1:一个有趣的谜题(或风险为何对你不利)*#
这里有一个可能让许多专业交易者困惑的小谜题。假设某只股票呈现真正的(几何)随机游走(Random Walk),即每分钟有50%的概率上涨1%或下跌1%。如果你买入这只股票,从长期来看(忽略融资成本),你最可能赚钱、赔钱还是不赚不赔?
大多数交易者会脱口而出"不赚不赔!",但这是错误的。正确答案是你将会赔钱,速率为每分钟0.005%(或0.5个基点)!这是因为对于几何随机游走,平均复合收益率不是短期(或单期)收益率$m$(此处为0),而是$g = m - s^{2} / 2$。这来自本章附录中给出的复合增长率$g(f)$的一般公式,将杠杆$f$设为1、无风险利率$r$设为0。这也与以下事实一致:一组数的几何平均值总是小于算术平均值(除非所有数相同,此时两者相等)。当我们假设收益率的算术平均值为零时,给出平均复合收益率的几何平均值必然为负数。
这里的教训是:风险总是降低长期增长率——因此风险管理至关重要!
*本例根据我博客文章"Maximizing Compounded Rate of Return"修正后转载,原文见epchan.blogspot.com/2006/10/maximizing-compounded-rate-of-return.html。
通常,由于参数估计的不确定性,也因为收益分布并不真正服从高斯分布,交易者倾向于将推荐的杠杆减半以求安全。这被称为"半Kelly"(Half-Kelly)下注。
如果你有一个零售交易账户,你的最大整体杠杆$l$将被限制为2或4,取决于你是隔夜持仓还是仅日内持仓。在这种情况下,你需要将每个$f_{i}$按相同的比例缩小 $l / ( | f_{1} | + | f_{2} | +$ $\cdots + | f_{n} | )$,其中$| f_{1} | + | f_{2} | + \cdot \cdot \cdot + | f_{n} |$是投资组合的无限制总杠杆。这里,我们忽略了个别策略可能持有相互抵消的头寸的可能性(例如多头和空头头寸分别与短期和长期国债对冲),这可能允许你持有比该公式建议更高的杠杆。
我已说明,采用这种资本配置和杠杆将使我们最大化权益的长期复合增长率。那么这个最大复合增长率是多少呢?结果是
$$ g = r + S^{2} / 2 $$其中$S$正是你投资组合的夏普比率(Sharpe Ratio)!正如我在第2章中提到的,投资组合(或策略)的夏普比率越高,权益(或财富)的最大增长率就越高,前提是你使用Kelly公式推荐的最优杠杆。这就是这一事实的简单数学表达。
例5.2:基于Kelly公式计算最优杠杆#
让我们看一个Kelly公式的实际应用。假设我们的投资组合只包含SPY的多头头寸,即跟踪标普500指数的交易所交易基金(ETF)。假设SPY的年化平均收益率为11.23%,年化标准差为16.91%,无风险利率为4%。因此,投资组合的年化平均超额收益率为7.231%,年化标准差为16.91%,夏普比率为0.4275。根据Kelly公式,最优杠杆为$f = 0 . 07231 / 0 . 1691^{2} = 2 . 528$。(注意一个有趣的细节:Kelly的$f$与时间尺度无关,所以实际上你是否将收益率和标准差年化并不重要,这与依赖时间尺度的夏普比率不同。)最后,年化复合杠杆增长率为13.14%,已包含融资成本。
你可以通过从Yahoo! Finance下载SPY日线价格并在电子表格上计算来验证这些数字。我于2007年12月29日做了这个计算,电子表格可在epchan.com/book/example62.xls获取。在H列中,我计算了SPY(调整后)收盘价的日收益率;在从H列开始的第3760行,我计算了SPY的(年化)平均收益率、SPY的标准差、投资组合的平均超额收益率、投资组合的夏普比率、Kelly杠杆以及复合增长率。
我们计算出的Kelly杠杆2.528意味着,对于这个策略,如果你有100,000美元现金用于投资,并且你确实相信收益和标准差的预期值,你应该借钱购买价值252,800美元的SPY。此外,预期你100,000美元投资的年化复合回报率为13.14%。
作为对比,让我们看看如果不使用杠杆投资会获得多少复合增长率(参见本章附录中的公式):$g = r + m - s^{2} / 2 = 0 . 1123 - ( 0 . 1691 ) ^{2} / 2 = 9 . 8$%。这才是仅用现金买入SPY的长期增长率,而不是11.23%的平均年收益率。
例5.3:使用Kelly公式计算最优配置#
我们选择三只行业特定的ETF,看看应该如何在它们之间分配资金以实现投资组合的最大增长率。这三只ETF是:OIH(石油服务)、RKH(地区银行)和RTH(零售)。日线价格从Yahoo! Finance下载并保存在epchan.com/book中,分别为OIH.xls、RKH.xls和RTH.xls。以下是用于读取这些文件并计算M、C和F*的MATLAB程序(epchan.com/book/example63.m)。
% make sure previously defined variables are erased.
clear;
% read a spreadsheet named "OIH.xls" into MATLAB.
[num1, txt1]=xlsread('OIH');
% the first column (starting from the second row) is
% the trading days in format mm/dd/yyyy.
tday1=txt1(2:end, 1);
tday1=datestr(datenum(tday1, 'mm/dd/yyyy'), 'yyyymm-dd'); % convert the format into yyyyMMdd.
% convert the date strings first into cell arrays
% and then into numeric format.
tday1=str2double(cellstr(tday1));
% the last column contains the adjusted close prices.
adjcls1=num1(:, end);
% read a spreadsheet named "RKH.xls" into MATLAB.
[num2, txt2]=xlsread('RKH');
% the first column (starting from the second row) is
% the trading days in format mm/dd/yyyy.
tday2=txt2(2:end, 1);
% convert the format into yyyyMMdd.
tday2=..
datestr(datenum(tday2, 'mm/dd/yyyy'), 'yyyMMdd');
% convert the date strings first into cell arrays and
% then into numeric format.
tday2=str2double(cellstr(tday2));
adjcls2=num2(:, end);
% read a spreadsheet named "RTH.xls" into MATLAB.
[num3, txt3]=xlsread('RTH');
% the first column (starting from the second row) is
% the trading days in format mm/dd/yyyy.
tday3=txt3(2:end, 1);% convert the format into yyyyMMdd.
tday3=..
datestr(datenum(tday3, 'mm/dd/yyyy'), 'yyyymmdd');
% convert the date strings first into cell arrays and
% then into numeric format.
tday3=str2double(cellstr(tday3));
adjcls3=num3(:, end);
% merge these data
tday=union(tday1, tday2);
tday=union(tday, tday3);
adjcls=NaN(length(tday), 3);
[foo idx1 idx]=intersect(tday1, tday);
adjcls(idx, 1)=adjcls1(idx1);
[foo idx2 idx]=intersect(tday2, tday);
adjcls(idx, 2)=adjcls2(idx2);
[foo idx3 idx]=intersect(tday3, tday);
adjcls(idx, 3)=adjcls3(idx3);
ret=(adjcls-lag1(adjcls))./lag1(adjcls); % returns
% days where any one return is missing
baddata=find(any(~isfinite(ret), 2));
% eliminate days where any one return is missing
ret(baddata, :) = [];
% excess returns: assume annualized risk free rate is 4%
excessRet=ret-repmat(0.04/252, size(ret));
% annualized mean excess returns
M=252*mean(excessRet, 1)'% M =
%
% 0.1396
% 0.0294
% -0.0073
C=252*cov(excessRet) % annualized covariance matrix
% C =
%
% 0.11090.02000.0183
% 0.02000.03720.0269
% 0.01830.02690.0420
F=inv(C)*M % Kelly optimal leverages% F =
%
% 1.2919
% 1.1723
% -1.4882注意RTH的平均超额收益率为负。鉴于此,Kelly公式建议我们做空RTH也就不足为奇了。
你可能会好奇使用这种最优配置产生的夏普比率和最大复合增长率是多少。结果表明,多策略高斯过程的最大增长率为
$$ g (F^{*}) = r + F^{* T} C F^{*} / 2 $$夏普比率为
$$ S = \sqrt{F^{* T} C F^{*}} $$以下是计算这两个量的MATLAB代码片段:
% Maximum annualized compounded growth rate
g=0.04+F'*C*F/2 % g =
%
% 0.1529
S=sqrt(F'*C*F) % Sharpe ratio of portfolio
% S =
%
% 0.4751注意投资组合的复合增长率为15.29%,高于任何单只股票可实现的最大增长率。(作为练习,你可以验证在三只股票中单期收益率最高的OIH,其复合增长率为12.78%。)
注意,遵循Kelly公式要求你在权益变化时持续调整资本配置以保持最优。基于SPY的例子(5.2),假设你遵循Kelly公式买入了价值252,800美元的投资组合。第二天,灾难降临,你在SPY上亏损了10%。所以现在你的投资组合只值227,520美元,你的权益现在只有74,720美元。你现在应该怎么做?Kelly准则将要求你立即将投资组合规模缩小到188,892美元。为什么?因为最优杠杆2.528乘以当前权益74,720美元等于188,892美元。
作为实际操作流程,这种资本配置的持续更新应至少在每个交易日结束时进行一次。除了更新资本配置外,还应通过重新计算最近的滞后平均收益率和标准差来定期更新$F^{*}$本身。回看期(Lookback Period)应该是多少?你需要多频繁地更新这些Kelly公式的输入参数?这取决于你策略的平均持仓周期。如果你的头寸只持有一天左右,那么根据经验法则,我建议使用六个月的回看期。使用相对较短的回看期的优势在于,你可以逐步减少对表现不佳策略的敞口。至于更新频率,一旦你编写了程序,每天更新$F^{*}$不会成为负担。
最后一点:有些策略每天产生数量不定的交易信号,这可能导致每天的头寸数量和总资金都不确定。在这种事先不知道资金量的情况下,如何使用Kelly公式来确定资金?仍然可以使用Kelly公式来确定最大头寸数量,从而确定允许的最大资金量。保持低于Kelly公式推荐的杠杆总是更安全的。
风险管理#
我们在上一节看到,Kelly公式不仅有助于最优资本配置和最优杠杆的确定,还有助于风险管理。事实上,SPY的例子(5.2)说明了Kelly公式会建议你在面临交易亏损时缩小投资组合规模。这种亏损时卖出(Selling at a Loss)是风险管理的常见结果,无论风险管理方案是否基于Kelly公式。
风险管理总是要求你在亏损时减少头寸,即使这意味着实现亏损。(硬币的另一面是,最优杠杆要求你在策略产生利润时增加头寸。)一些分析师认为,这种卖出行为是当一家对冲基金面临巨额亏损时,影响许多大型对冲基金的"金融传染"(Financial Contagion)的原因。
一个例子是2007年夏天的崩盘,在前文引用的Amir Khandani和Andrew Lo的文章"What Happened to the Quants in August 2007?"中有描述。2007年8月,在住房和抵押贷款违约危机的不祥阴云下,多家知名对冲基金经历了前所未有的损失,高盛(Goldman Sachs)的Global Alpha基金下跌了22.5%。数十亿美元在短短一周内蒸发。即使是Renaissance Technologies Corporation——可以说是有史以来最成功的量化对冲基金——也在8月上半月损失了8.7%,尽管后来大部分恢复了。不仅损失的规模令人震惊,其波及范围之广也引起了金融界的极大关注。最奇怪的是,这些基金中几乎没有持有任何抵押贷款支持证券(Mortgage-Backed Securities),而它表面上是这场恐慌的根本原因。因此,它成为对冲基金传播金融传染的经典案例。
这种传染的发生是因为一家对冲基金的大额亏损迫使其抛售一些大型头寸(无论这些头寸是否是造成亏损的头寸)。这种抛售导致证券价格下跌(对于空头头寸则上涨)。如果其他对冲基金持有类似的头寸,它们也会遭受大额亏损,导致其自身的风险管理系统抛售其头寸,如此循环。例如,在2007年夏天,一家大型对冲基金可能持有次级抵押贷款支持证券并在该领域遭受巨额亏损。风险管理随后要求其抛售投资组合中的流动性股票头寸,而这些头寸在当时可能尚未受到次贷危机的影响。由于这种股票头寸的抛售,其他不持有抵押贷款支持证券的统计套利对冲基金可能也会遭受巨大损失,进而抛售其股票。因此,抵押贷款支持证券市场的抛售突然变成了股票市场的抛售——这很好地诠释了"传染"的含义。
考虑到实现亏损的必要性,以及为紧密跟随Kelly公式而不断再平衡投资组合所需的交易规模和频率,大多数交易者倾向于使用半Kelly杠杆是可以理解的。较低的杠杆意味着风险管理所需的卖出规模更小。
有时,即使采用保守的半Kelly公式也可能过于激进,交易者可能希望通过额外的约束来进一步限制投资组合规模。这是因为,正如我之前指出的,Kelly公式应用于连续金融的前提是收益分布服从高斯分布。(金融是连续的,因为金融市场的下注结果落在连续的盈亏谱上,这与结果落在离散情况中的纸牌游戏不同。)但收益实际上并不服从高斯分布:大额损失发生的频率远高于漂亮的钟形曲线所预测的。一些人将收益的真实分布称为"肥尾"(Fat Tails)。这意味着远离均值的事件概率远高于高斯钟形曲线所允许的。这些极不可能发生的事件被Nassim Taleb称为"黑天鹅"(Black Swan)事件(见Taleb, 2007)。
为了处理超出高斯分布的极端事件,我们可以使用简单的回测技术来大致估计历史上最大的单期亏损。(这个时期可以是一周、一天或一小时。唯一的标准是你应该准备好在每个时期结束时根据Kelly公式再平衡投资组合。)你还应该心中有数,你愿意承受的最大单期权益回撤是多少。将可承受的最大单期权益回撤除以最大的历史亏损,就能告诉你即使是半Kelly杠杆是否也超出了你的承受范围。应使用的杠杆总是半Kelly杠杆和使用最坏历史亏损计算出的最大杠杆中较小的那个。在上一节的标普500指数例子中,最大的历史单日亏损约为20.47%,发生在1987年10月19日——"黑色星期一"(Black Monday)。如果你只能承受20%的单日权益回撤,那么你能应用的最大杠杆约为1。同时,半Kelly推荐的杠杆为1.26。因此,在这种情况下,即使是半Kelly杠杆也不够保守,无法在黑色星期一中幸存。
风险管理中真正可怕的情景是那些历史上从未发生过的。正如哲学家Ludwig Wittgenstein所言:"对于不可言说之事,必须保持沉默"——对于这些不可知的事,理论模型适当地保持沉默。
止损是否是良好的风险管理实践?#
一些交易者认为,良好的风险管理意味着对每笔交易设置止损(Stop Loss);即如果头寸亏损达到某个百分比,交易者将退出头寸。人们普遍认为设置止损将防止投资组合遭受灾难性损失,但这是一个常见的谬误。当灾难性事件发生时,证券价格将不连续地下跌,因此退出头寸的止损单只能在远低于事件发生前的价格成交。所以,通过退出头寸,我们实际上是在实现灾难性损失,而不是避免它。要使止损有益,我们必须相信我们处于动量(Momentum)或趋势(Trending)行情中。换句话说,我们必须相信在我们交易的预期持有期内价格将进一步恶化。否则,如果市场在该持有期内是均值回归(Mean Reverting)的,只要我们没有过早退出头寸,最终将收回我们的损失。
当然,判断自己是处于动量行情(此时止损有益)还是均值回归行情(此时止损有害)并不容易。我自己的观察是,当价格波动由新闻或其他基本面原因(例如公司收入恶化)引起时,人们很可能处于动量行情中,此时不应该"站在货运列车前面"(交易者的行话)。例如,如果对公司基本面的分析揭示其目前被高估,其股价可能会逐渐下跌(至少相对于市场指数),以达到一个新的、更低的均衡价格。只要公司的基本面经济状况不改变,这种向更低均衡价格的运动就是不可逆的。然而,当证券价格在没有明显新闻或原因的情况下剧烈波动时,这种波动很可能是流动性事件(Liquidity Event)的结果——例如,证券的主要持有者突然因自身特殊原因需要清算大量头寸,或主要投机者突然决定回补其空头头寸。这些流动性事件持续时间相对较短,价格很可能会回归到之前的水平。
我将在第7章中更详细地讨论均值回归策略与动量策略的适当退出策略。
除了头寸风险(由市场风险和特定风险组成)外,还有其他形式的风险需要考虑:模型风险(Model Risk)、软件风险(Software Risk)和自然灾害风险(Natural Disaster Risk),按可能性递减排列。
模型风险简单来说是指交易亏损不是由于市场的统计波动,而是由于交易模型本身是错误的。它可能因为许多原因而错误,其中一些在第3章中有详细介绍:数据窥探偏差(Data-Snooping Bias)、幸存者偏差(Survivorship Bias)等。为了消除回测程序中所有这些不同的偏差和错误,有一个协作者或顾问独立地复制你的回测结果以确保其有效性是非常有帮助的。这种复制结果的需要在科学研究中是常规做法,在金融研究中同样不可或缺。
模型风险也可能不是来自你模型或回测程序中的任何偏差或错误,而是来自其他机构交易者都在运行与你相同策略的竞争加剧;或者可能是市场结构的某些根本性变化消除了你交易模型的优势。这就是我在第5章中谈到的体制转换(Regime Shift)。
除了在模型不断亏损时逐步降低其杠杆(直到杠杆为零)之外,你对减轻这些模型风险来源能做的并不多。如果你持续根据滞后的平均收益率和标准差按照Kelly公式更新杠杆,这可以系统地实现。(随着回看期内平均收益率降至零,你的Kelly杠杆将被驱动到零。)这优于因为大幅回撤而突然关闭模型(关于过早关闭模型的心理压力,参见下一节心理准备中的讨论)。
软件风险是指每天产生交易的自动交易系统实际上并没有忠实地反映你的回测模型。这是由于无处不在的软件缺陷造成的。我在第5章中讨论了消除此类软件错误的方法:你应该将自动交易系统生成的交易与回测系统生成的理论交易进行比较,以确保它们是一致的。
最后,物理或自然灾害可能发生,造成重大损失,而且不一定非得是地震或海啸这样戏剧性的事件。如果你的互联网连接在你能够进入对冲头寸之前断开怎么办?如果你的电力在交易传输过程中中断怎么办?防止物理灾害对交易造成重大干扰的不同方法可以在第4章关于物理基础设施的部分中找到。
心理准备#
一本关于量化交易的书包含关于心理准备的部分可能看起来很奇怪。毕竟,量化交易不就是要把我们从情绪中解放出来,让计算机以纪律化的方式做出所有交易决策吗?要是真这么简单就好了:心理准备不足的人类交易者往往会推翻其自动交易系统的决策,尤其是在头寸或某一天出现异常盈亏的情况下。因此,即使我们使用量化策略进行交易,了解自身的一些心理弱点也是至关重要的。
幸运的是,有一个叫做"行为金融学"(Behavioral Finance)的金融研究领域(Thaler, 1994),研究非理性的金融决策。我将重点介绍几种影响交易的常见非理性行为。
第一种行为偏差被称为禀赋效应(Endowment Effect)、现状偏差(Status Quo Bias)或损失厌恶(Loss Aversion)。前两种效应导致一些交易者过久地持有亏损头寸,因为交易者(和一般人一样)过度偏好现状(现状偏差),或者因为他们要求远高于获取股票所支付的价格才愿意放弃它(禀赋效应)。正如我在风险管理部分所论证的,有理性的原因持有亏损头寸(例如,当你预期均值回归行为时);然而,这些行为偏差导致交易者即使没有理性原因也持有亏损头寸(例如,当你预期趋势行为,且趋势使你的头寸将亏损更多时)。同时,损失厌恶偏差导致一些交易者过早退出盈利头寸,即使持有更长时间平均来说会带来更大的利润。他们为什么这么快退出盈利头寸?因为可能失去部分当前利润的痛苦超过了获得更高利润的愉悦。
这种行为偏差在以下情况下表现得最为明显和灾难性:当一个人因错误(无论是软件缺陷、操作失误还是数据问题)进入头寸并遭受了巨大损失时。理性的做法是在发现错误后立即退出头寸。然而,交易者往往忍不住等待均值回归,以便在退出前减少亏损。除非你有一个均值回归模型表明现在是进入这个头寸的好时机,否则这种等待均值回归很可能导致更大的损失。
另一种我亲身经历过的常见偏差是"代表性偏差"(Representativeness Bias)——人们倾向于过度重视近期经验而低估长期平均值(Ritter, 2003)。(这篇参考文献对行为金融学研究的各种偏差有很好的介绍。)在遭受巨大损失后,交易者——即使是量化交易者——往往会立即修改策略的某些参数,以便如果他们交易这个修改后的系统就能避免那次巨大损失。但是,这样做是不明智的,因为这种修改可能招致尚未发生的其他巨大损失,或者可能消除了许多已经存在的盈利机会。我们必须记住,我们是在概率机制下运作的:没有系统能够避免所有可能导致亏损的市场波动。
如果你觉得你的系统确实有缺陷并想调整它,你应该始终对修改后的版本进行回测,确保它确实在足够长的回测期内优于旧系统,而不仅仅是最近几周。
有两种主要的心理弱点在交易者中比在经济学家中更为人知:绝望(Despair)和贪婪(Greed)。
绝望发生在交易模型经历重大、持续的回撤时。许多交易者(以及他们的管理者、投资者等)在这种情况下会承受巨大压力,完全关闭模型。而其他过度自信且有鲁莽倾向的交易者则会做相反的事:他们会加倍押注于亏损的模型,希望如果模型反弹,最终能收回损失。这两种行为都不是理性的:如果你一直按照Kelly公式管理你的资本配置和杠杆,你会逐步降低亏损模型的资本配置。
贪婪是在模型表现良好并产生大量利润时更常见的情绪。此时的诱惑是迅速增加杠杆以快速致富。同样,一个纪律严明的量化交易者会将杠杆保持在Kelly公式规定的范围内,同时也要警惕肥尾事件的可能性。
绝望和贪婪都可能导致过度杠杆(Overleveraging),即交易过大的投资组合:在绝望中,人们试图通过追加新资金来挽回损失;在贪婪中,人们在策略初步成功后过快地追加资金。因此,风险管理的一条黄金法则是始终控制投资组合的规模。然而,说起来容易做起来难。大型知名基金也曾屈服于过度杠杆的诱惑而失败:2000年的长期资本管理公司(Long-Term Capital Management)(Lowenstein, 2000)和2006年的Amaranth Advisors(epchan.blogspot.com/2006/10/highly-improbable-event.html)。在Amaranth Advisors的案例中,一位交易员(Brian Hunter)在一个单一策略(天然气日历价差交易)上使用的杠杆如此之大,以至于造成了60亿美元的损失,轻松地抹去了该基金的权益——这是一个教科书式的风险管理失败案例。
我本人在机构环境和个人环境中都经历过这种压力,不幸的结果两次都是过早地屈服了。当我在一家资金管理公司工作时,我因为一时的贪婪,在一个仅交易了六个月的策略上追加了超过1亿美元的资金(那是在我了解Kelly准则之前),为基金投资者损失了超过100万美元。好像这还不够教训似的,当我开始独立交易时,我又犯了同样的错误。这涉及一个涉及XLE(一只能源交易所交易基金)和原油期货(CL)的均值回归价差策略。当价差拒绝随时间回归均值时,我固执地将价差规模增加到接近500,000美元。最终,绝望降临,我在接近六位数的亏损下退出了价差。自然,价差在我退出后开始回归了。(幸运的是,在我独立交易的第一年,我的其他几个策略表现出色,因此财政年度仅以小幅整体亏损结束。)
我们应该如何训练自己克服这些心理弱点,学会不手动推翻模型,并正确、迅速地纠正交易错误?与大多数人类努力一样,方法是从小额投资组合开始,逐步获得心理准备、纪律和对模型的信心。随着你在情感上更能处理日常盈亏波动(P&L)并控制内心深处的冲动,你投资组合的实际表现将与策略的理论预期表现趋于一致。
在我经历了上述那些灾难性的交易之后,我确实发现了这一点。我对Kelly公式的新认识和信心迄今为止阻止了类似灾难的再次发生。
总结#
风险管理是交易中至关重要的学科。交易世界充斥着无数例子,大型对冲基金和投资银行因单笔交易或极短时间内巨额亏损而倒下。这些亏损大多源于过度杠杆化的头寸,而非模型本身的固有错误。通常,交易者不会对一个表现不佳的模型过度杠杆化。恰恰是一个迄今为止表现卓越的模型,才最有可能因过度自信和过度杠杆而遭受巨大损失。因此,本章提供了一个重要的风险管理工具:使用Kelly公式确定最优杠杆。
除了确定最优杠杆外,Kelly公式还有一个非常有用的附带好处:它还根据不同策略收益的协方差来确定最优的资本配置。
但如果没有对交易起伏做好心理准备,从而偏离理性决策的准则(即你的模型),任何风险管理公式或系统都无法防止灾难。最终的风险管理心态非常简单:不要屈服于绝望或贪婪。为了在这种心理纪律上获得实践,必须从小头寸开始缓慢推进,并在按照Kelly公式扩大规模之前,全面测试交易业务的各个方面(模型、软件、操作流程、资金和风险管理)。
我发现,为了缓慢而谨慎地推进,有其他收入来源或其他业务来帮助自己在经济上或情感上维持(以避免缓慢进展带来的无聊感)是很有帮助的。确实,找到一个消遣——无论是否产生收入——可能实际上有助于提高财富的长期增长。
附录:收益分布为高斯分布时Kelly公式的简单推导#
如果我们假设策略(或证券)的收益分布是高斯分布,那么Kelly公式可以很容易地推导出来。我们从适用于高斯过程的复合杠杆增长率公式开始:
$$ g (f) = r + f m - s^{2} f^{2} / 2 $$其中$f$是杠杆,$r$是无风险利率;$m$是简单的、非复合的单期平均超额收益率;$s$是这些非复合收益率的标准差。这个复合增长率公式本身也可以相当简单地推导出来,但不像Kelly公式那样简单,所以我将其推导留给读者去查阅前面引用的Thorp文章。
为了找到使$g$最大化的最优$f$,只需对$f$求一阶导数并令其为零:
$$ d g / d f = m - s^{2} f = 0 $$解此方程得$f = m / s^{2}$,即在高斯假设下单个策略或证券的Kelly公式。