中億財經網:炒股如何獲取信息 「手把手教你」Python獲取股票數據和可視化

發布時間:2020-03-04 18:04:25   來源:網絡 關鍵詞:炒股如何獲取信息
中億財經網 「手把手教你」Python獲取股票數據和可視化
本文關鍵詞炒股如何獲取信息,獲取更多相關信息,請訪問本站首頁。 中億財經網
原文標題:「手把手教你」Python獲取股票數據和可視化
原文發布時間:2019-01-07 23:05:06
原文作者:Python金融量化。
中億財經網

抓住自己最有興趣的東西,由淺入深,循序漸進地學。

——華羅庚

引 言

數據獲取是金融量化分析的第一步,找不到可靠、真實的數據,量化分析就無從談起。隨著信息技術的不斷發展,數據獲取渠道也越來越多,尤其是Python網絡爬蟲,近幾年愈來愈火,網絡培訓視頻和教程滿天飛。然而,很多人畢竟精力有限,沒有時間專門去學習網絡爬蟲技術。當然,不會網絡爬蟲不要緊,我們還可以借助Python的開源數據包(其本質也是網絡爬蟲),如:tushare、baostock、pandas_datareader和yahool等財經數據API,這樣可以節省不少精力。本文將以股票行情數據為例,逐一、簡要介紹如何使用這幾個開源庫獲取數據并進行可視化。在介紹使用Python的API獲取數據之前,本文首先給出了根據股票漲跌驅動因素,廣泛獲取求證信息來源,如下面圖1、2、3所示,很多網站提供了非結構化的數據(信息),如股票論壇,信息含量非常大,后期考慮使用網絡爬蟲爬取股票論壇評論數據,建立輿情指標,探討群體性交易情緒與股價走勢的關系。本篇屬于Python金融量化入門學習的分享之一,希望能起到拋磚引玉的作用。

「手把手教你」Python獲取股票數據和可視化

圖1 股票漲跌驅動因素

「手把手教你」Python獲取股票數據和可視化

圖2 公司基本面信息源


「手把手教你」Python獲取股票數據和可視化

圖3 知名股票論壇

01 Tushare 社區

公眾號上不少文章使用了tushare庫獲取財經和股票交易數據,當時用的是舊版本(tushare)。Tushare社區目前主要維護新版本:tushare pro,數據更穩定質量更高,可獲取滬深股票行情、財務、市場參考等數據,以及指數(含國外股指)、基金、期貨、期權、宏觀經濟、行業經濟等財經數據,為金融量化愛好者節省了大量寶貴時間。此外,近期還增加了新聞聯播的文本數據,為文本分析和數據挖掘提供了很好的素材。不過,新版本需要注冊獲取token才能免費使用,注冊網址: https://tushare.pro/register?reg=218422 。安裝(進入cmd模式):pip install tushare,或升級:pip install tushare --upgrade。下面以股票行情數據為例,展示下tushare如何獲取數據。股票行情數據以股票行情數據為例,簡要介紹如何獲取數據。

#先引入后面分析、可視化等可能用到的庫
import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
#正常顯示畫圖時出現的中文和負號
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
#設置token
token='你的token'
#ts.set_token(token)
pro = ts.pro_api(token)

個股行情數據:

pro.stock_basic()參數:is_hs:是否滬深港通標的,N否、H滬股通、S深股通;list_status:上市狀態,L上市、D退市、P暫停上市;exchange:交易所 SSE上交所,SZSE深交所,HKEX港交所。 pro.daily(ts_code= 或 trade_date=)日行情:daily;周行情:weekly;月行情:monthly
#獲取當前上市的股票代碼、簡稱、注冊地、行業、上市時間等數據
basic=pro.stock_basic(list_status='L')
#查看前五行數據
#basic.head(5)
#獲取平安銀行日行情數據
pa=pro.daily(ts_code='000001.SZ', start_date='20180101',
end_date='20190106')
#pa.head()
#K線圖可視化
from pyecharts import Kline
pa.index=pd.to_datetime(pa.trade_date)
pa=pa.sort_index()
v1=list(pa.loc[:,['open','close','low','high']].values)
t=pa.index
v0=list(t.strftime('%Y%m%d'))
kline = Kline("平安銀行K線圖",title_text_size=15)
kline.add("", v0, v1,is_datazoom_show=True,
mark_line=["average"],
mark_point=["max", "min"],
mark_point_symbolsize=60,
mark_line_valuedim=['highest', 'lowest'] )
#kline.render("上證指數圖.html")
kline
「手把手教你」Python獲取股票數據和可視化

