配對交易提出的問題之一是股票的貝塔值相對于市場的不穩定估計。這是一個可能的解決方案的建議,這并不是真正的解決方案。
看看下圖:
Microsoft的滾動系數(回歸:MSFT~SPY)- 120 天的視窗,純藍色是使用完整樣本估計的 beta
我們可以看到截距并沒有太大的波動,這确實意味着如果市場不波動,MSFT 也不會。然而,beta在穩定的市場(貝塔 = 1)和中性(貝塔 = 0)之間波動。
當然,随着視窗的縮短,事情會變得更加不穩定,120 天大緻意味着最近的 6 個月,這并不短。也許我們可以在長期(穩定)估計和短期估計之間找到一個折衷方案。
一種方法是簡單地平均兩個估計值。另一種是使用收縮估計的方式對它們進行平均。但現在,這種方法的一個簡單解釋是平均計算 X 矩陣中的離散度,在我們的例子中,它隻是市場收益和截距,目前周期是否波動?可以使用 X 矩陣的奇異值分解來給出解釋。
我們得到一個新的 beta 估計值,它是短期和長期估計值的平均值。我們需要決定應用多少收縮。我們有一個參數,稱為超參數,它決定了要應用的收縮量,低數字意味着對長期估計的拉動較小,而一個高的數字意味着對長期的拉動較大,是以對短期估計的權重較小。結果是:
你可以看到,你應用的縮減量越大,估計值就越接近它的長期值。将超參數取為0.1将防止β值波動到負值區域,但仍為可能的結構性變化留出一些空間。你可以用這個方案來調和不穩定的估計程式和常識性的論點,例如,可能在這段時間内β值确實是負的,但這有意義嗎? 可能你的估計值變成負的,隻是因為你想允許結構性變化,這是一件好事,這導緻了 "不那麼直覺 "的估計。
以下代碼包含一個函數,用于繪制您自己的資料,将希望檢視的時間範圍、視窗長度和股票代碼作為輸入。
1. ret <<- matrix # 收益矩陣
2.
3. for (i in 1:l){
4.
5. dat0 = (getSymbols
6.
7.
8. ret<<- dat - 1
9.
10. }
11.
12.
13.
14. for (i in 1:(n-w)){
15.
16. bet0[i] = lm
17. bet1[i] = lm
18. }
19.
20.
21. btt <<- lm$coef[2] # 我們以後需要它作為一個先驗平均數
22.
23. plot
24. abline
25.
26. legend
27.
28. plotbe
29.
30.
31.
32. Aok <- 0.01 #又稱正則化參數
33.
34. A = Amoink*diag(2)
35.
36. # 你可以嘗試用不同的值來代替對角線
37.
38. # 也許你不想在另一個應用程式中縮小截距
39.
40. prbeta
41.
42.
43.
44. poet = matrix
45. for (i in 2:(n-wl)){
46.
47. bet0[i] = lm$coef[1]
48.
49. bet1[i] = lm$coef[2]
50.
51. x = cbind
52.
53. post[i,] = solve
54. }
55.
56.
57.
58. plot(postbet
59.
60. lines