作為搬磚多年的FOF民工,哈利已經對全市場的牛逼私募和牛逼產品瞭解不少了,可alpha策略的分析一直是哈利心中的大坑。2018年量化江湖大熱,哈利也跟風買了點四大金剛的產品,但其實內心一直是這樣的:

你們這幫拿著幾百到幾千隻股票的私募到底在幹嘛

是的,這些量化私募,哈利拿著估值表看持倉都看不懂。隨著2018年量化對沖策略業績大爆發,這類策略引起了極高關注度,各種凈值曲線猶如一條45度直線斜向上的私募雨後春筍般冒出,哈利陷入了迷茫:「到底該買哪個啊???

說起這些私募,人家態度也挺好,盡調各種配合,持倉也願意盡量提供,但哈利每次看到這成百上千的股票持倉就……額我還是回去看凈值曲線吧。

領導:現在這些業績牛逼的新私募挺多啊

哈利:嗯嗯,領導說得對!

領導:好像原來那些牛逼私募業績沒新的這些牛逼啊哈利:嗯嗯,領導說得對!領導:那這些私募區別是啥?哈利:額……這個……那個……領導:去給我弄清楚!!!哈利:好的領導!

為了不失業不能慫

哈利想了兩天,發現坑越來越多,頭髮越來越少,於是找來了在私募開發策略的好哥們波特。

0. 引子:通過持倉分析alpha策略的坑在哪?

哈利:兄弟救我!怎麼才能通過持倉看懂量化對沖類私募到底在幹嘛?

波特:你先說說你的困難在哪?

哈利:簡直太多了!大部分持倉分析工具都沒法把期貨直接換成成份股分析,好不容易自己把期貨拆解了,導入Barra一看,發現因子暴露就沒發現幾個穩定的,基本都隨日期波動得很厲害。收益分解的大部分也是沒法被因子解釋的。看來看去感覺一團糊塗啊!

波特:這太正常了,我們都把Barra當風險因子來用,基本沒人用他們當alpha來開發策略啊。

哈利:。。。

波特:還有一點,Barra基本都是基本面相關的,私募大部分做價量,想通過Barra捕捉私募的alpha很困難。

哈利:吐血ing

波特:然後Barra的建模方法有其特殊性,如果我不是按Barra那種多因子回歸的方法來做alpha,你通過因子係數加和可能什麼都看不出來的。

哈利:

你TM到底在說啥

波特:我打個比方啊,假設全市場所有股票的橫截面收益率實際是Size的三次方,然後你的回歸因子就只有唯一的一個Size,那是不是你在橫截面上用股票收益率對Size回歸,也會得到一堆相應的暴露係數吧?但是很顯然你用這個係數的加和去考察投資收益和Size的關係是有問題的,這很顯然吧?就好好像這樣:

假設真實收益率是股票Size的三次方,但是回歸的自變數是Size,也是有個結果的

而且回歸結果還可以

後來Barra也發現Size因子的非線性效應影響比較大,所以他們又弄了個非線性因子進來回歸。所以這個效應是真實存在的

哈利:(似懂非懂地點點頭)。。。

波特:所以你用的那個考察私募因子效應的Barra係數其實就比較脆弱了,比如說可能我發現在Value因子上也有類似Size這樣的非線性效應,那我就可以去使用Value因子的三次方來開發alpha,比如說我把股票池按Value比率從大到小分成了三組,多第一第三組,空第二組,那雖然我的alpha是跟value是存在因果關係的,你卻沒法通過Barra的Value因子係數看出來,因為係數加和=0,就像這樣:

哈特:也就是說呢,Barra因子係數本身是分佈相關的,你得換個思路進行研究,否則會面對無窮多的因子。

哈利:所以你的意思是……哪怕你的alpha因子跟Barra因子差不多,但稍微變了下,可能我通過Barra模型就完全沒法捕捉到你的alpha了?

波特:沒錯!所以你本來就不應該用這個框架來研究alpha策略嘛(此處省略1w字……)

哈利:那我應該怎麼辦,要失業了。

波特:我們怎麼開發策略的流程,你應該知道的吧?

