【量化交易】 策略評價與建立模擬【008】

本文是量化交易零基礎入門教程中的一篇,點擊藍字鏈接可查看該系列詳情。


摘要

  • 評價策略回測的指標
  • 建立模擬交易
  • 未來函數
  • 運行過慢
  • 過擬合
  • 策略失效
  • 收益與風險的取捨
  • 自測與自學

  • 在學習瞭如何編寫策略後,我們將介紹下評價策略回測的指標,如何建立模擬交易,以及除回測之外還有哪些需要關注的方面。

策略回測指標

  • 如下圖,一個策略回測後會給出一些指標,可以在 API 文檔:風險指標查看這些指標的公式及基本說明。下文將補充介紹下幾個重要指標。
    回測指標
  • 策略收益。這是最基礎的指標,衡量回測期間策略收益率的。
  • 基準收益。基準默認是滬深 300 指數,所以此指標是回測期間基準收益率的。一般來說,基準收益代表市場整體的收益情況,所以如果策略收益長期低於基準收益,往往意味着策略是失敗的。通過 set_benchmark () 這個 API 可以自定義基準。
  • 年化收益率。年化收益率是一個衡量策略盈利能力的重要指標,越大越好。剛剛講的策略收益這個指標是和回測時間長短強相關的,比如一個普通策略運行 10 年肯定比優秀的策略跑半年策略收益高,但這樣就不利於比較策略的盈利能力。因此,通過數學方法,把策略收益統一互相化歸爲一年時間的收益率,比如 10 年的變爲平均每年的收益率,半年的變爲以這半年盈利能力運行一年的收益率,如此一來,讓策略盈利能力在比較時有了一個大致等同的時間標準。
  • 最大回撤率。最大回撤率是一個衡量策略風險的重要指標,越小越好。新手初見這個指標的時候可能會感到一點點的困難,其實這個指標是對應着一個很自然的想法的,比如,你現在要實盤用真錢去跟一個策略操作,而你現在是知道這個策略的過去一段時間的歷史收益曲線的,你覺得你的最大虧損率估計是多少?建議讀者自己隨手畫下幾條曲線當做歷史收益曲線,思考下這個問題。一個經典的回答就是最大回撤率的含義,它的思路是這樣的,既然我們還在拿歷史數據做回測,說明我們應當還是相信歷史對未來有指導意義的,那麼我現在實盤用真錢去跟策略操作,接下來我們假設策略收益的未來走勢應當是跟歷史走勢相當的,歷史走勢有一直漲的時候,也有一直跌的時候,那麼我實盤跟策略最大虧損率應該就是,我剛開始跟策略就開始走的跟歷史走勢中一直跌的那一段那樣,而且是一直跌且跌的最多的那段,那麼歷史走勢中一直跌且跌的最多的那段跌跌了多少呢?用人眼一般很容易找到是哪段,而且聚寬的回測圖中也標出了,如下圖。不過不妨進一步思考下怎麼算出最大回撤率,然後看下文檔中的公式說明,看你的結果是否正確。當然,初學者知道最大回撤率越小越好可能就夠了,但有志者應該藉機學習如何思考如何評估風險以及量化風險,因爲難度相對不高。
    回撤.png
  • 交易次數。交易次數其實是一個可以初步衡量策略回測結果是否可靠的指標,過少往往意味着回測結果不可靠。試想這樣一種情況,別人給你推薦一個策略,策略進行了 10 年曆史數據的回測,年化收益非常高,最大回撤非常小,你很高興,但仔細一看,交易次數只有 2 次,此時,你願意用真金白銀去使用這個策略嗎?你難免會想可能只是這 2 次操作運氣好而已,這樣的回測結果雖好但是不可信不可靠。其實這基於一個簡單統計學思想,樣本過少,則統計結果不可靠,所以足夠多的交易次數才能讓回測結果有說服力。目前,回測結果中不能直接看到交易次數了,可以通過回測結果頁面的其他指標中的盈利次數與虧損次數相加得到,也可以通過回測結果圖表下面的每日買賣大致看出,位置如下圖。
    買賣次數.png
  • Alpha(阿爾法)與 Beta(貝塔)。在資本資產定價模型(CAPM)中,投資組合的收益被分爲和市場系統風險相關與和市場系統風險無關的兩部分,而 Beta 與 Alpha 這兩個希臘字母則是該模型中的兩個重要係數,分別代表這相關部分與無關部分。其實策略持有的股票可以看成一個投資組合,基準收益作爲市場系統收益,Beta 則是代表相關部分的策略收益相對市場波動的倍率,如 Beta 爲 2 則代表市場漲 1%,相關部分的策略收益波動漲大概 2%(統計意義上並非實時精確),beta 爲負數代表與市場反向變動。而 Alpha 則代表獨立於市場波動不受其影響的無關部分的策略收益,越大越好,所以如果策略年化收益爲負但 Alpha 爲正而且很大,說明策略有超過市場的盈利能力,不過策略整體盈利被與市場相關部分拉下來了。爲了便於理解,Alpha 與 Beta 的含義講的很粗暴,建議數理基礎不錯的有志者有空去自學下 Alpha 與 Beta 的構造思路與過程。
  • 夏普比率(Sharpe Ratio)。代表所承擔的單位風險所帶來的收益,越大越好。夏普比率是在資本資產定價模型進一步發展得來的,不展開講。

