量化投資中回測的12種坑,你掉進去了嗎?

閱讀了知乎的問答,很有感觸,總結下個人思考與觀點。框架

這是一個很扎心的問題,不少從業者,都面臨着這個拷問,固然也包括我。我將嘗試從量化投資的整個流程,從理論和經驗上去定性分析,出現這個問題的各類緣由,避免這些坑,期待實盤與回測儘量一致。在分析的時候,主要基於實現CTA趨勢跟蹤策略的視角出發,而且兼顧股票和其餘常見的投資策略。機器學習

1、猜測與假設

使用趨勢跟蹤策略的時候,一個基本的猜測就是,咱們即將交易的品種是存在趨勢的,趨勢產生以後,會持續一段時間,纔會反轉。至於什麼是趨勢,這是個高深的問題,在之後的系列文章中,將會詳細梳理。函數

若是基於價值投資策略,一個基本的猜測就是,當股票的價格比較低,低於自身的內在價值的時候,股票價格會在必定時間內向內在價值收斂。學習

若是是基於套利策略,一個基本的猜測就是,一個品種或者多個品種之間的價差會處在必定的合理範圍以內,當價差過高的時候,就會下跌,當價差過小的時候,就會升高。測試

任何量化投資的策略,其實都有必定的猜測與假設,包括那些基於機器學習、深度學習的量化投資策略,只是有些策略基於的猜測與假設,比較直觀,符合現有的認知體系,你們容易接受;有些基於的猜測與假設,超出咱們的認知範圍,是黑匣子,你們無法理解。優化

坑一、基於黑匣子的猜測與假設的策略,讓咱們更加懷疑實盤不如回測的表現

我對因而基於經濟、金融理論產生的策略仍是基於數據驅動產生的策略自己並無偏見,可是,基於數據驅動產生的策略,尤爲是那些黑匣子,在實盤的時候,因爲超出了咱們的認知,咱們更容易產生不自信的感受,以爲實盤表現很差。spa

2、數據

當咱們有了猜測,作出了假設以後,就須要相應的歷史數據去驗證咱們的猜測與假設是否正確。在收集數據的時候,最早遇到的就是數據缺失與數據謬誤。設計

坑二、數據缺失或者數據謬誤

當一個品種的數據,出現缺失或者有些數據出現錯誤的時候,會形成咱們的回測結果不許確,有可能會出現實盤比回測差不少的狀況。圖片

舉個例子吧,今天剛發現,某個數據提供商,提供的豆二的指數數據,在2017年5月31日,價格接近於先後兩天的兩倍,若是咱們基於這些數據產生交易信號,產生的回測結果你敢信嗎?開發

在咱們作回測的時候,能保證交易數據的精確就儘量保證交易數據的精確。可是清洗數據是要花費很大精力的一件事情,有的公司專門僱傭員工去作數據清洗,保證數據的完善與精確。權衡利弊取捨,若是不能保證數據很精確,就嘗試開發一些容錯性高的策略,比方說,中長期的趨勢跟蹤策略。

坑三、股票或者品種缺失(倖存者誤差)

股票有上市與退市,期貨品種也有。若是你在回測的時候只考慮如今的股票,好比你作一個基於滬深300指數的策略,考慮的是如今的300指成分股,那麼,你就犯了倖存者誤差,沒有考慮到在過去被剔除滬深300指數的那些股票,這些股票之因此被剔除,極可能是表現很差,若是你忽略了這個因素,那麼,你回測出來的結果和實際上就可能存在很大的差異。

坑四、只考慮了真實的價格因素

回測的目的是要儘量接近現實的實際的世界。在股票交易中,有分成派息致使的價格跳空,若是忽略分成派息,有可能形成低估策略的盈利能力,忽略股票的合併,有可能形成高估策略的盈利能力;因此,在回測的時候,最好是使用復權價,好比前復權價,按照回測終點的值,向前復權(這時候若是資金量比較小,要精確到1手,也可能產生比較大的偏差)。

在期貨交易中,由於每一個期貨品種有多個期貨合約,而且每一個期貨合約的上市與退市時間之間的間隔都比較短,回測通常須要好幾年的時間,須要把歷史上的期貨合約按照必定的規則去鏈接起來,造成一個長的時間序列。國內通常使用指數合約,主力連續合約,通過各類方法復權的主力連續合約,若是使用主力連續合約沒有通過復權,在每次換月的時候,可能存在很大的跳空,也會影響回測的質量。

坑五、回測的時候使用了並不能實際交易的數據

