動量因子?
在經(jīng)典物理學上有一個描述表示物體質(zhì)量和速度的乘積的物理量,物理學家們將其命名為動量,通俗來講這個物理量描述的是運動物體的作用效果。一輛高速運動質(zhì)量很大的卡車就擁有一個很強大的動量,而一個低速運動的自行車的動量反而就不那么大了。換一句話說動量很大的大卡車相比與低速運動的自行車而言,很難停下。而在過去的股票市場中,很多投資者都喜歡采取追漲殺跌的方式購買股票(或是一些其他標的的投資)。但是這一切都只是一種假設(shè),在學術(shù)界并沒有一個嚴格的論證(雖然沒有論證但是很多投資者已經(jīng)基于動量因子構(gòu)建了一些動量策略獲得了不菲的利潤)。
而直到1993年,Jegadeesh和Titman發(fā)表在上的論文首次從經(jīng)濟學的角度探討了從1965年到1989年的美國股票市場上發(fā)生的動量效應(yīng)。
首先我們來看一下動量因子的定義,我們可以利用計算個股(或其他投資標的)過去N個時間窗口的收益回報, 收益回報的計算公式如下:
?
那么這個return就可以被稱為價格的動量,這里我們使用了收盤價作為計算動量的標注,在實際的因子開發(fā)和挖掘中我們還會使用不同的計算方法,例如
?
?
來計算受盤中最高價和最低價的調(diào)整的調(diào)整收盤價動量。這樣做的邏輯是,在日線的層面上我們收盤價往往可以表示市場主力資本對標的物的價值判斷(由于夜間停盤時無法進行市場交易,資本需要將標的物的價值調(diào)整到合理的范圍規(guī)避資本風險),而最高價和最低價往往反應(yīng)了市場投機者(職業(yè)交易者與散戶投資)的情緒,同時合理考慮這樣的多方情緒可以更好的衡量市場的動量變化。
現(xiàn)在我們來嘗試使用Python構(gòu)建動量因子, 在python計算動量因子只需要一行代碼即可實現(xiàn), 其中timeperiod就是我們的時間位移窗口N:
上面是動量因子最簡單的實現(xiàn)方式,那么同樣我們可以看一下調(diào)整后的價格動量因子如何實現(xiàn):
上圖是我們的繪制了2根k線動量與2根k線調(diào)整收盤價動量的分析,可以看出調(diào)整價的兩日動量明顯更加明顯。
那么到這里我們的動量因子就已經(jīng)實現(xiàn)完成了,但是由于股票的價格是一個隨經(jīng)濟或標的本身經(jīng)營情況有變化的變量。那么如果變量有指數(shù)增長趨勢(exponential growth),比如 GDP,股票價格,期貨價格,則一般取對數(shù),使得 lnGDP 變?yōu)榫€性增長趨勢(linear growth)。
這里我們還可以將我們的因子轉(zhuǎn)變?yōu)椋?/p>
def barMon(data, timeperiod=2):
return np.log(data['price'] - data['price].shift(timeperiod)
或是調(diào)整收盤價因子:
我們看到由于對數(shù)值取了對數(shù),所以我們發(fā)現(xiàn)動量為負值的時候動量變得不連續(xù)了(小于零的值的對數(shù)在實數(shù)域上我們不考慮)。除此之外上述這樣的因子考慮的夠全面了么?我們知道不同的交易標的由于價格不一樣所以價格浮動的絕對值也大相徑庭。
例如,
股票A 的每股價格是2000元,當日漲幅1% ,該股的對應(yīng)上漲的價格是20元/股
而股票B的每股價格是20 元,當日漲幅達到了漲停板的10%,該股的上漲的對應(yīng)絕對值2元/股。
那么依照前面的動量計算公式,A股的一日動量值為 20, B股的一日動量值為2每股。
這樣的動量顯然沒有辦法很好的衡量投資標的物在市場中的變化量(這里主要是針對依據(jù)動量選股策略做出調(diào)整,因為需要比較不同標的之間的動量關(guān)系)。
所以我們繼續(xù)修改動量指標的計算方式:
所對應(yīng)的調(diào)整收盤價的動量計算方式就為:
可以看出在對數(shù)百分比角度上這兩個因子就相差比較小了, 在實際的動量策略中我們常常是使用這樣的經(jīng)過對數(shù)調(diào)整的因子。那么到這里我們動量因子的構(gòu)建方式就完成啦!