1. 回顧私募開發策略的步驟

哈利:這個我還是大致知道的,大概是這樣:

  1. 通過靈感/文獻/道聽途說/實習生人肉,科學地猜一個alpha
  2. 算出所有股票對應的alpha,按某種科學的方法優化出多端(在中國市場由於一般對沖端都是指數期貨所以空端比較固定)。這一步牽扯到對alpha的調整和怎麼對分層進行優化。調整方式包括各種嘗試,包括冪次啊,對數啊,邏輯函數啊,激活函數,卷積什麼的各種武器都可以上。
  3. 如果之前已經有很多alpha了,還要把這個alpha結合之前的alpha看效果,這裡不同私募處理方式不一樣,有的喜歡保持alpha之間的獨立性,有的可能喜歡結合不同的alpha創造出更強的alpha。

波特:所以你看,其實你說的後兩步其實都是升維的過程。比如說我們可能有一兩百個基本的alpha,通過各種調整、組合,最後會弄出成千上萬的變換後的alpha,你想搞清楚我們在幹嘛談何容易!

哈利:莫不是真要失業了……

波特:但也不是完全沒法看懂嘛,如果你能盡量排除2和3這後兩步的影響,那你猜測的範圍不就相當於降維了嗎?猜測我們大概用了哪些因子的難度就大大降低了啊!也就是說,你的操作步驟是跟我們相反的:

  1. 猜測一個私募可能在用的最基本的alpha
  2. 想辦法移除私募在持倉中對原始alpha的調整效應,也就是說想辦法找到一個不會被冪次對數什麼改變的統計量

哈利:說起來,我好像真的學過這麼個東西……難道就是……就是……?

波特:

你就不能馬上說出來麼

2. 免疫單調函數變換的統計量:累計分佈函數

波特:沒錯,就是累計分佈函數,定義可以見百度百科:

圖片來自百度百科,侵刪

波特:累計分佈函數CDF實際就是一個隨機變數的取值在這組隨機變數中的分位。他有一個很好的性質就是:在單調映射下會保持隨機變數的相對位置不變。也就是說,如果你買了一堆股票,並且把這些股票按照Size從小往大排列,那麼當你按Size的平方重新排列時,他們的相對位置不會發生變化。也就是說,假設你按Size排列股票時,前10個股票總共佔用了你70%的資金;那麼當你把股票重新按Size的平方排列時,依舊是這10個股票佔用了你70%的資金。

哈利:也就是說累計分佈函數CDF有這麼一個性質:

對於單調遞增映射 f,總有 CDF_X|_{X=x}= CDF_{f(X)}|_{f(X)=f(x)}

比如說我假定因子為PB時,發現多頭端投資於PB低於2的股票的資金佔比為50%,那當我把因子變為PB的平方時,多頭投資於PB的平方低於4的股票的資金依然佔比50%,這個數字是不會變的。

波特:沒錯,所以你就可以通過研究:多頭端的因子和權重、與空頭端因子和權重的差異,來推測私募是否使用了該因子用來獲利。比如說,一個比較合理的假設是,私募不會為毫無意義的事承擔風險。比如說,一個私募的策略和PB毫無關係,那他會想辦法讓多頭端的PB分佈和空頭端的PB分佈儘可能接近,這樣,它不僅可以免疫PB的一階變化,而且能免疫所有與PB分佈相關的風險,比如說PB的各種扭動,只要這種變化是近似連續的。

哈利:還是太繞了,此處應有舉例。

波特:那好吧,給你舉個例子。比如說我們這裡討論的不是股票和因子,而是小朋友和身高。顯然,身高相對於小朋友和因子相對於股票一樣,都是一個描述主體的連續空間。現在假設我們有這麼兩組小朋友:

  • A組:100個小朋友,平均身高90釐米,標準差是10釐米
  • B組:100個小朋友,平均身高也是90釐米,標準差是20釐米