好比股票回測的時候使用指數,期貨回測的時候使用指數合約,這些在歷史當中,都是不可以直接進行交易的,使用指數回測,會產生回測的偏差。

3、回測過程當中的那些坑

當咱們使用了質量比較好的數據以後,可能還面臨着很多的問題。

坑六、使用將來信息

使用將來函數、在今天能夠獲取明天的收盤價,在這個bar沒有結束的時候,能夠獲取到最高點和最低點,都是錯誤的利用了將來信息。

更隱蔽一些的將來信息多是信息的發佈與信息的統計時點是不一致的,好比在每一年年初,獲得了公司的年報,而實際上,通常是第一季度末,上市公司纔會發佈年報。

還有由於使用的會不斷變更的信息形成的信號閃爍,好比,在基於當前bar的close價格產生信號的時候,若是在實盤交易中,你的量化框架是每一個tick更新一次close價格,而且每一個tick驅動一次你的策略,那麼,你就可能會發生信號閃爍,形成在一個bar裏面來回產生開倉或者平倉信號,這些在回測的過程當中通常不會出現問題,可是到模擬交易或者實盤交易的時候,問題會很嚴重。

坑七、沒有考慮流動性及衝擊成本

有的時候,股票或者期貨交易不活躍,成交量很是少,若是你的資金很是小,只佔成交量的一少部分還無所謂,若是你的資金量很是大,就有可能成交不了,或者即便成交了,也會形成衝擊成本很是大。

因此,正常在回測的時候,應該考慮在交易成本中加入市場衝擊成本,即滑點。

坑八、沒有考慮交易費用

若是作的交易頻率比較高,交易費用可能就佔到策略盈利的一大部分,若是忽略交易費用,一個通常的策略均可能表現得很是好,致使高估策略得盈利能力,使得實際交易的時候,實盤表現比較差。

坑九、使用過多的條件去過濾交易信號(過擬合方式之一)

當基於過去的歷史數據來看的話,對於任何長度的bar數據,我均可以增長條件,直到每一個bar的判斷都準確,我能夠實現,每一個bar開盤買賣,每一個bar都賺錢,可是,有意義嗎?實盤可以實現嗎?並不能。因此,這提醒咱們,在設計量化策略的時候,用的條件要適當,過多就會過擬合,過少又會致使擬合不住,沒能好好把握住規律,策略表現比較差。

4、回測後的那些坑

坑十、過分優化參數,選擇參數孤島上的策略(過擬合方式之一)

當咱們交易策略寫出來以後,在單個參數對上測試過以後,若是沒有上述的種種問題,咱們可能就要進入策略開發的下一個步驟-參數優化了。

當進行參數優化以後,遍歷不少參數對以後,會發現,有的參數對錶現比較好,有的參數對錶現比較差,若是咱們簡簡單單,挑選一個表現特別好的參數對,頗有可能在將來實盤交易的時候,咱們策略的表現沒有實際上好。

參數優化的目的並非要挑選出盈利最高,夏普率最高的參數對,而是讓咱們去嘗試發現這個策略是否事參數敏感的,在必定範圍內,不一樣參數的表現是否穩定,即策略是否具備穩定性。

5、實盤中的問題

坑十一、用很短一段的時間去衡量策略表現是否好

若是是開發的日內策略,交易頻率很是高,可能短短的一段時間就能看出策略表現怎麼樣;若是是中長期策略,有可能半年或者一年內,策略表現都很是通常,比過去幾年的表現差多了,咱們可以說,這個策略在實盤中沒有回測好嗎?衡量一個策略的好壞,也是須要用必定的時間去積累必定的交易數量以後,才能作出判斷的。

坑十二、市場環境變化,策略失效

不存在永遠可以帶來超額利潤的策略,稍微逆向思考一下就知道了。

咱們開發出來的策略也同樣,在將來表現好很差,可能有一部分運氣的因素。若是偏偏是由於市場環境變化,市場參與者結構發生改變,過去蘊含的規律消失或者改變了,咱們的策略就可能持續產生虧損,表現離實盤差距很是多。

總結:

在咱們提出猜測和假設後,用質量比較高的數據,編寫正確的策略,科學的回測,在回測的時候儘量和真實的交易環境保持一致,而且基於咱們的猜測與假設,分析策略適應的市場環境,在實盤的時候,分析當前的市場環境,並判斷是否適合咱們的策略運行。

文章轉載自:https://zhuanlan.zhihu.com/p/164583899

廣告時間:在csdn上開了一個付費專欄,有興趣能夠訂閱下:

在這裏插入圖片描述

相關文章
相關標籤/搜索