TuShare是一個(gè)免費(fèi)、開(kāi)源的python財(cái)經(jīng)數(shù)據(jù)接口包。主要實(shí)現(xiàn)對(duì)股票等金融數(shù)據(jù)從數(shù)據(jù)采集、清洗加工 到 數(shù)據(jù)存儲(chǔ)的過(guò)程,能夠?yàn)榻鹑诜治鋈藛T提供快速、整潔、和多樣的便于分析的數(shù)據(jù),為他們?cè)跀?shù)據(jù)來(lái)源方面極大地減輕工作量,使他們更加專(zhuān)注于策略和模型的研究與實(shí)現(xiàn)上??紤]到Python pandas包在金融量化分析中體現(xiàn)出的優(yōu)勢(shì),TuShare返回的絕大部分的數(shù)據(jù)格式都是pandas DataFrame類(lèi)型,非常便于用pandas/NumPy/Matplotlib進(jìn)行數(shù)據(jù)分析和可視化。
其支持獲取的股市數(shù)據(jù)有:交易數(shù)據(jù)、投資參考數(shù)據(jù)、股票分類(lèi)數(shù)據(jù)、基本面數(shù)據(jù)、龍虎榜數(shù)據(jù)、宏觀經(jīng)濟(jì)數(shù)據(jù)、新聞事件數(shù)據(jù)、銀行間同業(yè)拆放利率等大類(lèi),每個(gè)大類(lèi)下面又細(xì)分一些小類(lèi)。
一、安裝與升級(jí)
同其他python模塊的安裝使用方法一樣,即可以通過(guò)pip、easy_install 工具包進(jìn)行安裝,也可以通過(guò)源碼包進(jìn)行安裝。
方式1:pip install tushare
方式2:訪問(wèn)https://pypi.python.org/pypi/tushare/下載安裝
從github上的源碼包可以看出,作者非常的勤奮,更新的速度非常快,所以也可以通過(guò)如下方法進(jìn)行升級(jí):
pip install tushare –upgrade
二、數(shù)據(jù)獲取相關(guān)
這里以最經(jīng)常使用的幾個(gè)交易指標(biāo)為例,做下匯總。
1、歷史數(shù)據(jù)
import tushare as ts
ts.get_hist_data('600848') #一次性獲取全部日k線數(shù)據(jù)
ts.get_hist_data('600848',start='2015-05-01',end='2015-06-18') #指定時(shí)間區(qū)間
ts.get_hist_data('600848',ktype='W') #獲取周k線數(shù)據(jù)
ts.get_hist_data('600848',ktype='M') #獲取月k線數(shù)據(jù)
ts.get_hist_data('600848',ktype='5') #獲取5分鐘k線數(shù)據(jù)
ts.get_hist_data('600848',ktype='15') #獲取15分鐘k線數(shù)據(jù)
ts.get_hist_data('600848',ktype='30') #獲取30分鐘k線數(shù)據(jù)
ts.get_hist_data('600848',ktype='60') #獲取60分鐘k線數(shù)據(jù)
ts.get_hist_data('sh')#獲取上證指數(shù)k線數(shù)據(jù),其它參數(shù)與個(gè)股一致,下同
ts.get_hist_data('sz')#獲取深圳成指k線數(shù)據(jù)
ts.get_hist_data('hs300')#獲取滬深300指數(shù)k線數(shù)據(jù)
ts.get_hist_data('sz50')#獲取上證50指數(shù)k線數(shù)據(jù)
ts.get_hist_data('zxb')#獲取中小板指數(shù)k線數(shù)據(jù)
ts.get_hist_data('cyb')#獲取創(chuàng)業(yè)板指數(shù)k線數(shù)據(jù)
關(guān)于復(fù)權(quán)的概念不了解,這里略過(guò)。接下來(lái)看實(shí)時(shí)數(shù)據(jù)。
2、實(shí)時(shí)數(shù)據(jù)
獲取當(dāng)天所有的行情信息,無(wú)法指定具體某一支的行情
import tushare as ts
ts.get_today_all()
歷史分筆與實(shí)時(shí)分筆(買(mǎi)賣(mài)盤(pán)統(tǒng)計(jì)):
import tushare as ts
df = ts.get_tick_data('600848',date='2014-01-09')
df.head(10)
df = ts.get_today_ticks('601333') #當(dāng)天歷史分筆
df.head(10)
import tushare as ts
df = ts.get_realtime_quotes('000581') #Single stock symbol
df[['code','name','price','bid','ask','volume','amount','time']]
#symbols from a list
ts.get_realtime_quotes(['600848','000980','000981'])
#from a Series
ts.get_realtime_quotes(df['code'].tail(10)) #一次獲取10個(gè)股票的實(shí)時(shí)分筆數(shù)據(jù)
3、大盤(pán)指數(shù)
import tushare as ts
df = ts.get_index()
4、新股數(shù)據(jù)
獲取打新數(shù)據(jù):
import tushare as ts
ts.new_stocks()
5、基本面數(shù)據(jù)
基本面數(shù)據(jù)里包含選股的很多依據(jù)指標(biāo),如:市盈率、市凈率、每股收益、凈利潤(rùn)、季報(bào)、應(yīng)收賬款周轉(zhuǎn)率、凈利潤(rùn)增長(zhǎng)率(%)、流動(dòng)比率、速動(dòng)比率、現(xiàn)金流量比率等。
import tushare as ts
ts.get_stock_basics()
#獲取2015年第1季度的業(yè)績(jī)報(bào)表數(shù)據(jù)
ts.get_report_data(2015,1)
#獲取2015年第1季度的盈利能力數(shù)據(jù)
ts.get_profit_data(2015,1)
#獲取2015年第1季度的營(yíng)運(yùn)能力數(shù)據(jù)
ts.get_operation_data(2015,1)
#獲取2015年第1季度的成長(zhǎng)能力數(shù)據(jù)
ts.get_growth_data(2015,1)
#獲取2015年第1季度的償債能力數(shù)據(jù)
ts.get_debtpaying_data(2015,1)
#獲取2015年第1季度的現(xiàn)金流量數(shù)據(jù)
ts.get_cashflow_data(2015,1)
三、數(shù)據(jù)存儲(chǔ)
tushare自身提供了常用的數(shù)據(jù)保存格式:csv格式、excel格式、HDF5文件格式、JSON格式、mysql關(guān)系數(shù)據(jù)庫(kù)、nosql數(shù)據(jù)庫(kù)。
1、to_csv方法
import tushare as ts
df = ts.get_hist_data('000875')
#直接保存
df.to_csv('c:/day/000875.csv')
#選擇保存
df.to_csv('c:/day/000875.csv',columns=['open','high','low','close'])
某些時(shí)候,可能需要將一些同類(lèi)數(shù)據(jù)保存在一個(gè)大文件中,這時(shí)候就需要將數(shù)據(jù)追加在同一個(gè)文件里,簡(jiǎn)單舉例如下:
import tushare as ts
import os
filename = 'c:/day/bigfile.csv'
for code in ['000875', '600848', '000981']:
df = ts.get_hist_data(code)
if os.path.exists(filename):
df.to_csv(filename, mode='a', header=None)
else:
df.to_csv(filename)
2、to_excel方法
import tushare as ts
df = ts.get_hist_data('000875')
#直接保存
df.to_excel('c:/day/000875.xlsx')
#設(shè)定數(shù)據(jù)位置(從第3行,第6列開(kāi)始插入數(shù)據(jù))
df.to_excel('c:/day/000875.xlsx', startrow=2,startcol=5)
3、to_hdf方法
import tushare as ts
df = ts.get_hist_data('000875')
df.to_hdf('c:/day/hdf.h5','000875')
或
import tushare as ts
df = ts.get_hist_data('000875')
store = HDFStore('c:/day/store.h5')
store['000875'] = df
store.close()
4、to_json方法
import tushare as ts
df = ts.get_hist_data('000875')
df.to_json('c:/day/000875.json',orient='records')
#或者直接使用
print df.to_json(orient='records')
5、to_sql方法
from sqlalchemy import create_engine
import tushare as ts
df = ts.get_tick_data('600848', date='2014-12-22')
engine = create_engine('mysql://user:passwd@127.0.0.1/db_name?charset=utf8')
#存入數(shù)據(jù)庫(kù)
df.to_sql('tick_data',engine)
#追加數(shù)據(jù)到現(xiàn)有表
#df.to_sql('tick_data',engine,if_exists='append')
如下圖:
5、寫(xiě)入mongodb
通過(guò)官方的示例來(lái)看,并沒(méi)有直接提供寫(xiě)入mongodb的方法,不過(guò)mongodb支持json格式的輸入,這里“曲線救國(guó) ” 下:
import pymongo
import json
conn = pymongo.Connection('127.0.0.1', port=27017)
df = ts.get_tick_data('600848',date='2014-12-22')
conn.db.tickdata.insert(json.loads(df.to_json(orient='records')))
四、數(shù)據(jù)繪圖
上面都是拾人牙慧的東西,這里來(lái)一點(diǎn)點(diǎn)干貨。由 tushare 處理輸出的格式已經(jīng)經(jīng)過(guò)整形,所以可以結(jié)合pandas模塊可以很好的進(jìn)行匯圖,如下:
import tushare as ts
import pandas as pd
df=ts.get_hist_data('600415',start='2015-04-01',end='2015-06-18')
# 所有的結(jié)果匯圖
df.plot()
# 只將stock最高值進(jìn)行匯圖
df.high.plot()
# 指定繪圖的四個(gè)量,并指定線條顏色
with pd.plot_params.use('x_compat', True):
df.open.plot(color='g')
df.close.plot(color='y')
df.high.plot(color='r')
df.low.plot(color='b')
# 指定繪圖的長(zhǎng)寬尺度及背景網(wǎng)格
with pd.plot_params.use('x_compat', True):
df.high.plot(color='r',figsize=(10,4),grid='on')
df.low.plot(color='b',figsize=(10,4),grid='on')
上面繪制了四個(gè)圖,這里只選取第四張圖具體可以看下效果:
默認(rèn)上面的方法,只會(huì)輸出圖片,無(wú)法保存圖片,所以可以通過(guò)matplotlib模塊的savefig函數(shù)保存圖片到指定的位置,代碼如下:
import matplotlib
import tushare as ts
import pandas as pd
fig = matplotlib.pyplot.gcf()
df=ts.get_hist_data('600415',start='2015-04-01',end='2015-06-18')
with pd.plot_params.use('x_compat', True):
df.high.plot(color='r',figsize=(10,4),grid='on')
df.low.plot(color='b',figsize=(10,4),grid='on')
fig.savefig('F:/graph.png')
聯(lián)系客服