#定義獲取多只股票函數:
def get_stocks_data(stocklist,start,end):
all_data={}
for code in stocklist:
all_data[code]=pro.daily(ts_code=code,
start_date=start, end_date=end)
return all_data
#保存本地
def save_data(all_data):
for code,data in all_data.items():
data.to_csv('c:/zjy/stock_data/'+code+'.csv',
header=True, index=False)
stocklist=list(basic.ts_code)[:15]
start=''
end=''
all_data=get_stocks_data(stocklist,start,end)
all_data['000002.SZ'].tail()
#將數據保存到本地
save_data(all_data)
#讀取本地文件夾里所有文件
import os
#文件存儲路徑
file='c:/zjy/stock_data/'
g=os.walk(file)
filenames=[]
for path,d,filelist in g:
for filename in filelist:
filenames.append(os.path.join(filename))
print(filenames)
#將讀取的數據文件放入一個字典中
df={}
#從文件名中分離出股票代碼
code=[name.split('.')[0] for name in filenames]
for i in range(len(filenames)):
filename=file+filenames[i]
df[code[i]]=pd.read_csv(filename)
#查看第一只股票前五行數據
#df[code[0]].head()

指數數據:pro.index_daily(ts_code=)

def get_index_data(indexs):
'''indexs是字典格式'''
index_data={}
for name,code in indexs.items():
df=pro.index_daily(ts_code=code)
df.index=pd.to_datetime(df.trade_date)
index_data[name]=df.sort_index()
return index_data
#獲取常見股票指數行情
indexs={'上證綜指': '000001.SH','深證成指': '399001.SZ',
'滬深300': '000300.SH','創業板指': '399006.SZ',
'上證50': '000016.SH', '中證500': '000905.SH',
'中小板指': '399005.SZ','上證180': '000010.SH'}
index_data=get_index_data(indexs)
#index_data['上證綜指'].head()
#對股價走勢進行可視化分析
subjects =list(index_data.keys())
#每個子圖的title
plot_pos = [421,422,423,424,425,426,427,428] # 每個子圖的位置
new_colors = ['#1f77b4','#ff7f0e', '#2ca02c', '#d62728',
'#9467bd','#8c564b', '#e377c2',
'#7f7f7f','#bcbd22','#17becf']
fig = plt.figure(figsize=(16,18))
fig.suptitle('A股股指走勢',fontsize=18)
for pos in np.arange(len(plot_pos)):
ax = fig.add_subplot(plot_pos[pos])
y_data =index_data[subjects[pos]]['close']
b = ax.plot(y_data,color=new_colors[pos])
ax.set_title(subjects[pos])
# 將右上邊的兩條邊顏色設置為空,相當于抹掉這兩條邊
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
plt.show()
「手把手教你」Python獲取股票數據和可視化

02 Baostock 證券寶

baostock也是免費、開源的證券數據平臺。提供了大量準確、完整的證券歷史行情數據、上市公司財務數據等。 通過python API獲取證券數據信息,可以滿足量化交易投資者、數量金融愛好者、計量經濟從業者數據需求。返回的數據格式: pandas DataFrame類型,以便于用pandas/NumPy/Matplotlib進行數據分析和可視化。證券寶鏈接地址:http://baostock.com/baostock/index.php/Python_API文檔 。安裝:進入cmd模式,pip install baostock
import baostock as bs
#### 登陸系統 ####
lg = bs.login()
#### 獲取歷史K線數據 ####
# query_history_k_data()
fields= "date,code,open,high,low,close"
rs = bs.query_history_k_data("sh.000001", fields,
start_date='2000-01-01', end_date='2018-09-07',
frequency="d", adjustflag="2")
#frequency="d"取日k線,adjustflag="3"默認不復權,
#1:后復權;2:前復權
data_list = []
while (rs.error_code == '0') & rs.next():
# 獲取一條記錄,將記錄合并在一起
data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
result.index=pd.to_datetime(result.date)
#### 結果集輸出到csv文件 ####
#result.to_csv("c:/zjy/history_k_data.csv",
# encoding="gbk", index=False)
result.head()
#### 登出系統 ####
#bs.logout()
result.info()
#將某些object轉化numeric
result=result.apply(pd.to_numeric, errors='ignore')
result.info()
result.close.plot(figsize=(16,8))
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
plt.show()
「手把手教你」Python獲取股票數據和可視化

