“績效度量”是基于一本量化交易書: “Successful Algorithmic Trading”第十二章的翻譯修然。互聯(lián)網(wǎng)上可以找到這本書的英文版本默责。
這一章主要描述如何對策略績效進行度量回铛,如何評估策略的好與壞。
分割線
績效度量是算法交易中非常重要的組成部分跋炕。沒有績效評估赖晶,沒有持續(xù)的記錄,很難判斷我們的策略收益到底是來自于運氣還是真正的市場優(yōu)勢辐烂。
為了在算法交易中獲得成功遏插,有必要明白影響交易盈利情況和最終策略的所有因素。我們應該不斷地去尋找所有算法交易棧的方方面面的改進纠修。特別是我們應該總是盡力減少我們的交易成本(交易費胳嘲,傭金以及滑點),改進軟件和硬件扣草,改善數(shù)據(jù)源的質量以及持續(xù)尋找新的策略增加到投資組合中了牛。所有這些領域的績效度量提供了一種標準,可以用于度量其他可選方案辰妙。
算法交易最根本是產生利潤鹰祸。因此多尺度度量績效是非常重要的,可以搞清楚如何以及為什么我們的系統(tǒng)產生這些盈利密浑。這些都激發(fā)了績效評估蛙婴,在交易的層面進行評估,在策略和投資組合的層面進行評估尔破。特別是我們正在尋找:
是否已經編碼進入到策略里面的系統(tǒng)規(guī)則真正產生持續(xù)的回報街图,是否策略在回測中擁有正收益。
是否策略在實盤中能維持正收益懒构,是否策略已經過期要被淘汰餐济。
比較多個策略和投資組合的能力,比如減少因為分配有限的交易資本有關的機會成本胆剧。
我們感興趣的績效量化分析有如下幾項:
回報 - 交易策略最明顯的關注點絮姆,回測或者實盤的收益百分比。兩個主要的績效度量是總回報(TR)和組合年度增長率(CAGR)
回撤 - 策略或者投資組合的資金曲線之前有最高峰赞赖。我們將在下面有更具體的定義滚朵,你能想象一下你的績效圖表上有向下的坡度。
風險 - 風險有許多方面構成前域,我們將在后面的章節(jié)花大量的時間講解,總的來說韵吨,風險指的是資本損失匿垄,比如回報的回撤和波動,后者經常通過回報的年度標準差來計算。
風險/獎勵比率 - 機構投資者主要關心經過風險調整后的回報椿疗。更高的波動經常會導致更高的回報漏峰,當然附帶著更大的回撤。他們總是關心每單位的回報會有多少風險届榄。因此一系列的績效度量被發(fā)明出來用于量化策略這方面的風險浅乔,比如Sharpe Ratio(夏普比率),Sortino Ratio(索提諾比率)和 CALMAR Ratio(卡瑪比率)等等铝条。討論策略績效時靖苇,樣本外夏普比率是機構投資者首先考慮的。
交易分析 - 先前的績效度量都是針對策略和投資組合班缰∠捅冢考察單個交易的績效也是很有意義的,也存在很多方法描述這些績效埠忘。我們將量化盈虧的交易次數(shù)脾拆,交易的平均盈利以及盈虧比等等。
交易是算法策略最基本的方面莹妒,因此我們首先進行交易分析名船。
12.1 交易分析
分析任何策略的第一步就是考察實際交易的績效。像這樣的指標在不同策略之間可能完全不同旨怠。經典的例子就是趨勢跟蹤策略和均值回歸策略的績效差別包帚。
趨勢跟蹤策略通常由許多虧損的交易,每個虧損的交易可能損失很小运吓。當趨勢建立以后渴邦,少量盈利的交易會產生,來自這些盈利的交易的績效可能明顯超出大量虧損交易的績效拘哨。配對交易-均值回歸策略恰恰相反谋梭。它們總是由大量微小盈利的交易組成。而且倦青,價格序列沒有預期地回歸均值瓮床,也可能會導致后續(xù)的損失。這可能抵消掉大量的微小收益产镐。
本質上隘庄,你需要意識到策略的盈利和你的心理預期盈利,兩者需要一起比較癣亚。否則丑掺,你將發(fā)現(xiàn)在一段時間的劇烈回撤時你可能無法堅持。
我們現(xiàn)在看看一些交易級別的統(tǒng)計述雾。
12.1.1 摘要統(tǒng)計
考察交易時街州,我們對下列的統(tǒng)計感興趣兼丰。這里的“周期”指包含OHLCV(譯者注:開,高唆缴,低鳍征,收,交易量)的Bar數(shù)據(jù)覆蓋的時間周期面徽。對于長期周期來說艳丛,經常會用到每日Bar數(shù)據(jù)。對于高頻策略趟紊,經常會用到小時或者分鐘Bar數(shù)據(jù)氮双。
總盈利/虧損(PnL)- 總的收益,表示是否策略盈利還是虧損织阳。
平均周期PnL - 平均值眶蕉,在一定周期內,每個Bar平均產生的收益唧躲。
最大周期盈利 - 最大值造挽,在一定周期內,最大盈利的Bar對應的收益弄痹。
最大周期虧損 - 最小值饭入,在一定周期內,虧損最大的Bar對應的虧損肛真。
平均周期盈利 - 平均值谐丢,在一定周期內,盈利的Bar的平均收益蚓让。
平均周期虧損 - 平均值乾忱,在一定周期內,虧損的Bar的平均虧損历极。
盈利周期數(shù) - 總的周期數(shù)窄瘟,盈利的Bar的數(shù)量。
虧損周期數(shù) - 總的周期數(shù)趟卸,虧損的Bar的數(shù)量蹄葱。
盈利/虧損周期數(shù)百分比 - 比率,盈利周期數(shù) / 虧損周期數(shù)锄列。在這個指標上扎筒,趨勢跟蹤策略和均值回歸策略之間會有顯著差異忧陪。
令人欣慰的是我們投資組合工具直接輸出了這些信息,不用再手工記錄家妆。但是桦卒,這將導致我們從未停止過分析數(shù)據(jù)洗鸵!
每個月至少評估交易1到2次,這是非常重要的。這可以幫助我們進行早期預警:當策略開始退化時能夠識別出來鸠补。這比簡單的使用累計PnL要好的多萝风。
12.2 策略和投資組合分析
交易級別的分析對于長期策略是相當有用的嘀掸,特別是有復雜交易的,比如那些涉及到衍生品的规惰。對于高頻策略來說睬塌,對單個交易不感興趣,感興趣的是策略級別的績效度量歇万。顯然揩晴,長期策略同樣對策略級別的績效感興趣。我們主要感興趣下面三個關鍵點:
回報分析 - 策略的回報囊括了盈利的概念贪磺。在機構環(huán)境中硫兰,通常采用凈費用以及投資多少錢賺多少錢。特別是有現(xiàn)金流入流出時寒锚,回報計算簡單劫映。
風險/獎勵分析 - 外部投資者首先考慮的是策略的樣本外夏普比率(后面章節(jié)會描述)。這是一個業(yè)界標準尺度刹前,嘗試描述多少風險帶來多少回報泳赋。
回撤分析 - 機構環(huán)境中,這可能是三個要素中最重要的喇喉。策略祖今,投資組合或者基金的收益和回撤范圍形成了風險管理的一個關鍵組成部分。我們將在后面的章節(jié)定義回撤拣技。
盡管我們強調的是機構的績效千诬,作為個人交易者,這些仍然是高度重要的尺度膏斤,有了這些適當?shù)娘L險管理(看下一章節(jié))徐绑,將形成持續(xù)策略評估的基礎。
12.2.1 回報分析
個人和機構交易者討論策略績效時最廣泛引用的數(shù)據(jù)經常是總回報掸绞,年度回報和月度回報泵三。看到帶有月度回報表格的套毕蔚В基金績效新聞是相當平常的烫幕。另外,每個人都想知道策略的“回報”到底是什么敞映。
在沒有外部投資或者現(xiàn)金流入/流出的個人交易者來說较曼,總回報計算相對直接,百分比計算公式為:
rt = (Pf - Pi) / Pi * 100
這里rt是總回報振愿,Pf是最后投資組合的美元價值捷犹,Pi是初始投資組合的美元價值弛饭。我們最感興趣的是凈回報,那就是扣除交易/業(yè)務手續(xù)費以后的投資組合/基金價值萍歉。
注意侣颂,這個公式僅僅應用于做多和無杠桿的投資組合。如果希望增加賣出或者杠桿操作枪孩,我們需要修改回報計算公式憔晒,因為交易的是借來的更大的投資組合,這叫做保證金交易蔑舞。
舉個例子拒担,一個交易策略買進1000美金的某個品種,然后賣出1000美金的另外一個品種攻询。這是以美元為中心的投資組合从撼,名義交易總量為2000美金。如果這個策略生成200美金的收益钧栖,那么這個交易的總回報為10%低零。當你考慮借貸費用和杠桿利率時,這將變得更復雜桐经。去除這些成本將會得到凈總回報毁兆,這就是經常引用的“總回報”。
資金曲線
假如這個基金做的很好阴挣,資金曲線通常是基于基金績效報告最重要的可視化成果之一气堕。它是總的時間與投資組合凈值的圖表。本質上畔咧,它用于展示基金從成立開始賬戶的增長情況茎芭。同樣,對于個人交易者誓沸,它展示了賬戶資產在整個交易期間的增長情況梅桩。下圖是一個典型的資金曲線圖:
典型日內策略資金曲線
像這樣的圖有什么用處?本質上它是策略過去波動的“調味劑”拜隧,也是一個可視化指標宿百,從圖像中可以看出策略運行過程中,是否存在很長一段時間的停滯時期或者回撤洪添。它也揭示了策略交易期結束時總回報如何計算垦页。
在資金曲線中,我們可以找到不尋常的歷史事件如何影響策略干奢。比如痊焊,一個常見的問題就是2008年策略是否有過度的波動。另一個問題則可能關心回報的一致性。
解釋資金曲線時必須小心的是它總是顯示“向上傾斜的線”.通過分割曲線薄啥,我們能看到劇烈波動時期或者可能在整個時間段并不嚴重的持續(xù)回撤辕羽。因而資金曲線需要考慮其他一些分析,特別是風險/獎勵分析和回撤分析垄惧。
12.2.2 風險/獎勵分析
上面我們提到的風險/獎勵分析在機構環(huán)境中是非常重要的刁愿。當然,作為個人投資者也不能忽視赘艳。你應該密切注意策略的風險/獎勵度量酌毡,因為它們將影響策略的回撤克握,杠桿和總的復合增長率蕾管。
這些概念將在下一章“風險和資金管理”進一步講解。現(xiàn)在我們將討論一般的比率菩暗,比如夏普比率掰曾,在金融領域非常普遍的比較手段。它在量化交易中有非常高的關注停团,因此我們將更詳細的討論它旷坦。
夏普比率
考慮這樣的情形:我們有兩個回報相同的策略。我們如何知道哪個策略有更高的風險佑稠?更進一步秒梅,更高的風險指的是什么?在金融領域舌胶,我們經常關心回報的波動和回撤周期捆蜀。因而當其中一個策略的回報有明顯高的波動,我們可能認為它是不夠吸引人的幔嫂,盡管它的歷史回報可能是相似或者一樣的辆它。這些策略比較的問題和風險評價激發(fā)了夏普比率的使用。
William Forsyth Sharpe 是諾貝爾經濟學獎獲得者履恩,他于1966年創(chuàng)建了資產定價模型(CAPM)和開發(fā)了夏普比率锰茉。
夏普比率 S 定義如下:
這里Ra是資產或者策略的回報,Rb是基準的回報切心,比如無風險利率飒筑。
這個比率實際是回報的均值除以回報的標準偏差。因此绽昏,在同樣的回報均值的情況下协屡,回報的更低的波動將會導致更大的夏普比率。
經常會被用到的是年度夏普比率而涉,它的計算依賴交易周期著瓶,假定一年有N個交易日,年度夏普比率定義如下:
注意啼县,夏普比率本身也需要基于時間周期來計算材原。比如一個基于“天”周期的策略沸久,N = 252 (一年有252個交易日,不是365)余蟹,Ra卷胯,Rb是每天的回報。類似基于“小時”周期的策略威酒,N = 252 * 6.5 = 1638, 不是 N = 252 * 24 = 6048窑睁,因為在美國股票市場,一個交易日只有6.5小時葵孤。
上面的夏普比率公式暗含了基準的使用担钮。基準作為一個衡量尺度尤仍,衡量策略是否值得考慮箫津。比如,一個操作美國大盤股的簡單做多策略平均下來收益應該能戰(zhàn)勝S&P500指數(shù)宰啦,或者有更小的波動苏遥,否則直接投資指數(shù)有更低的管理費,更劃算赡模。
基準的選擇有時是不清晰的田炭。ETF指數(shù)基金應該作為個股的績效基準嗎?還是S&P500漓柑?為什么不是Russell 3000教硫?同樣地對沖基金策略應該與市場指數(shù)進行比較還是應該與其他對沖基金比較呢?
“無風險利率”也有爭議欺缘。指國債利率栋豫?或者一攬子國際債券利率?又或者短期或長期票據(jù)利率谚殊?又或者幾者混合丧鸯?很明顯,有很多方式選擇基準嫩絮。針對美股策略丛肢,夏普比率一般選擇10年期國庫券利率作為無風險利率。
也有特例剿干,針對市場中性策略蜂怎,選擇使用無風險利率還是0作為基準是一個難點。市場指數(shù)本身不是市場中性的置尔。對于市場中性策略杠步,不應該減去無風險利率,它是自給的。因為你持有保證金也能夠獲得貸款利息Rf, 實際回報的計算如下:
(Ra + Rf) - Rf = Ra. 因此幽歼,市場中性的策略沒有真正減去無風險利率朵锣。
盡管在量化金融領域,夏普比率非常流行甸私,但是它也有很多限制诚些。夏普比率是“后向”指標,它只是統(tǒng)計歷史回報分布和波動皇型,不代表將來诬烹。當我們通過夏普比率來做決策時,一個明顯的假定就是過去與未來相似弃鸦。這明顯不總是這樣绞吁,特別是市場機制改變的時候。
夏普比率計算假定回報是正太分布(高斯分布)寡键。不幸的是掀泳,市場經常遭遇超過正態(tài)分布的尖峰。本質上回報的分布是“厚尾”分布西轩, 我們相信極端事件比高斯分布更可能出現(xiàn)。因此脑沿,夏普比率很難刻畫“尾部風險”藕畔。策略中像這樣的風險很明顯,比如看漲期權的銷售又叫做“滾動的便士”庄拇。隨著看漲期權的銷售注服,期權溢價源源不斷的產生,這將導致低波動的措近,遠遠超過基準的回報溶弟。這個例子中,策略擁有高夏普比率瞭郑。但是它沒有考慮到像這樣的期權可能被“召回”辜御,導致明顯的回撤甚至歸零。因此夏普比率不能被孤立的使用屈张。
顯而易見地擒权,為了更加真實,交易費用應該包含在夏普比率的計算當中阁谆。有很多交易策略的例子中碳抄,它們有高的夏普比率和大的盈利可能性,一旦考慮了真實的交易成本场绿,實際上變成低的夏普比率和低的盈利策略剖效。這意味著我們計算夏普比率時時應該采用凈回報,計算過程中應該考慮交易成本。
一個顯而易見的未解決的問題是“一個好的交易策略的夏普比率應該是多少璧尸?”劝贸。這真正是一個很難回答的問題,因為不同的投資者有不同的風險偏好逗宁。一般的規(guī)則是:年度夏普比率 S < 1 的量化策略通常不應該被考慮使用映九。但是這也有例外,特別是期貨市場中的趨勢跟蹤策略瞎颗。
量化基金通常忽略夏普比率 S < 2的策略件甥。我熟悉的一個有影響力的量化對沖基金甚至不會考慮使用夏普比率 S < 3的策略。作為個人算法交易者哼拔,如果你能夠獲得樣本外(或者實盤交易)夏普比率 S > 2的策略引有,你將可以做的很好。
夏普比率通常隨著交易頻率的增加而增加倦逐。一些高頻策略有高1位數(shù)字(有時低2位數(shù)字)的夏普比率譬正。因為這些策略幾乎能夠每天每月都能盈利。這些策略很少遭受災難性風險(比如大的損失)檬姥,并且能夠減小回報的波動曾我,這導致了相當高的夏普比率。意識到像這樣的高頻策略也可能突然失去作用健民,但這是風險的另一個方面抒巢,并不會完全反映在夏普比率上。
現(xiàn)在我們看看夏普比率實際的例子秉犹。我們考慮一個簡單的蛉谜,只買多,只買單個股票崇堵,買入并持有的市場中性策略型诚。我們用Pandas來完成這些例子代碼。
第一個任務是獲取數(shù)據(jù)鸳劳,然后把它置入Pandas DataFrame對象狰贯。先前的章節(jié)我們用Python和MySQL實現(xiàn)了這些。另外棍辕,我們可以用簡單的代碼抓取Google金融數(shù)據(jù)暮现。這段代碼的最后我創(chuàng)建了一個方法,基于回報的時間序列來計算年度夏普比率楚昭。代碼如下:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# sharpe.py
from __future__ import print_function
import datetime
import numpy as np import pandas as pd
import pandas.io.data as web
def annualised_sharpe(returns, N=252):
"""
Calculate the annualised Sharpe ratio of a returns stream
based on a number of trading periods, N. N defaults to 252, which then
assumes a stream of daily returns.
The function assumes that the returns are the excess of
those compared to a benchmark.
"""
return np.sqrt(N) * returns.mean() / returns.std()
現(xiàn)在我們可以直接從Google金融數(shù)據(jù)來計算年度夏普比率栖袋,我們可以針對2個股票來測試購買持有策略。我們將采用2000年1月1日到2013年1月1日的Google金融數(shù)據(jù)抚太。
可以創(chuàng)建一個工具方法幫助我們快速的查看相同周期塘幅,跨多個股票的購買持有策略的夏普比率昔案。
代碼如下:
def equity_sharpe(ticker):
"""
Calculates the annualised Sharpe ratio based on the daily
returns of an equity ticker symbol listed in Google Finance.
The dates have been hardcoded here for brevity.
"""
start = datetime.datetime(2000,1,1)
end = datetime.datetime(2013,1,1)
# Obtain the equities daily historic data for the desired time period # and
add to a pandas DataFrame
pdf = web.DataReader(ticker, ’google’, start, end)
# Use the percentage change method to easily calculate daily returns
pdf[’daily_ret’] = pdf[’Close’].pct_change()
# Assume an average annual risk-free rate over the period of 5%
pdf[’excess_daily_ret’] = pdf[’daily_ret’] - 0.05/252
# Return the annualised Sharpe ratio based on the excess daily returns
return annualised_sharpe(pdf[’excess_daily_ret’])
對于谷歌股票,買入持有策略的夏普比率為0.703:
>>> equity_sharpe(’GOOG’)
0.70265563285799615
現(xiàn)在我們可以針對市場中性策略做同樣的計算电媳。市場中性的策略的目標通常是特定股票的績效踏揣。通過做空相同金額的ETF基金可以達到這個目標,ETF基金是用來跟蹤市場的匾乓。對于美國股票市場捞稿,顯而易見的是選擇 S&P500指數(shù),它是用來跟蹤 SPDR ETF的拼缝,股票代碼:SPY娱局。
為了計算像這種策略的年度夏普比率,我們獲取SPY的歷史價格咧七,跟之前的股票一樣計算回報的百分比衰齐。這里的例外是我們不使用無風險基準利率,我們將計算凈回報继阻,通過減去做多和做空的回報耻涛,并且除以2,因為我們使用了2倍的交易成本瘟檩。下面是Python/pandas代碼:
def market_neutral_sharpe(ticker, benchmark):
"""
Calculates the annualised Sharpe ratio of a market
neutral long/short strategy inolving the long of ’ticker’ with a
corresponding short of the ’benchmark’.
"""
start = datetime.datetime(2000, 1, 1)
end = datetime.datetime(2013, 1, 1)
# Get historic data for both a symbol/ticker and a benchmark ticker
# The dates have been hardcoded, but you can modify them as you see fit!
tick = web.DataReader(ticker, ’google’, start, end)
bench = web.DataReader(benchmark, ’google’, start, end)
# Calculate the percentage returns on each of the time series
tick[’daily_ret’] = tick[’Close’].pct_change()
bench[’daily_ret’] = bench[’Close’].pct_change()
# Create a new DataFrame to store the strategy information # The net returns
#are (long - short)/2, since there is twice # the trading capital for this
#strategy
strat = pd.DataFrame(index=tick.index)
strat[’net_ret’] = (tick[’daily_ret’] - bench[’daily_ret’])/2.0
# Return the annualised Sharpe ratio for this strategy
return annualised_sharpe(strat[’net_ret’])
對于Google股票抹缕,多空市場中性策略的夏普比率是0.832:
>>> market_neutral_sharpe(’GOOG’, 'SPY')
0.83197496084314604
我們下面將討論其他的風險/獎勵比率。
索提諾比率
夏普比率同時捕捉向上和向下的波動芒帕,但是歉嗓,投資者(對沖基金經理)總的來說不會被明顯向上的波動困擾。風險管理中感興趣的主要是向下的波動和回撤周期背蟆。因此索提諾比率被定義成回報均值除以向下的波動的偏差:
索提諾比率在機構環(huán)境里會被使用,但很確定的是不如夏普比率那么普遍哮幢。
卡馬比率
有人可能會爭論投資者或者交易者也關心最大回撤带膀,而不是平均回撤。CALMAR(加利福利亞管理賬戶報告)比率由此產生橙垢,也叫做回撤比率垛叨,它定義為回報均值除以最大回撤:
再次說明,卡馬比率不像夏普比率使用那么廣泛柜某。
12.2.3 回撤分析
我認為嗽元,回撤是算法交易系統(tǒng)最重要的一個方面。簡單的說喂击,如果你的賬戶資金被消滅了剂癌,什么績效指標都不重要『舶恚回撤分析關心賬戶資金從高水位的點下降的幅度佩谷。高水位的點定義為最近賬戶資金在資金曲線上的峰值旁壮。
在機構環(huán)境中,回撤特別重要因為大多數(shù)對沖基金只有當賬戶資金持續(xù)創(chuàng)新高才有酬勞谐檀。也就是說抡谐,一個基金經理沒有績效費如果基金維持在“水位以下”,比如賬戶資金回撤了一段時間桐猬。
當一個基金有10%的回撤時麦撵,大多數(shù)投資者會擔心,并且將會贖回他們的投資一旦回撤超過30%溃肪。在個人環(huán)境中免胃,這種情形非常不同。個人可能可以承受較大的回撤來換取更高的回報乍惊。
最大回撤與回撤持續(xù)時間
兩個關鍵的回撤指標是最大回撤和回撤持續(xù)時間杜秸。前一個描述賬戶資金從前一個高峰位置最大比例的回撤到當前位置或者前一個低谷。在機構環(huán)境中交易基金時經常被使用润绎。個人交易者也對這個數(shù)據(jù)保持極大的關注撬碟。后一個描述回撤的持續(xù)時間。這個數(shù)據(jù)經常以“天”為單位來表示莉撇,但是更高頻策略會用細粒度的時間周期呢蛤。
在回測中,這些方法提供了一些主意供我們判斷策略在將來會如何表現(xiàn)棍郎。整體而言其障,資金曲線可能看起來非常誘人,但是涂佃,向上的資金曲線可能很容易掩飾先前經歷的回撤有多么困難励翼。
當一個策略的回撤低于10%,或者低于20%時辜荠,需要強大意志力來繼續(xù)執(zhí)行這個策略汽抚。盡管策略可能在歷史上,在回測中伯病,經歷過類似的時期造烁。對于算法交易和系統(tǒng)交易都面臨同樣的問題。這也自然地激發(fā)了設置回撤邊界和特定的規(guī)則午笛,比如當回撤達到設置的級別時賬戶止損惭蟋。
回撤曲線
重要的是感受最大回撤和回撤持續(xù)時間,看策略回撤的時間序列圖表肯定更有吸引力药磺。
Fig 12.2.3很清晰的表明這個策略遭遇了相當長時間的回撤從2010第三季度到2011年第二季度告组,最大回撤達到14.8%。然而策略本身在想當長的時間持續(xù)明顯的盈利与涡,這個特定時期非常困難值得忍耐惹谐。另外持偏,這是迄今為止目前發(fā)生的最大歷史回撤,策略有可能在將來發(fā)生更大的回撤氨肌。有必要和其他績效方法一樣關注回撤曲線鸿秆。
Figure 12.2: 典型日內策略回撤曲線
在下面的章節(jié)我們將討論量化風險管理的概念和描述能幫我們最小化回撤和最大化回報的技術,始終保持風險在合理的程度怎囚。