建立模擬交易

  • 之前講過回測是用歷史數據模擬執行策略,模擬交易是用未來的實際行情模擬執行策略,因此當策略完善的自以爲差不多沒什麼問題時,建議建立一個模擬交易觀察一段時間,當作進一步的檢驗。建立的模擬交易的方法很簡單,點擊回測結果界面,如下圖,右上部紅色模擬交易按鈕,即可新建模擬交易。
    模擬交易1.png
  • 建立模擬交易成功後,點擊聚寬導航欄我的交易,可以看到創建的模擬交易,如下圖。
    模擬交易2.png
  • 點擊右邊的微信通知開關,將 OFF 調到 ON,按照指示掃描二維碼,綁定微信,就能微信接收交易信號了。當策略買賣操作,微信會收到信號提醒類似下圖。自定義消息內容請看 API send_message
    微信通知

未來函數

  • 未來函數的前文講過,即指策略利用了歷史當時無法得到的信息,造成回測結果極大失真。未來函數排查方法一般是人工查看,重點看一切跟時間有關的地方,尤其注意各個 API 關於時間的默認處理方法。當然有時未來函數隱藏的很隱蔽,而更好但稍花時間的方法是用策略建立模擬交易,一般讓模擬交易運行幾天,多數未來函數問題都能被發現,因爲模擬交易是不可能引入未來數據的,所以往往引入未來函數的策略無法成功運行模擬交易。
  • 需要注意的是有時同一個代碼的策略在模擬交易中是沒有引入未來函數的,而是在歷史回測中引入未來函數。此時會發現歷史回測結果很好,模擬交易也能正常運行,但回測結果是失真的,而模擬交易運行時間長了往往也與回測相去甚遠。一個具體的情況是,策略無意中引入了未來信息,導致策略選的股票過去一年中漲的最好的股票買,那麼當然用過去一年做回測時效果會很好,但在模擬交易中可能就效果很差。
  • 一條判斷策略引入未來函數的經驗法則是,當你發現策略回測收益極高,回撤又極低,而且各個時間段表現都特別好,感覺自己發現了自動印鈔機式的交易策略時,則此策略大概率是引入未來函數了:)

運行過慢

  • 策略的運行效率也是需要關注的問題,儘管新手幾乎不會遇到,但需要簡單瞭解下,有個意識。有時策略比較複雜,計算量會很大,極端時可能會造成交易延遲,延誤買股票的時機,分鐘級策略尤其需要關注下耗時問題,而相關函數就是 enable_profile () API 文檔 - 性能分析
  • 用法就是把 enable_profile () 這行代碼複製粘貼放到策略代碼的第一行。然後你成功回測後可以在回測詳情頁面查看性能分析的結果,如下圖,從而可以查看哪行代碼耗時比較多,從而有目的性的去改進。
    性能分析

