「量化交易」是一門匯集數學知識與程式語言的學問,一般人或許會認為那是相關領域專家才能勝任的工作。但此書作者告訴我們並不盡然,這是他身為這領域專家,在歷經數次成功與失敗的實務操作後所下的結論。在從事量化交易前,需要先釐清一非常重要的觀念,那就是這不是能一夕致富的行業,不然到頭來只會落得血本無歸的下場。積極謹慎的個性與耐心,是做這行業人最普遍具有的特質。
隨著網路資源搜索的盛行,我們不難在許多學術文章(SSRN)或是相關網頁論壇(Yahoo Finance, Elite Trader)裡,找尋到許多適合自己偏好取向的交易策略。因此我們關心的是如何分辨這些交易策略的好壞,以及避免在這過程中犯下一些常見的錯誤,例如存活偏誤 (survivorship bias)、前視偏誤 (look–ahead bias)、資料窺探偏誤(Data-snooping bias)以及對交易成本的考量等,以下一一為大家介紹。
計量交易的流程
下圖為計量交易的流程.首先,交易者會從歷史資料或過去經驗中得到對於市場的知識,將知識量化後發展出交易策略,並使用策略對過去歷史資料做回測,產生對此策略的評估報告.這樣做的好處是,可以確保執行者對策略完全了解,另一方面,若在回測中發現不夠好的部分,也可以及時修正與改進.最後,此策略就可以進入實際操作的階段.而從發展策略到回測產生評估報告的過程,就是傳統投資方式與量化交易最大的差異處。
關於回測的各種知識
首先,是進行回測的平台,以下介紹幾個常用的回測平台:
- 第一個常用的回測平台是 Excel
資料的輸入、輸出都可在同一張表格上完成,交易人可以輕易地做比較與判讀,但 Excel 的缺點就是只適合用來處理較簡單的模型。
- 第二個常見的交易平台為 Matlab
Matlab 的優點如以下這張圖所示,它可以輕易的從外部的資料庫匯入資料,並有豐富的數學及統計工具幫助投資者建立較複雜的策略和處理大量資料,但 Matlab 的缺點是測試完策略後,至少到目前在一些的情形下,必須從另外的交易平台做下單。
註:與Matlab較為相似的平台,如「R」、「Python」也是一般常見的使用工具,各有其優缺點。
- 第三個是在國內較為常見的交易平台 Multicharts
除了適用多種標的資產的交易如股票、期貨、外匯等項目外,簡易的操作方式與其所具備的許多服務功能,像是圖表交易、下單匣、交易追蹤視窗、市場深度視窗、自動化進場/出場與商品代碼轉換等特色所著稱。
另外,在國外更常被使用的交易平台為 Quantopian、Quantconnect、Portfolio123,此三個平台各自擁有相當多使用者,裡面有許多社群分享的交易策略,資源十分豐富。許多量化交易的前置作業,如選定標的資產,下載歷史資料等都能在這些平台上輕鬆完成,各網站的資料匯整連接的都十分完善,使用者只需專注在策略上的設計即可。
選定交易平台後,接著是尋找及使用歷史資料
交易人可以在網路上尋找到大量的免費資料來源,如 yahoo finance、CSI、Chicago Booth 的 CRSP、qanda.com 等,但在使用上述資料時,必須注意幾個要點,避免錯誤觸發交易信號。
1.標的是否有股票分割以及發股利的情況
以(IGE)ETF 做個例子,下表為 2005/6/7~10 的資料,在 8~9 間,該 ETF 做了一次 2 :1 的股票分割,表格中可以發現兩天的收盤價差將近一倍,這時就需對分割前的收盤價做調整。也就是必須將收盤價除以二。
而下面表格則是 2005~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.交易成本考量
例 1:考慮交易成本的均值回歸模型
一個簡單的交易策略:以 1995 年到 2006 年這段期間,我們以收盤價買入前一交易日日收益最差的股票,賣空前一交易日日收益最好的股票。若不考慮交易成本,策略的 Sharpe ratio 等於 0.2510,而考慮交易成本的 Sharpe ratio 等於 -3.1884。因此這個策略是無利可圖的。
策略的改進
首先我們需要注意的是所有策略的改進都要有經濟學原理或者市場的現象作支撐,而不是亂套入些反覆試驗的方法,否則會產生數據遷就偏差。
例 2:對例 1 策略的微小改動
對策略進行如下改動:在市場開盤而非收盤時進行交易,不考慮交易成本的 Sharpe ratio 會增加到 4.43;而考慮交易成本的 Sharpe ratio 會變為 0.78,可以發現這個策略仍有利可圖。
小結
這篇文章主要是以 Quantitative Trading 這本書前三章內容為主,再加上與時下較為常見的交易平台作介紹,希望能讓讀書能對計量交易有初步的了解與認知,後續章節的部份會再陸續與大家分享。
【延伸閱讀】