用 pandas + matplotlib 繪制精美的K線(xiàn)圖
大家好,我是早起。
在使用 Python 進(jìn)行金融數(shù)據(jù)分析時(shí),繪制 K線(xiàn)圖 是很常見(jiàn)的需求。
但如果使用 matplotlib 從 0 開(kāi)始繪制,一步一步添加日線(xiàn)、均線(xiàn)、MACD、成交量等指標(biāo)時(shí),則會(huì)顯得十分麻煩,且代碼很難復(fù)用。
幸運(yùn)的是在 matplotlib 中提供接口(matplotlib.finance)直接繪制K線(xiàn),現(xiàn)在 matplotlib.finance 已經(jīng)獨(dú)立成庫(kù) mplfinance,更方便的讓我們使用。
本文就將介紹如何使用 mplfinance 快速繪制專(zhuān)業(yè)的K線(xiàn)圖,文末也有完整的數(shù)據(jù)與源碼下載。
01
安裝與數(shù)據(jù)準(zhǔn)備
上面已經(jīng)說(shuō)到,mplfinance 是一個(gè)獨(dú)立的庫(kù),所以直接使用 pip 安裝即可,沒(méi)有任何難度
pip?install?mplfinance
至于在數(shù)據(jù)準(zhǔn)備上,根據(jù)我的開(kāi)發(fā)經(jīng)驗(yàn),越懶人版的繪圖庫(kù)對(duì)數(shù)據(jù)要求則越嚴(yán)格,所以在使用之前,我們需要將數(shù)據(jù)整理成指定的格式,下面是某股票(平安銀行000001.sz)的對(duì)應(yīng)數(shù)據(jù)
如上圖所示,數(shù)據(jù)必須是Pandas DataFrame格式,且必須按照順序包含開(kāi)盤(pán)價(jià)、最高價(jià)、最低價(jià)、收盤(pán)價(jià)以及成交量,同時(shí)索引需要是pandas支持的時(shí)間類(lèi)型。
關(guān)于如何獲得、清洗得到這樣的數(shù)據(jù)將不是本文的分享內(nèi)容,下面僅介紹如何基于這樣的數(shù)據(jù)進(jìn)行繪圖。
02
mplfinance常見(jiàn)用法
基礎(chǔ)使用
首先需要導(dǎo)入
import?mplfinance?as?mpf
接下來(lái),在上述數(shù)據(jù)基礎(chǔ)上一行代碼即可生成簡(jiǎn)易價(jià)格走勢(shì)圖
mpf.plot(df_new,?type='line')

添加移動(dòng)均線(xiàn)
通過(guò)設(shè)置 mav 參數(shù)可以添加對(duì)應(yīng)的移動(dòng)均線(xiàn),例如添加5日、10日、30日移動(dòng)均線(xiàn)
mpf.plot(df_new,?type='line',mav=(5,10,30))

需要注意的是,這里的x日移動(dòng)均線(xiàn)并不是通過(guò)我們數(shù)據(jù)的時(shí)間索引計(jì)算而來(lái),僅是移動(dòng)x個(gè)索引位置而來(lái),由于我們數(shù)據(jù)時(shí)間精度為1天,所以恰好是對(duì)應(yīng)的x天移動(dòng)均線(xiàn)。
如果索引是分鐘級(jí)數(shù)據(jù),那么設(shè)置 mav 得到的就是x分鐘均線(xiàn)!
添加成交量
通過(guò)設(shè)置 volume 參數(shù),可以進(jìn)一步添加成交量
mpf.plot(df_new,?type='line',mav=(5,10,30),?volume=True)

制作蠟燭圖
通過(guò)設(shè)置 type 參數(shù)可以繪制更專(zhuān)業(yè)的蠟燭圖,由于上面的數(shù)據(jù)時(shí)間維度過(guò)長(zhǎng),繪制蠟燭圖會(huì)導(dǎo)致很難看清細(xì)節(jié)。
所以下面繪制最后 40 個(gè)交易日的蠟燭圖,并添加成交量與 3、6、9 日均線(xiàn)
mpf.plot(df_new.tail(40),?type='candle',mav=(3,6,9),?volume=True)

展示非交易時(shí)間
上面的圖是連續(xù)的,但交易日并不是天天都是,每天也有指定時(shí)間,通過(guò)設(shè)置 show_nontrading 參數(shù),可以按照交易時(shí)間繪制,將非交易時(shí)間添加為空白
mpf.plot(df_new,type='candle',mav?=?(3),show_nontrading=True,?volume=True)

至此 mplfinance 的基本使用就介紹完畢,相比來(lái)說(shuō)還是比較容易上手使用的。
?pyecharts
雖然 matplotlib 也可以繪制動(dòng)態(tài)圖,但是由于 matplotlib 的特性,展示起來(lái)并不是很方便。
如果需要能交互式操作數(shù)據(jù),拖動(dòng)時(shí)間軸等功能,可以嘗試使用 pyecharts,但由于不像 mplfinance 封裝好開(kāi)箱即用,代碼寫(xiě)起來(lái)還是需要相當(dāng)一定時(shí)間的,大家可以自行選擇
推薦閱讀
牛逼!Python常用數(shù)據(jù)類(lèi)型的基本操作(長(zhǎng)文系列第①篇)
牛逼!Python的判斷、循環(huán)和各種表達(dá)式(長(zhǎng)文系列第②篇)
推薦閱讀
牛逼!Python常用數(shù)據(jù)類(lèi)型的基本操作(長(zhǎng)文系列第①篇)
牛逼!Python的判斷、循環(huán)和各種表達(dá)式(長(zhǎng)文系列第②篇)
