簡介量化金融中使用的時間序列模型(一)
在計量經濟學領域中,我們主要研究三種資料,即橫截面資料、面板資料和時間序列資料。其中橫截面資料研究在一個給定的時間點上,不同觀測樣本的狀態,例如:2016年12月16日全國各個城市天氣質量AQI指數。面板資料指的是某些給定的樣本在給定的時間跨度內的觀測值。例如:2016年全國各個城市每日的天氣質量指數。而時間序列研究一個個體在一段時間跨度內的變化。其特點為,每個觀測值前後相關性很強,基本很難滿足簡單最小二乘法中隨機抽樣的假設。故時間序列資料有自己獨特的一套研究方法,常用模型包括均值模型,波動率模型,非平穩模型等。
Python中的statsmodels工具包中的tsa模組提供了時間序列的函式,包括ARMA,VAR等模型,方便我們使用。
在這部分中,我主要介紹移動平均和平穩性兩部分內容。
1. 移動平均(Moving average)
移動平均是用來刻畫一個時間序列在最近一段時間內的走勢的指標,其波動比原序列要小,平滑期數越長移動平均值越平緩。移動平均廣泛的應用在各種股票的技術分析指標中(即均線),長短期均線結合使用可作為資產走勢的判斷依據,例如MACD,DMA,CCI等。均線是對趨勢的確認,有滯後性。包括有簡單移動平均,指數移動平均等。
a) 簡單移動平均(Simple moving average):
M期簡單移動平均計算方法為
其中A為原始序列,A-bar為平滑後的資料。
此處以滬深300為例,利用matplotlib畫出今年300指數的價格和十五日均線。
1 2 3 4 5 6 7 8 9 10 11 |
import matplotlib.pyplot as plt
from pandas import DataFrame
def macd(priceSer,n):
return priceSer[ - n:].mean()
df = get_price( '000300.SH' ,start_date = '2016-01-01' ,end_date = '2016-12-15' ,fields = [ 'close' ])
MA = []
for i in range (df.__len__()):
MA.append(macd(df[ 'close' ][:i], 15 ))
df[ 'MA' ] = MA
plt.plot(df)
plt.show()
|
可以看到,均線反映了滯後的走勢資訊。
b) 加權移動平均(Weighted moving average):
簡單移動平均相當於給滯後期內的資料同等權重,而加權移動平均則對滯後期內資料賦予不同的權重。往往會給較短滯後期的資料賦予更高的權重,因為事件發生過去的時間越近,對現在的情況的影響越大。加權移動平均的特例是指數移動平均(Exponential moving average。可用遞推表示式表示:
其等價於:
在選擇移動平均滯後期和指數移動平均的係數a的時候,應根據原始資料的特徵判斷。若原始資料波動較大,則應選擇較長的滯後期,和較小的a;若原始資料較平穩,則應選擇較短的滯後期和較大的a。這樣可以獲得容易觀察到明顯趨勢的均線。
2. 平穩性(Stationary)
平穩性,簡單來講就是統計性質不隨時間改變的性質。它是時間序列分析中的一條重要假設。我們平常討論的平穩條件,指的是寬平穩條件,即隨機過程Xt的均值、方差均不隨時間t改變,且Xt與Xs的協方差只和t-s有關係。
為什麼時間序列分析要求輸入序列平穩呢?大數定律和中心極限定理是很多統計推斷的依據。而這兩個定理都要求樣本是隨機抽樣的。在時間序列中,這個要求就等價於上述平穩序列的條件。同時,非平穩的時間序列會導致偽迴歸的問題。所以說,平穩性是時間序列分析的前提。
我們仍然以滬深300指數今年的價格線為例。首先繪製價格線的折線圖,可以明顯發現價格帶有趨勢性,是非平穩的序列,不符合時間序列的基本假設。
完整閱讀:http://club.jr.jd.com/quant/topic/956213