為什麼優礦的策略跑起來都很成功,是因為哪些因素沒有考慮到?

比方說量化學堂里最簡單的策略都遠遠跑贏了基準收益率

隨便一翻,策略似乎都非常成功。

所以請問這個基準收益率到底是在指什麼基準?為什麼這麼簡單的教學策略可以效果這麼成功?(可能是沒有考慮到手續費的原因,還有其他原因嗎?)

謝謝大家!^_^


未來函數,過擬合。


一開始寫了一個回測特別好的策略很激動,以為要走向人生巔峰了。

後來都是憑邏輯寫,回測驗證有效性的時候再也不許調任何參數。回測發現很好又很激動,以為要走向人生巔峰了。

再後來寫完回測發現結果很好的時候都是心裡默念:媽賣批,肯定又哪裡出問題了。調了參數依然表現驚人,以為要走向人生巔峰了。

後來發現回測的數據就不行,再後來發現回測這事兒就不行。 只能用來證偽,不能用來證明。


我僅就我所了解的多因子策略回答:

有一個很隱性的未來數據的問題,就是在構建策略的時候,我們是知道有哪些因子是有效的,但實際使用時可能已經失效了。最常見的就是小市值因子,社區當中包含小市值因子的策略的收益都很驚人,這是我們建立策略時已經知道了小市值因子在過去具有顯著的正收益(雖然小市值在2016年依然有效)。

然後就是社區中幾乎沒有幾個策略是做過業績歸因分析的,這樣策略回測時具體是哪一個因子貢獻了收益是說不清楚的,因子失效時不能及時發現,也不知道組合在各個因子上的暴露有多大。就我自己的歸因分析結果來看(還有bug),小市值因子的收益是在2013年之後(大概是創業板牛市開始之後)才有持續性的正收益,而這之前的正收益實際上來源於流動性不好的股票(估計背後邏輯是流動性補償,而且如果不對流動性因子做市值中性處理,原始因子數據和市值因子數據有較高的相關性)。然而要做業績歸因分析,工作量是很大的;而且有了因子收益,還需要做因子相關性矩陣,根據因子相關性矩陣做因子選取、風險調整以及最後的組合優化,這是一個人很難完成的,估計這是很少人做歸因分析的原因。

最後,不要為了凈值曲線好看而去過度的優化參數。如果選股有一定廣度(不少於50隻),不做止損(這部分工作應該在因子的選取和剔除中完成)的條件下長期相對於基準的超額收益能夠達到名義GDP增長率的3倍以上或M2增速的2倍以上應該就是一個比較優秀的策略了。

個人投資者要在量化上能完成以上的工作還真不如定投一隻量化基金,畢竟不要管什麼事情。


2017/1/20 在下面補充了幾個回溯測試中的一點小經驗,改了幾個語病和言語不當之處。

——————————

優礦、米筐等回測平台已經儘可能保證數據真實以及交易成本真實,問題中列舉的策略也確實可以取得這樣的真實收益。

那麼,陷阱存在在哪呢?

答案是: 隱形未來函數(過優化)陷阱。

圖中的第一個策略,選取了2014年下半年的牛市部分,在這個時段,隨便買大概都可以賺取指數相似的收益吧。因為牛市入市資金充足,莊家也樂於通過控盤手法做出漂亮的技術面,所以簡單的技術面擇時即可取得很高貝塔的收益。但是,如果該策略在熊市呢?很可能由於t+1和張跌停而虧地很慘。這就是你在回測時段選取上出現的「未來函數」。雖然策略沒有用到未來數據,但你人為選取了牛市進行回測,本身就是人工未來函數。假如帶著現有知識穿越時空回到2014年,您可能成為十分優秀的投資者。

問題中的圖二,其實並沒有很好的絕對收益。那麼為什麼看起來比指數優越很多?因為16年初是熊市,擇時策略都不會有開倉信號,所以沒有虧損。但是如果你把回測開始時間提前一點呢?你的持倉很可能因熔斷造成的流動性危機而遭遇踩踏。那麼這個回測的擇時也體現了上述未來函數。

作為一個商業性質的平台,客戶流量都是十分重要的。如果你給出的demo策略複雜而難以盈利,可能就會減少量化投資的吸引力從而減少流量。所以,各個平台都喜歡推出各種人為優化過的策略,甚至包括機器學習策略,吸引入門者。即使策略真的很難優化到完美收益,平台也可以通過大打學術噱頭、精心設計文案卻忽略可行性、多貼收益圖和看起來「高大上」的分析圖等方法來吸引入門者。比如Ricequant的介紹隱馬爾可夫模型的文章,策略不僅不真正回測,參數有優化,而且他直接喪心病狂地採取樣本內測試來展示出爆炸收益,最後輕描淡寫一句雖然是樣本內但是策略是很有價值的。

