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
欢迎订阅量化交易课程: 连接地址