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

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