隱馬(HMM)在股票上的簡單應用 - 1

結果你發現,真正的乾貨都不給你貼,給的都是學術噱頭和幾個過於簡單或實際不可行的策略。

在回溯測試中我有幾點小建議:

1. 盡量使用成熟的完善的回測平台,米筐、優礦的回測機制已經較為貼合真實,如果沒有保密顧慮或其他特殊要求(如Tick級別測試),在這些地方測試是比較可靠的。如果您要自己開發,建議在熟悉市場機制的基礎上參考RQAlpha(Ricequant的簡易開源回測平台,python)等源碼。並且加入嚴苛的成交機制,比如 隨機/有目的 地滑點、部分成交。當然,這些依靠於完整詳實的歷史數據,不僅僅是OHLCV,還要有tick級別的盤口限價單等數據。各個時間段退市、ST等處理也要做好。這些數據在中國股票市場並不是輕易拿到,tushare也有種種限制,所以優礦米筐的一大好處是提供了基礎的和有保障的數據源和事件源。

2. 如果你要測試的是的是基於P-Quant的策略,一定要進行樣本外測試。比如你觀察到:在2014-2015用雙均線的指標信號明顯且雜訊少,於是設計了一套雙均線擇時策略。回測時,一定要在你觀察研究數據的時間段(2014-2015)之外進行測試!機器學習策略更不用說。

3. 不要總盯著凈值曲線,不要總盯著凈值曲線,不要總盯著凈值曲線。


就算不考慮漲跌停無法交易、手續費和滑點等等因素,單純就是優礦的數據我都是不信的。

還有,最關鍵的是優礦的默認回測時間段恰好是股市大好,躺著也賺錢的時候。如果你把時間段變為11年到現在,立馬收益就大打折扣了。


他們的數據似乎有問題,我用的工商銀行,用後復權(光用後復權是不科學的,但比不復權科學),和同花順的後復權跨幾年後的價格不一樣,差別很大,一年如果差3%,5年要差15%,可以讓一個虧損的策略變成盈利。


題主說的量化學堂中的策略是一個小市值而且回測區間比較短,所以曲線看著還行,這個初衷是為了讓礦友對因子選股有個概念,沒有做更多精細的處理。

至於其他的疑問我簡單的回答一下

上面有提到手續費和滑點等,優礦的回測框架中都是有考慮的。

交易稅費 commission

含券商手續費和印花稅,優礦回測框架默認採用買千分之一,賣千分之二的稅費也可以自己設置更改。

券商手續費:券商收的下單手續費,中國A股市場目前為雙邊收費,每個券商的手續費不一而足

印花稅:是國家強制徵收的印花稅,目前對賣方單邊徵收,對買方不再徵收,目前為0.1%

默認為commission = Commission(buycost=0.001, sellcost=0.002, unit="perValue")

滑點 slippage

在真實的證券成交環境下,下單的點位和最終成交的點位往往有一定的偏差,訂單下到市場後,往往會對市場的走向造成一定的影響。比如買單會提高市場價格,賣單會降低市場價格。

優礦為了更真實地模擬策略在真實市場的表現,增加了滑點模式,用於處理市場衝擊問題。

默認為slippage = Slippage(value=0.0, unit="perValue")

在模擬交易中還考慮了交易撮合的問題,實時行情,最優五檔即時成交

至於去除停牌股等,優礦的回測框架會對證券池進行漲跌停、停牌、未上市等情況進行預處理:

模擬投資中的賬戶,記錄了整個回測過程中的信息,包括持倉信息、當前日期等不斷變化的信息

  • 停牌:

    • 當天股票停牌、退市、未上市,則無法買入;
    • 您在handle_data函數中調用 account.universe參數,就能返回當天已經剔除了停牌、退市、未上市的股票列表。
  • 漲跌停:

    • 當天股票漲停則該股票無法買入,當天股票跌停則該股票無法賣出;
    • 調用 order 相關的下單函數後,回測框架會自動對漲跌停股票做不成交處理,訂單成交結果可以在訂單成交狀態中查看。
  • 拆分與股息:

股票偶有發生分紅、配股、拆分、合併等事件,此時股票價格和持倉數量會出現大幅的變動。

為了保障這些數據的連續性,優礦上已做前復權處理,在回測框架中使用回測框架提供的行情數據(比如 account.get_history)、回測框架在成交撮合時使用的行情數據,都已做前復權處理。