過擬合

  • 過擬合(overfitting)常用於描述這樣的情況。策略一般都有一些參數,如持股數量、交易頻率等,選擇不同的參數,固定的一份歷史數據下,策略的回測結果好壞也不同,人們往往會選回測結果最好的參數作爲策略的參數使用,但隨後若換了一份歷史數據(換一個時間段)做回測或隨後用現實數據運行模擬或實盤,發現效果遠不如之前的回測結果,此時很可能策略的參數過擬合了,或說之前選回測結果最好的參數這一行爲使參數過擬合了。當參數多的時候,更容易發生。
  • 過擬合的核心思想是,過度細緻的解讀樣本數據,從而沒有認識到本質的規律,從而使策略或系統失去了普適性,對原樣本數據表現極其優異,但對非原樣本數據外情況的有效性大大降低。
  • 一個關於幫助理解過擬合的比喻是,老師拿一個試卷(樣本數據)考學生(策略),學生成績不理想,老師要教學生(調整參數),此時老師不是教學生學科原理,而是教學生背試卷的答案(過度擬合),當然結果會導致,當再考同一個試卷時學生肯定表現極度優異,但因爲只背了答案而沒理解原理,所以當換套題目或應用時學生就表現極差了。
  • 因此在選擇並優化策略的參數時,要考慮參數的魯棒性,即策略好壞對參數變化的敏感性。對於參數優化與選擇對應有複雜最優化理論與魯棒性測試,對初學者在此問題建議是,控制參數數量,多測幾組參數大致看下參數變化對策略的影響,另外考慮進行樣本外測試,即用一份樣本數據回測挑選參數,用另一份樣本數據回測看選擇的參數在樣本外情況下表現如何。

策略失效

  • 策略一般是有時效的。當你的策略十分完善,並且模擬效果理想,實盤效果也很理想,不要以爲策略就會像印鈔機一樣一直賺錢,策略可以失效的,比如當策略運行中出現歷史上罕見的情形時往往就要警惕了,比如最大回撤創歷史新高,策略收益率不再增加甚至減少等。如何判斷策略是否失效以及找出失效的原因並無通法,但策略失效的原因可能有以下幾種,可供參考。
  • 策略生效的邏輯基礎不再成立。比如策略的有效性是建立在漲跌停製度下的、或是建立在某行業不斷成長前提下的、或是建立在全球某資源持續稀缺前提下的等,當這些制度或前提不再成立,如制度調整、新政發佈、科技進步等,那麼策略自然也就失效了。因此,理解策略有效的邏輯是十分重要的。
  • 操作資金量過大。更大的操作資金,會導致更大的衝擊成本,即使買入時價更高、賣出時價更低,而當操作資金過大使市場流動性不足承載時,衝擊成本會極大的變高,大大降低利潤,甚至導致虧損。所以策略是有資金容量的,建議逐步增大策略操作資金量。
  • 市場上運行的相似策略過多。同類相似的策略都想賺市場上的同一份錢,然而這份錢是有限的,所以這些策略彼此間會競爭,導致策略賺錢變難,甚至完全失效賺不到錢。具體的表現可能是要買的股票買不到、想賣的股票賣不到理想價位等。因此,交易行業是非常注意保密且不適合分享的行業,而有志者則要注重培養自學能力。
  • 市場出現了寄生策略。當你的策略被發現市場中的有心人發現並足夠程度的監測時,他可以寫出一個針對你策略的策略,從而寄生在你的策略上,比如在比你買之前買入,在你買後拉昇股價後賣。這種針對你策略的寄生策略,往往會壓縮你策略的盈利空間,使策略失效。

收益與風險的取捨

  • 往往策略的收益能力與抗風險能力是互相制約不能兼顧的,兩者之間如何取捨建議是,達到基本的收益能力後,極力追求低風險,理由是盈利水平往往可以通過增加資金量來提高。具體的講就是,策略 a 是一個年化收益率 300%,最大回撤率 50% 的策略,策略 b 是一個年化收益率 30%,最大回撤率 5% 的策略,只要給策略 b 提供相當於策略 a 的 10 倍的資金量,兩者盈利能力就是一樣的,但很難讓策略 a 有像策略 b 一樣的抗風險能力。

自測與自學

  • 嘗試下建立模擬以及用微信接收交易信號。
  • 到聚寬的策略擂臺欄目看看他人的策略。
  • 策略成功回測後,體驗下歸因分析這個新功能,位置如圖。
    歸因分析.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章