我們可以看到兩組小朋友雖然平均身高一樣,但是在身高維度上的分佈不一樣(很顯然,因為標準差不一樣)。現在假設我的投資策略是給小朋友發糖,那麼:

  1. 如果給每個小朋友發糖的個數與小朋友的身高剛好成正比,那發給兩組小朋友的糖的數量是一樣的
  2. 如果給每個小朋友發糖的個數與身高相關但不是剛好成正比,(比如說,給所有身高大於1米的小朋友發1個糖,否則給0個糖),那發給兩組小朋友的糖的數量就是不一樣的
  3. 所以「均值相等」只能保證「線性策略」在兩組小朋友中有相同效果,而不能保證一個使用了身高作為輸入變數的廣義策略在兩組中具有相同效果。

哈利:但是如果兩組小朋友身高的統計分佈完全一樣,那任何與身高有關的發糖策略在兩組小朋友之間就是幾乎等價的了,因為A組和B組在統計上看是幾乎一樣的。

波特:沒錯,但是問題來了,你怎麼描述「統計分佈幾乎相同」這件事?均值一樣,方差一樣,是不是偏度和峯度也得一樣?是不是VaR95也得一樣,CVaR也得一樣?如果你計算那麼多指標,累都累死了。

哈利:還好我統計還沒完全還給老師!什麼均值方差偏度峯度啥的,實際都是N階矩嘛,只要我保證A和B的累計分佈函數一樣,所有這些統計變數都是一樣一樣的!

波特:還是舉剛才這個例子,比如說還是A和B兩組小朋友,然後我們這樣:

  1. 把兩組小朋友按身高分別從小到大排序(把股票按PB從小到大排序)
  2. 假設身高80釐米的小朋友在A組排在第10位,現在我們看B組身高在80釐米附近的小朋友,假如也排在第10位附近,那我們知道80cm在兩組裡的分佈位置是差不多的
  3. 假如說對任意身高X,在A中的排位和在B中的排位(或稱為分位,就是累計分佈值)都差不多,那麼我們就說A和B在身高這個維度上的分佈差不多
  4. 等價說法就是:對任意身高x,有 CDF_A(x)simeq CDF_B(x) ,那這兩組小朋友的身高就是統計上幾乎等價的
  5. 在這種情況下,對於任意與取決於小朋友身高的發糖策略,我們都會有在A組小朋友中的發糖數幾乎等於在B組小朋友中的發糖數。

哈利:我們甚至不用要求兩組小朋友的個數是一樣的。哪怕說A組有100個小朋友,B組有1000個,只要考察相同身高的小朋友在整個一組小朋友中可以排在從小到大的百分之幾就可以。只要這個相對排名是一樣的,兩組小朋友在身高這個維度上的累計分佈函數就是一樣的。

波特:我們把身高換成PB或者其他因子,把每個小朋友換成在PB等於某個值對應的多頭端對沖端分配的資金,那麼就把小朋友換成股票了。也就是說,如果我們的多頭端和空頭端在PB這個因子上的分佈看上去是一樣的,那我們的投資組合就可以免疫任意的因股票PB不同而引起的收益差異和影響。

哈利:我覺得上面的解釋大概可以用債券來理解……比如說我多了一些債A,空了一些債B,如果只是讓他們久期相等,那我沒法免疫凸性等風險;但是我又不大可能讓A和B的利率結構完全一致。但是從統計上來講,如果A和B都比較分散,而且他們的利率結構的分佈是相似的,那我就可以免疫所有的利率風險。

波特:就是這個意思,你用的那些Barra因子係數也是統計量嘛(實際就是均值),所以更強一點的要求就是考察是否你的多頭端在某個因子的分佈上依分佈收斂於對沖端。如果兩者同分布,則所有的統計量都是差不多的,包括但不限於均值、方差、偏差、峯度,等等所有統計量。

哈利:而且這個累計分佈函數還有一個好處就是,只要私募建模用了這個因子,後面不管他怎麼變這個因子,我都能分辨得出來。等下,我好像想到了什麼,QQ-Plot……

(大家好我叫QQ-Plot,圖片來自Wiki,侵刪)

波特:沒錯,QQ-Plot是把一組觀測量排序畫在X軸上,得到其對應分位,然後猜一個分佈,畫累計分佈函數的反函數在Y軸上,比較這條線和y=x直線的差異,看分佈差多少。

