Python量化的關(guān)鍵是金融數(shù)據(jù)可視化,無論是傳統(tǒng)的K線圖,還是現(xiàn)在的策略分析,都需要大量的可視化圖表。具體到編程代碼,就是使用Python繪圖模塊庫(kù)繪圖,比如傳統(tǒng)的Python繪圖模塊庫(kù)有Matplotlib,Seaborn等。
對(duì)于股票和財(cái)經(jīng)的金融數(shù)據(jù)源,可以使用Tushare庫(kù)來獲取和分析股票財(cái)經(jīng)數(shù)據(jù),我們獲得財(cái)經(jīng)數(shù)據(jù)源后,就可以使用Pandas對(duì)金融數(shù)據(jù)的各種指標(biāo)進(jìn)行定制化的分析了,最后讓數(shù)據(jù)可視化,可以使用Matplotlib來繪制出美觀大方的金融圖形,為企業(yè)的決策提供便利。金融繪圖的主要步驟如下:
獲得股票數(shù)據(jù)源
Tushare是一個(gè)免費(fèi)、開源的Python財(cái)經(jīng)數(shù)據(jù)接口包。主要實(shí)現(xiàn)對(duì)股票等金融數(shù)據(jù)從數(shù)據(jù)采集、清洗加工到數(shù)據(jù)存儲(chǔ)的過程,能夠?yàn)榻鹑诜治鋈藛T提供快速、整潔、和多樣的便于分析的數(shù)據(jù),為他們?cè)跀?shù)據(jù)獲取方面極大地減輕工作量,使他們更加專注于策略和模型的研究與實(shí)現(xiàn)上。考慮到Python 的Pandas包在金融量化分析中體現(xiàn)出的優(yōu)勢(shì),Tushare返回的絕大部分的數(shù)據(jù)格式都是Pandas的 DataFrame類型,非常便于用Pandas,NumPy和Matplotlib進(jìn)行數(shù)據(jù)分析和可視化。
Tushare的官網(wǎng)地址
http:
//tushare.org
在Tushare中使用的股票代碼,可以參考東方財(cái)富網(wǎng)提供的股票代碼查詢頁(yè)面,如圖7-63所示
http:
//quote.eastmoney.com/stocklist.html
圖763股票代碼查詢頁(yè)面
使用pip安裝Tushare。安裝Tushare之前,需要使用pip命令先安裝好lxml,requests和bs4模塊。
pip
?install?tushare
顯示股票歷史數(shù)據(jù)
TuShare里的 get_hist_data()函數(shù)用于獲取到目前為止3年的歷史數(shù)據(jù)。獲取個(gè)股歷史交易數(shù)據(jù)(包括均線數(shù)據(jù)),可以通過參數(shù)設(shè)置獲取日k線、周k線、月k線,以及5分鐘、15分鐘、30分鐘和60分鐘k線數(shù)據(jù)。本接口只能獲取近3年的日線數(shù)據(jù),適合搭配均線數(shù)據(jù)進(jìn)行選股和分析。
參數(shù)說明:
-
code:股票代碼,即6位數(shù)字代碼,或者指數(shù)代碼(sh=上證指數(shù) sz=深圳成指 hs300=滬深300指數(shù) sz50=上證50 zxb=中小板 cyb=創(chuàng)業(yè)板)
-
start:開始日期,格式Y(jié)YYY-MM-DD
-
end:結(jié)束日期,格式Y(jié)YYY-MM-DD
-
ktype:數(shù)據(jù)類型,D=日k線 W=周 M=月 5=5分鐘 15=15分鐘 30=30分鐘 60=60分鐘,默認(rèn)為D
-
retry_count:當(dāng)網(wǎng)絡(luò)異常后重試次數(shù),默認(rèn)為3
-
pause:重試時(shí)停頓秒數(shù),默認(rèn)為0
返回值說明:
-
date:日期
-
open:開盤價(jià)
-
high:最高價(jià)
-
close:收盤價(jià)
-
low:最低價(jià)
-
volume:成交量
-
price_change:價(jià)格變動(dòng)
-
p_change:漲跌幅
-
ma5:5日均價(jià)
-
ma10:10日均價(jià)
-
ma20:20日均價(jià)
-
v_ma5:5日均量
-
v_ma10:10日均量
-
v_ma20:20日均量
-
turnover:換手率[注:指數(shù)無此項(xiàng)]
查看編號(hào)為600848的股票代碼在2018年3月的歷史數(shù)據(jù),使用Tushare的get_hist_data()返回的是Pandas的DataFrame對(duì)象,這個(gè)DataFrame對(duì)象的columns比較多,在控制臺(tái)顯示不全,所以使用Pandas的to_csv()函數(shù)保存到hist_data.csv文件中。
import
?tushare?
as
?ts
data
?=?ts.get_hist_data(
'600848'
,start=
'2018-03-01'
,end=
'2018-03-31'
)
data
.to_csv(
'hist_data.csv'
?)
運(yùn)行腳本,已記事本打開hist_data.csv文件。
我們查看hist_data.csv文件會(huì)發(fā)現(xiàn),編號(hào)為600848的股票代碼在2018年3月的歷史交易數(shù)據(jù)是按照交易日期降序排列的。但展示在折線圖上的的日期一般要按升序排列。所以還要對(duì)DataFrame對(duì)象的index屬性進(jìn)行排序。使用Pandas的DataFrame對(duì)象的sort_index()函數(shù),使交易日期按照從小到到大的升序排列。這樣畫出的折線圖就符合人們查看歷史交易數(shù)據(jù)的正常習(xí)慣了,完整代碼如下。
import
?tushare?
as
?ts
data
?=?ts.get_hist_data(
'600848'
,start=
'2018-03-01'
,end=
'2018-03-31'
)
#?對(duì)交易時(shí)間進(jìn)行降序排列
data
?=?
data
.sort_index()
data
.to_csv(
'hist_data.csv'
?)
獲得編號(hào)為600848的股票代碼在2018年3月的歷史交易數(shù)據(jù)后,就可以使用Maplotlib畫出股票歷史數(shù)據(jù)的折線圖,折線圖的橫坐標(biāo)是股票歷史數(shù)據(jù)的交易日期,縱坐標(biāo)是股票交易數(shù)據(jù)的開盤價(jià)(open)。
import
?tushare?
as
?ts
import
?matplotlib.pyplot?
as
?plt
from?datetime?
import
?datetime
data
?=?ts.get_hist_data(
'600848'
,start=
'2018-03-01'
,end=
'2018-03-31'
)
#?對(duì)時(shí)間進(jìn)行降序排列
data
?=?
data
.sort_index()
xs?=?[datetime.strptime(d,?
'%Y-%m-%d'
).toordinal()?
for
?d?
in
?
data
.index?]
plt.plot_date(?xs?,?
data
[
'open'
]?,?
'b-'
)
plt.gcf().autofmt_xdate()??#?自動(dòng)旋轉(zhuǎn)日期標(biāo)記
plt.show()
運(yùn)行腳本輸出以下圖形。
以上代碼的核心代碼如下,使用Tushare的get_hist_data()函數(shù)返回股票交易代碼的股票歷史數(shù)據(jù),也就是Pandas的DataFrame對(duì)象data,data.index索引值是日期型字符串,使用Matplotlib的plot_date()畫圖函數(shù),需要轉(zhuǎn)換成函數(shù)可以識(shí)別的Gregoian Calendar類型數(shù)據(jù)。
xs?=?[datetime.strptime(d,?
'%Y-%m-%d'
).toordinal()?
for
?d?
in
?data.
index
?]
以上表達(dá)式語句等同于以下語句。
xs?=?[]
for
?
date
?
in
?data.index:
????
print
(?
date
?)
????transDate?=?datetime.strptime(?
date
?,?
'%Y-%m-%d'
)
????xs.append(?transDate.toordinal())
繪制折線圖的X 軸的日期也可以使用
matplotlib.dates.strpdate2num()
函數(shù)進(jìn)行轉(zhuǎn)換,完整代碼如下。
import
?tushare?
as
?ts
import
?matplotlib.pyplot?
as
?plt
import
?matplotlib.dates?
as
?mdates
data
?=?ts.get_hist_data(
'600848'
,start=
'2018-03-01'
,end=
'2018-03-31'
)
#?對(duì)時(shí)間進(jìn)行降序排列
data
?=?
data
.sort_index()
xs?=?[mdates.strpdate2num(
'%Y-%m-%d'
)(d?)?
for
?d?
in
?
data
.index?]
plt.plot_date(?xs?,?
data
[
'open'
]?,?
'b-'
)
plt.gcf().autofmt_xdate()??#?自動(dòng)旋轉(zhuǎn)日期標(biāo)記
plt.show()
運(yùn)行腳本輸出以下圖形。
獲取60分鐘k線數(shù)據(jù)。
import
?tushare?
as
?ts
import
?matplotlib.pyplot?
as
?plt
import
?matplotlib.dates?
as
?mdates
data
?=?ts.get_hist_data(
'600848'
,?ktype=
'60'
)
xs?=?[mdates.strpdate2num(
'%Y-%m-%d?%H:%M:%S'
)(d?)?
for
?d?
in
?
data
.index?]
#設(shè)置時(shí)間標(biāo)簽顯示格式
ax?=?plt.gca()
ax.xaxis.set_major_formatter(mdates.DateFormatter(
'%Y-%m-%d?%H:%M:%S'
))
plt.plot_date(xs,?
data
[
'open'
],
'-'
?,?label=
'open'
)
plt.legend(loc=
0
??)
plt.gcf().autofmt_xdate()
plt.show()
運(yùn)行腳本輸出以下圖形。
圖768編號(hào)為600848的股票代碼的60分鐘內(nèi)的k線圖
留言回復(fù)你用Python做過哪些有趣的應(yīng)用 ,我們會(huì)在留言中隨機(jī)抽取一位讀者免費(fèi)送出北京大學(xué)出版社出版的《Python 3 數(shù)據(jù)分析與機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》圖書一本。
用Python創(chuàng)建微信機(jī)器人
用Python機(jī)器人監(jiān)聽微信群聊
用Python獲取攝像頭并實(shí)時(shí)控制人臉
開源項(xiàng)目 | 用Python美化LeetCode倉(cāng)庫(kù)
推薦Python中文社區(qū)旗下的幾個(gè)服務(wù)類公眾號(hào)
征稿啟事 | Python中文社區(qū)有獎(jiǎng)?wù)魑?
文章節(jié)選自北京大學(xué)出版社出版的《Python 3 數(shù)據(jù)分析與機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》,本書現(xiàn)在5折優(yōu)惠,點(diǎn)擊閱讀原文
購(gòu)書~
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
