原創(chuàng) 數(shù)據(jù)科學(xué)探索 2019-01-08 12:47:05 不管是對(duì)量化分析師還是普通的投資者來(lái)說(shuō),K線圖(蠟燭圖)都是一種很經(jīng)典、很重要的工具。在K線圖中,它會(huì)繪制每天的最高價(jià)、最低價(jià)、開(kāi)盤(pán)價(jià)和收盤(pán)價(jià),這對(duì)于我們理解股票的趨勢(shì)以及每天的多空對(duì)比很有幫助。 一般來(lái)說(shuō),我們會(huì)從各大券商平臺(tái)獲取K線圖,但是這種情況下獲得的K線圖往往不能靈活調(diào)整,也不能適應(yīng)復(fù)雜多變的生產(chǎn)需求。因此我們有必要學(xué)習(xí)一下如何使用Python繪制K線圖。 導(dǎo)入必要庫(kù)需要說(shuō)明的是,這里mpl_finance是原來(lái)的matplotlib.finance,但是現(xiàn)在獨(dú)立出來(lái)了(而且好像沒(méi)什么人維護(hù)更新了),我們將會(huì)使用它提供的方法來(lái)繪制K線圖;tushare是用來(lái)在線獲取股票數(shù)據(jù)的庫(kù);matplotlib.ticker中有個(gè)FuncFormatter()方法可以幫助我們調(diào)整坐標(biāo)軸;matplotlib.pylab.date2num可以幫助我們將日期數(shù)據(jù)進(jìn)行必要的轉(zhuǎn)化。 import mpl_finance 獲取行情數(shù)據(jù)我們以上證綜指18年9月份以來(lái)的行情為例。
繪制K線圖我們先使用mpl_finance繪制一下,看看是否一切正常。 fig, ax = plt.subplots(figsize=(10,5)) 可以看到,所有的節(jié)假日包括周末,在這里都會(huì)顯示為空白,這對(duì)于我們圖形的連續(xù)性非常不友好,因此我們要解決掉他們。 解決空白問(wèn)題def format_date(x,pos): 可以看到,空白問(wèn)題完美解決,這里我們解釋一下。由于matplotlib會(huì)將日期數(shù)據(jù)理解為連續(xù)數(shù)據(jù),而連續(xù)數(shù)據(jù)之間的間距是有意義的,所以非交易日即使沒(méi)有數(shù)據(jù),在坐標(biāo)軸上還是會(huì)體現(xiàn)出來(lái)。連續(xù)多少個(gè)非交易日,在坐標(biāo)軸上就對(duì)應(yīng)了多少個(gè)小格子,但這些小格子上方并沒(méi)有相應(yīng)的蠟燭圖。 明白了它的原理,我們就可以對(duì)癥下藥了。我們可以給橫坐標(biāo)(日期)傳入連續(xù)的、固定間距的數(shù)據(jù),先保證K線圖的繪制是連續(xù)的;然后生成一個(gè)保存有正確日期數(shù)據(jù)的列表,接下來(lái),我們根據(jù)坐標(biāo)軸上的數(shù)據(jù)去取對(duì)應(yīng)的正確的日期,并替換為坐標(biāo)軸上的標(biāo)簽即可。 上邊f(xié)ormat_date函數(shù)就是這個(gè)作用。由于前邊我們給dates列生成了從0開(kāi)始的序列連續(xù)數(shù)據(jù),因此我們可以直接把它當(dāng)作索引,從真正的日期列表里去取對(duì)應(yīng)的數(shù)據(jù)。在這里我們要使用matplotlib.ticker.FuncFormattter()方法,它允許我們指定一個(gè)格式化坐標(biāo)軸標(biāo)簽的函數(shù),在這個(gè)函數(shù)里,我們需要接受坐標(biāo)軸的值以及位置,并返回自定義的標(biāo)簽。 你學(xué)會(huì)了嗎? |
|