03 雅虎財經API

原來的雅虎財經Python開源庫2018年后已不在維護,還好有大神推出了雅虎財經的修復版本,使用pip install fix_yahoo_finance安裝。

import fix_yahoo_finance as fy
fy.pdr_override()
def get_data(tick,start_date="2000-01-01", end_date="2019-01-07"):
data = fy.download(tick, start=start_date, end=end_date)
return data
tickers=['AAPL', 'GOOG','AMZN','FB']
all_data = {}
for ticker in tickers:
all_data[ticker]=get_data(ticker)
subjects = ['蘋果公司股價走勢','谷歌公司股價走勢',
'亞馬遜公司股價走勢','FaceBook公司股價走勢']
#每個子圖的title
plot_pos = [221,222,223,224] # 每個子圖的位置
new_colors = ['#1f77b4','#ff7f0e', '#2ca02c', '#d62728',
'#9467bd','#8c564b', '#e377c2',
'#7f7f7f','#bcbd22','#17becf']
fig = plt.figure(figsize=(16,9))
fig.suptitle('美股&指數走勢',fontsize=18)
for pos in np.arange(len(plot_pos)):
ax = fig.add_subplot(plot_pos[pos])
y_data = all_data[tickers[pos]]['Adj Close']
b = ax.plot(y_data,color=new_colors[pos])
ax.set_title(subjects[pos])
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
plt.show()
「手把手教你」Python獲取股票數據和可視化

WorldStockIndexList = {
'000001.SS':'中國上證指數',
'^DJI':'道瓊斯工業平均指數',
'^IXIC':'納斯達克綜合指數',
'^N225':'日本日經225指數',
'^HSI' :'香港恒生指數',
'^FCHI':'法國CAC40指數',
'^FTSE':'英國富時100指數',
'^GDAXI':'德國法蘭克福DAX指數'}
world_data={}
for ticker in WorldStockIndexList.keys():
world_data[ticker]=get_data(ticker)
subjects =list(WorldStockIndexList.values())
tickers=list(WorldStockIndexList)
#每個子圖的title
plot_pos = [421,422,423,424,425,426,427,428]
# 每個子圖的位置
new_colors = ['#1f77b4','#ff7f0e', '#2ca02c', '#d62728',
'#9467bd','#8c564b', '#e377c2',
'#7f7f7f','#bcbd22','#17becf']
fig = plt.figure(figsize=(16,18))
fig.suptitle('全球股指走勢',fontsize=18)
for pos in np.arange(len(plot_pos)):
ax = fig.add_subplot(plot_pos[pos])
y_data =world_data[tickers[pos]]['Adj Close']
b = ax.plot(y_data,color=new_colors[pos])
ax.set_title(subjects[pos])
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
plt.show()
「手把手教你」Python獲取股票數據和可視化

關于Python金融量化

專注于分享Python在金融領域的實際應用,包括金融數據分析與挖掘(含文本分析)、金融建模與量化投資等。公眾號本身具有AI自動回復功能,具有查詢天氣、星座運勢、專業名詞、中英翻譯、講笑話、小故事等功能,關于公眾號文章源碼及其他資料,可回復“指南”查看詳情。

原文標題:「手把手教你」Python獲取股票數據和可視化
原文發布時間:2019-01-07 23:05:06
原文作者:Python金融量化。

本文關鍵詞炒股如何獲取信息,獲取更多相關信息,請訪問本站首頁。 中億財經網




本文關鍵詞:炒股如何獲取信息
猜你喜歡