哈利:不僅如此,我們可以更近一步,使用泛函分析中對函數距離的定義來分析多頭端和對沖端的累計分佈函數的差異。

3. 以PB為例詳細說明怎樣用累計分佈函數CDF比較多頭端和對沖端的差異

哈利:以PB為例,我們可以這樣做(假設PB>0):

  1. 假設多頭端和對沖端分別有m和n只股票,先對多頭端和對沖端依據PB比率分別從小到大排列;
  2. 假設排序後,多頭端持有的第i個股票的pb和資金佔比為: (PB_i,WL_i) ,空頭端對沖的第 j個股票的PB和資金佔比為 (PB_j,WS_j) ,其中 sum_1^m {WL_i} = sum_1^n {WS_j} = 1
  3. 我們保持次序不變,求出多頭端截至i和對沖端截至j累加和,亦即: CumWL_i = sum_1^i {WL_i}CumWS_i = sum_1^j {WS_j} ,容易知道有 0<CumWLleq 10<CumWSleq 1
  4. 假設 x_i=PB_i,y_i=CumWL_i,則連接這樣的所有的i組成的曲線在 x-y 平面是單調遞增的,這就是多頭端在PB維度的經驗累計分佈函數CDF。空頭端亦然。假設多頭端的累計分佈函數是F,對沖端為G,如果直接比較二者的差異,可以取他們的L1範數,也就是: ||F-G||_{L1} = int_{-infty}^{+infty}| F(x)-G(x)| dx
  5. 但是這樣做也有可以改進的空間,比如說可能兩個因子的定義域不一樣,那他們計算出的結果可能會差異比較大,我們最好把他們變換成定義域一樣的,比較好控制,所以我們在上面的距離定義的基礎上稍微修改一下,把右邊乘以對沖端的概率密度函數g,上面的定義就可以變為: ||F-G|| = int_{-infty}^{+infty}| F(x)-G(x)| cdot g(x)dx=int_{-infty}^{+infty}| F(x)-G(x)| cdot dG(x)
  6. 很顯然我們可以令 y = G(x) ,由於G是累計分佈函數CDF,可知y的取值是0到1之間,也就是: ||F-G|| = int_0^1| F(G^{-1}(y))-y| cdot dy= int_0^1| F(G^{-1}(x))-x| cdot dx ,這裡為了閱讀習慣把y改寫為了x
  7. 上面這個距離定義就可以比較 y=F(G^{-1}(x))y=x 的差異。為了符合使用習慣,可以把結果乘以2,這樣定義域和值域值就都在0-1之間了,也就是:

||F-G|| =2cdot int_0^{1}| F(G^{-1}(x))-x| dx

波特:你說的比較抽象,實際上做法大概是這樣:把多頭端和對沖端的股票按PB分別排列,並且計算截至相應PB共佔用了多少資金,

比如說:多頭端在 PBle2 的股票中共用投入了60%的資金,空頭端在 PBle2 的股票中共投入了70%的資金,那就相當於 F(2)=0.6;G(2)=0.7 ,那 F(G^{-1}(x)) 中的x就是0.7,而我們有 F(G^{-1}(0.7))=0.6 。把這樣的差異按PB從小到大積分,也就是把 F(G^{-1}(G(PB)))-G(PB)| 從小到大積分,結果就是差不多下面這張圖,F和G之間的差異就是圖中標黃部分:

哈利:恩,這麼做也相當於給QQ-Plot的x和y軸都取了一個相同的累計分佈函數,好處是我們得到的這個陰影面積基本是不隨因子而變化的,比如說,不論你用PB,還是MACD,最後都是比較兩條線圍成的面積,且定義域和值域範圍都是0到1,且其中一條是y=x這個直線。