還有倖存者偏差、前視偏差、極端情況我們都提供了函數或者例子幫忙處理。

上面溫如提到了數據的問題,我們公司專門有100多人的數據團隊在進行數據的生產及清洗,這些數據在優礦上大多是免費提供給大家使用,也許我們不是最好,但我們一直在力求變的更好。

投資從來不是件容易的事,我們只希望通過自己的努力能幫助大家提升研究效率、降低運營成本,找尋alpha的路上能更加順暢一些。

附上老大 @薛昆Kelvin 成立優礦之初的理念

優礦又名Mercury水星:創始之初,只有兩樣東西;「上帝的精神(Spirit of God) 和水 (waters)。」我們提供了水,有才能的人只要有上帝造世的精神就可以了。


1:相對收益計算用的是指數,換成期貨特別是某些研報很喜歡用的ic,曲線就要糙多了。

2:回測區間一般需要2個大周期,放到a股市場就是最少07年起,否則最大回撤不準確。

3:未來數據,很多策略經不起仔細看,有些故意放未來數據為了線好看。平台應該是有按貼給錢的(完全可以理解的,正常的市場行為),好看的線很容易吸引人氣。


沒有考慮自身交易對市場產生的影響,實際上也考慮不到,畢竟是模擬交易。

如果你把回測的時間拉的足夠長,比如10年,只要不是太坑爹的策略,一般都能跑出不錯的成績來,本金也會隨之大幅增長,然而即便如此,你的交易也不會對市場產生任何影響,在真實的交易世界裡,這明顯是不現實的,只要你交易了,或多或少都會對市場產生一定的影響,但是回測裡則完全不會。

所以你看,不僅僅是量化的回測,很多人用同花順之類的模擬交易,也是模擬的時候跑的很好,一上實盤就撲街,除去心理上的因素,交易本身對市場的影響也是原因之一。


首先你要tick級別的data,而且要親自洗

其次你要大量驗證思路可行性,一遍搞數據,一遍做數值驗證,一遍做邏輯驗證,一遍再配合市場消息和合理性檢驗(sanity check),不是一個矩陣選出前多少quantile那種

再次你要塔一套回測方法和框架,不是單純的做幾個統計檢驗

然後我們再來討論策略好不好吧,我自己在quantopian上瞎玩都玩兒出過不加槓桿就400%的,然而我的第一反應是:哪會這麼簡單,還是學數學去吧……後來證明了前半句是對的,後半句……我也希望他是對的

執行的事我暫時沒啥經驗,就不說了

我和我老闆有一點意見是一致的,就是我們要做到什麼時候我們都不覺得我們是「猜」和「賭」了,再進行下一步


找了個當年我在優礦上做的一個統計套利策略,年化1700%。。。

========看起來很成功的分割線========

之前15年優礦剛上線的時候就玩過一段時間,還算比較有發言權吧

其實國內米筐、優礦等這種類quantopian的平台都大同小異,他們確實也都考慮了停牌、滑點、手續費等問題,所以原因不在此

之所以在這類平台做的策略總是看起來特別成功,主要還是在於用歷史數據不斷優化策略的弊端:即產生了嚴重的過擬合。這導致了歷史回測結果特別漂亮,但一旦實盤就會慘不忍睹。。。


有些擇時策略,選的時間短,單邊或震蕩市只包含了一種;有些選股策略沒考慮倖存者偏差,或者PL只來自加槓桿,選的period有限都不看跌市的maximum drawdown;有些訓練模型的時候過擬合,或者隱蔽用到了未來數據,比如標準化正態轉換之類預處理時候把所有數據(包括out of sample用的)都放一起處理,比如有些用到前向後向演算法的機器學習策略把回測序列一股腦丟進訓練好的模型測也會有未來數據問題。延遲滑點手續費這些就不提了。發帖的人很多都是新手,理工科出身剛接觸金融,人家自己也都一上來就承認了。anyway,新接觸一個模型時候有個人家搭好的框架可以參考還是很省事省力的…即使知道上述問題存在我還是很想真心感謝發帖子的人。除了這些其他的肯定靠自己辨別篩選思考嘗試改進啊,總不能指望你躺在那人家拿錢塞你口袋裡吧……


這兩個圖的基準應該是某個指數 比如上證、滬深300之類的大指數,具體你可以根據漲幅對照一下是哪個,我就不具體算了。

第一個圖是扣了一段牛市的策略,牛市買小盤股,隨便都可以做到圖上的結果。

第二個圖你看仔細一點,開頭大盤下跌的時候,策略是空倉的,整體的超額收益絕大部分來自於空倉的時候大盤的下跌,後面的部分,策略並沒有比大盤跑得好,差距在不斷的縮小。

