前言
Pandas库提供了专门从财经网站获取金融数据的API接口,可作为量化交易股票数据获取的另一种途径,该接口在urllib3库基础上实现了以客户端身份访问网站的股票数据。需要注意的是目前模块已经迁徙到pandas-datareader包中,因此导入模块时需要由import pandas.io.data as web更改为import pandas_datareader.data as web。
DataReader方法介绍
查看Pandas的手册可以发现,第一个参数为股票代码,苹果公司的代码为"AAPL",国内股市采用的输入方式“股票代码”+“对应股市”,上证股票在股票代码后面加上“.SS”,深圳股票在股票代码后面加上“.SZ”。DataReader可从多个金融网站获取到股票数据,如“Yahoo! Finance” 、“Google Finance”等,这里以Yahoo为例。第三、四个参数为股票数据的起始时间断。返回的数据格式为DataFrame。
start = datetime.datetime(2017,1,1)#获取数据的时间段-起始时间
end = datetime.date.today()#获取数据的时间段-结束时间
stock = web.DataReader("600797.SS", "yahoo", start, end)#获取浙大网新2017年1月1日至今的股票数据
数据分析
1、打印DataFrame数据前5行和尾部倒数5行(浙大网新因重大事件停牌至1月6日开始复牌)
print stock.head(5)
print stock.tail(5)
2、打印DataFrame数据索引和列名,索引为时间序列,列信息为开盘价、最高价、最低价、收盘价、复权收盘价、成交量
print stock.index
print stock.columns
3、打印DataFrame数据形状,index长度为248,columns数为6,即248个交易日,6项股票数据
print stock.shape
4、打印DataFrame数据查看数据是否有缺失,以及每列数据的类型
print stock.info()
5、打印DataFrame数据每组的统计情况,如最小值、最大值、均值、标准差等
print stock.describe()
6、DataFrame数据中增加涨/跌幅列,涨/跌=(当日Close-上一日Close)/上一日Close*100%
(1)添加一列change,存储当日股票价格与前一日收盘价格相比的涨跌数值,即当日Close价格与上一日Close的差值,1月3日这天无上一日数据,因此出现缺失
change = stock.Close.diff()
stock['Change'] = change
print stock.head(5)
(2)对缺失的数据用涨跌值的均值就地替代NaN。
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()
7、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"]#默认打印全部列
8、DataFrame数据保留两位小数显示
format = lambda x: '%.2f' % x
stock = stock.applymap(format)
print stock.loc["2017-04-26":"2017-06-15"]#默认打印全部列
更多python量化交易内容互动请加微信公众号:PythonQT-YuanXiao
欢迎订阅量化交易课程:链接地址
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。