波特:所以最終你會得到一個值,我們就姑且稱為CDF(PB)吧,這個值衡量了多頭端和對沖端在PB因子分佈上的差異,如果:

  • CDF(PB)很大,說明私募多頭端和空頭端的PB分佈差異巨大。如果多個日期的CDF(PB)都很大且取值保持穩定,說明私募大概率使用了PB做了一部分alpha,否則沒必要持續在上面暴露敞口。
  • CDF(PB)很小,接近0:說明多頭端和對沖端的PB分佈差不多。如果多個日期的CDF都很小且波動不大,說明私募大概率沒用PB做alpha,且不想在上面暴露風險。
  • 你可以猜很多很多的alpha,幾百到幾千個,就可以大致描繪出私募的策略特徵。當然也可以懶省事使用第三方已經開發好的alpha。

4. 舉個栗子

波特:比如說我有個策略是做小盤股的高頻交易的,對沖中證500,在猜測的100多個因子上的10-12月的多空分佈有一堆取值。最大的一些暴露是這樣:

暴露最大的因子們

上面前三列就是計算出的不同日期的 ||F-G|| ,後兩列是他們的均值和標準差(此處比較不嚴格,僅展示用)。你可以看到在vol5、atr6之類的因子上暴露巨大且穩定,而這兩個因子恰恰表示額流動性和波幅,自然就證實了我做的確實是高頻策略了,因為邏輯上確實是策略的偏好。

暴露最小的因子們

你再比如說這些是暴露最小的因子,基本都是基本面相關的,說明我故意把基本面的影響給去掉了,所以基本面上的正常變動都大概率不會對我產生給你影響。直觀一點可以看CDF曲線本身,比如這是vol20的(圖中CdfFit和PdfFit是用多項式Fit的結果,用於觀察,比較直觀,不嚴格):

可以看到多頭端相比對沖端很明顯偏好高換手的股票。再看一下netassetps:

可以看到cdf和y=x幾乎重合,說明多頭和對沖端在該因子上的分佈是幾乎一樣的。

哈利:所以通過這個手段,我可以直接從多頭端和對沖端在某個維度(如PB)上的分佈是否一致的角度出發,推測這個私募是把一個因子當成自己的收益還是風險,或是完全忽略該因子,從而證實或者證偽私募是否在從事某個策略。

波特:對頭,直接從分佈出發,可以避免讓你陷入構造完一個因子以後又構造因子的平方、開方、或者其他函數來考察私募是否真的使用了某個因子作為收益來源,顯著降低你的分析難度。

哈利:不過也有缺點吧,沒法真的把收益分解到單個因子上。

波特:你說的這個就有點難了,收益分解本身就一堆誤差,你可能讓自己陷入無窮無盡額麻煩中。畢竟是看持倉反推,能得到的信息有限。而且這個分解其實跟我們開發策略的邏輯是不一樣的。比如說,你對收益分解出來發現我在某個Barra因子上的收益是正的,這能說明我真的用了這個Barra因子建模了嗎?可能我其實只是沒錢買Barra,所以沒在意這個因子暴露。但是這個因子接下來這段時間走勢特別牛逼,完全超出我的預期,這其實跟我建模沒關係嘛。收益分解本身是事後的,我在建模的時候只能根據一個因子過去的統計性質科學地猜測未來會不會好,而當我真的選擇因子暴露時,收益還未發生,是個未來變數,我是沒有水晶球可以直接知道未來的。我們是開發策略的,不是魔法師。收益分解本身是種評價體系,但是能否還原策略邏輯呢?我是持懷疑態度的。

哈利:那這個CDF應該沒法用在無法排序的維度上吧?

波特:恩,對於行業之類的分類維度,因為你無法定義一個合理的鄰域(比如醫藥的隔壁應該是什麼?化工嗎?估計醫藥股不同意)。所以這個方法是用不上的。

哈利:還有什麼缺陷嗎?

波特:非要說的話,就是你只能把私募的持倉歸結為你已知的因子。這就好像一件事的前因後果,如果完全超出你的理解和知識範圍,你是沒辦法找到的。一個極端的例子是私募做的是純高頻,多頭和空頭端在收盤時完全對沖,你堆再多的因子都沒用,因為這段信息超出了持倉能提供的信息範圍。

哈利:好吧好吧,至少比我什麼工具都沒有好多了。


推薦閱讀:
相關文章