Pandas庫提供了專門從財經網站獲取金融數據的API接口,可做爲量化交易股票數據獲取的另外一種途徑,該接口在urllib3庫基礎上實現了以客戶端身份訪問網站的股票數據。須要注意的是目前模塊已經遷徙到pandas-datareader包中,所以導入模塊時須要由import pandas.io.data as web更改成import pandas_datareader.data as web。python
查看Pandas的手冊能夠發現,第一個參數爲股票代碼,蘋果公司的代碼爲"AAPL",國內股市採用的輸入方式「股票代碼」+「對應股市」,上證股票在股票代碼後面加上「.SS」,深圳股票在股票代碼後面加上「.SZ」。DataReader可從多個金融網站獲取到股票數據,如「Yahoo! Finance」 、「Google Finance」等,這裏以Yahoo爲例。第3、四個參數爲股票數據的起始時間斷。返回的數據格式爲DataFrame。web
start = datetime.datetime(2017,1,1)#獲取數據的時間段-起始時間 end = datetime.date.today()#獲取數據的時間段-結束時間 stock = web.DataReader("600797.SS", "yahoo", start, end)#獲取浙大網新2017年1月1日至今的股票數據
一、打印DataFrame數據前5行和尾部倒數5行(浙大網新因重大事件停牌至1月6日開始復牌)算法
print stock.head(5) print stock.tail(5)
二、打印DataFrame數據索引和列名,索引爲時間序列,列信息爲開盤價、最高價、最低價、收盤價、復權收盤價、成交量微信
print stock.index print stock.columns
三、打印DataFrame數據形狀,index長度爲248,columns數爲6,即248個交易日,6項股票數據app
print stock.shape
四、打印DataFrame數據查看數據是否有缺失,以及每列數據的類型網站
print stock.info()
五、打印DataFrame數據每組的統計狀況,如最小值、最大值、均值、標準差等url
print stock.describe()
六、DataFrame數據中增長漲/跌幅列,漲/跌=(當日Close-上一日Close)/上一日Close*100%spa
(1)添加一列change,存儲當日股票價格與前一日收盤價格相比的漲跌數值,即當日Close價格與上一日Close的差值,1月3日這天無上一日數據,所以出現缺失3d
change = stock.Close.diff() stock['Change'] = change print stock.head(5)
(2)對缺失的數據用漲跌值的均值就地替代NaN。code
change.fillna(change.mean(),inplace=True)
(3)計算漲跌幅度有兩種方法,pct_change()算法的思想便是第二項開始向前作減法後再除以第一項,計算獲得漲跌幅序列。
stock['pct_change'] = (stock['Change'] /stock['Close'].shift(1))# stock['pct_change1'] = stock.Close.pct_change()
七、DataFrame數據中增長跳空缺口數值序列,這裏定義的缺口爲上漲趨勢和下跌趨勢中的突破缺口,上漲趨勢中今天的最低價高於昨天收盤價爲向上跳空,下跌趨勢中昨天收盤價高於今天最高價爲向下跳空。遍歷每一個交易往後將符合跳空缺口條件的交易日增長缺口數值。
jump_pd = pd.DataFrame() for kl_index in np.arange(1, stock.shape[0]): today = stock.ix[kl_index] yesday = stock.ix[kl_index-1] today['preCloae'] = yesday.Close if today['pct_change'] > 0 and (today.Low-today['preCloae']) > 0: today['jump_power'] = (today.Low-today['preCloae']) elif today['pct_change'] < 0 and (today.High-today['preCloae']) < 0: today['jump_power'] = (today.High-today['preCloae']) jump_pd = jump_pd.append(today) stock['jump_power'] = jump_pd['jump_power'] print stock.loc["2017-04-26":"2017-06-15"]#默認打印所有列
八、DataFrame數據保留兩位小數顯示
format = lambda x: '%.2f' % x stock = stock.applymap(format) print stock.loc["2017-04-26":"2017-06-15"]#默認打印所有列
更多python量化交易內容互動請加微信公衆號:PythonQT-YuanXiao
歡迎訂閱量化交易課程: 連接地址