總之呢,這兩個策略的問題主要在於:

1. 區間太短,你拿個長一點的時間段來測啊,就測一年多有什麼用,你知道下一年是牛市熊市么。

怎麼著也得包括一輪牛市一輪熊市吧。

你拿一小段市場,很容易寫出一個牛逼的策略來,但是有什麼用呢,下一段市場和你這一段會一模一樣么?不全面測試的策略誰敢投錢呢?偏傻子么?

2. 比較方法比較模糊,第一個圖好說一點,因為差距在不斷擴大,第二個圖明顯差距在縮小,所以看著整體有超額收益,實際上分段來看,後半段是沒有超額收益的。

策略評價要多圖標,多統計量進行評價的,只看一個圖是做不出正確的評價的。


一,最大的可能是策略在盤口的價格和量能否實現

二,交易手續費

三,不排除使用了未來信息

四,參數調節的過於理想。經不起現實因素的變化。


特別欣賞題主探索的精神,作為一個交易者看到「優礦的策略跑起來「都」很成功」注意,是「都」。首先映入腦海的難道不是「媽蛋,什麼狗屁回溯平台,是特么遊戲機吧,每個策略都成功的跟特么鬧著玩似的,果斷棄之」的情景么。怎麼還去去自身找原因了。可以說肥腸之不解了。


相比較優礦,可以看下GTA的quantrader平台,可以最大程度還原實盤跑出的績效報告,題主可以試試看


(求指教,下面說的很可能都是錯的)

有時候不是跑起來很成功啦,而是"看起來跑得很成功"。看起來很成功的策略,除開一些真的很成功意外,沒有考慮到的因素可能有:

手續費、滑點、衝擊成本等等,這些情況呢確實要考慮進去,一般來講設置在某一範圍內大概就差不多。然後剩下的,

1)統計指標。頁面上不是有好幾個指標么,但是這幾個指標能反應的信息還不夠多,有時候不足以判斷是否成功,當然了就只憑這幾個東東也是可以做一小套評估體系的,但實際上也是個產生更多指標的過程。

2)時間尺度。有時候一些策略會對某幾類市場類型適應得很好,例如牛市的時候均線突破買入之類的策略肯定亞卡西啦。

3)回測標的。突然想起一句話,這世界上沒有兩片完全相同的葉子,但拿遠了看它們都是相似的;然後反過來想,腦海中想像出一片葉子的大概紋理,然後畫出來,不斷地找總會找到片非常相似的,然而這只是千百片中的巧合而已。這也跟過度擬合有關。

4)回測時所用的成交價格。日線策略中,成交價應該用開盤價還是收盤價?(然而都不是),那小時線的又應該用哪個價?某種程度上來說,成交價格執行的事宜也會牽涉到未來函數,粗略的回測架構就不能很好地解決這個問題了,這也是上面有大俠說要搞Tick回測的原因之一吧。

但聽說那些交易平台都是基於Tick回測,然而執行細節到底是怎樣,不清楚。

5)【湊不夠五個不罷休強迫症】 沒有具體邏輯支撐,缺乏對市場的理解。好吧其實這不是量化平台考慮不考慮,而是關乎交易者、研究者本身。量化平台只是提供一個參考,一套模型;可能種種原因出來的一個策略「看起來跑得很成功」,假設還在實盤了,一開始就失效還好,最不好的就是一直以為有用,被拖入泥潭的糾結當中...不過話又說回來,誰知道明天這東西會不會失效呢,對吧?^_^


可能是過擬合 總可以選各種參數使得觀測期間收益高 但不能保證市場形態不發生變化 所以未來不一定遵守之前的pattern

也可能是倖存者偏差 站在今天選出的股票至少是活到今天沒有退市的

還可能是沒考慮可交易性(如停牌 漲跌停) 衝擊成本 手續費

還可能用了未來函數(在某些決策時刻用到了未來信息)

更可能的是 代碼寫錯了 有bug


這類網站就是精神毒品。你看了,覺得自己能了,high了,買他們的服務,讀他們的文章,給他們帶來流量,你賠光。

你問問從業人員,這類網站簡直就是笑話Z


樣本容量,滑點


推薦閱讀:

怎麼用 Python 編寫程序計算字元串中某個字元的個數?
使用anaconda以後再要使用不在conda環境中的包,要怎麼安裝?
Python 有哪些好的 Web 框架?
Python 2 和 Python 3 有哪些主要區別?

TAG:Python | 寬客Quant | 量化 | 量化交易 |