不管是對量化分析師還是普通的投資者來說,K線圖(蠟燭圖)都是一種很經典、很重要的工具。在K線圖中,它會繪製每天的最高價、最低價、開盤價和收盤價,這對於我們理解股票的趨勢以及每天的多空對比很有幫助。

一般來說,我們會從各大券商平臺獲取K線圖,但是這種情況下獲得的K線圖往往不能靈活調整,也不能適應複雜多變的生產需求。因此我們有必要學習一下如何使用Python繪製K線圖。

匯入必要庫

需要說明的是,這裡

mpl_finance

是原來的

matplotlib。finance

,但是現在獨立出來了(而且好像沒什麼人維護更新了),我們將會使用它提供的方法來繪製K線圖;

tushare

是用來線上獲取股票資料的庫;

matplotlib。ticker

中有個

FuncFormatter()

方法可以幫助我們調整座標軸;

matplotlib。pylab。date2num

可以幫助我們將日期資料進行必要的轉化。

import

mpl_finance

import

tushare

as

ts

import

pandas

as

pd

import

seaborn

as

sns

import

matplotlib。pyplot

as

plt

from

matplotlib

import

ticker

from

matplotlib。pylab

import

date2num

import

numpy

as

np

sns

set

()

pro

=

ts

pro_api

()

Python繪製K線圖

獲取行情資料

我們以上證綜指18年9月份以來的行情為例。

這裡我們對資料按照日期做了個排序,因為

tushare

預設提供的資料是最新的資料在最前邊;

我們用

pd。to_datetime()

將字串日期轉換為

pandas Timestamp

格式(類似datetime。datetime),然後用date2num轉換為matplotlib需要的格式。

然後我們另外新增一列

dates

,這一列用於解決

mpl_finance

中存在的一些問題,後邊我們會詳細解釋。

Python繪製K線圖

繪製K線圖

我們先使用

mpl_finance

繪製一下,看看是否一切正常。

fig

ax

=

plt

subplots

figsize

=

10

5

))

mpl_finance

candlestick_ochl

ax

=

ax

quotes

=

df

[[

‘trade_date’

‘open’

‘close’

‘high’

‘low’

]]

values

width

=

0。7

colorup

=

‘r’

colordown

=

‘g’

alpha

=

0。7

ax

xaxis_date

()

plt

xticks

rotation

=

30

);

Python繪製K線圖

Python繪製K線圖

可以看到,所有的節假日包括週末,在這裡都會顯示為空白,這對於我們圖形的連續性非常不友好,因此我們要解決掉他們。

解決空白問題

def

format_date

x

pos

):

if

x

<

0

or

x

>

len

date_tickers

-

1

return

‘’

return

date_tickers

int

x

)]

date_tickers

=

df

trade_date2

values

fig

ax

=

plt

subplots

figsize

=

10

5

))

ax

xaxis

set_major_formatter

ticker

FuncFormatter

format_date

))

mpl_finance

candlestick_ochl

ax

=

ax

quotes

=

df

[[

‘dates’

‘open’

‘close’

‘high’

‘low’

]]

values

width

=

0。7

colorup

=

‘r’

colordown

=

‘g’

alpha

=

0。7

ax

set_title

‘上證綜指K線圖(2018。9-)’

fontsize

=

20

);

Python繪製K線圖

Python繪製K線圖

可以看到,空白問題完美解決,這裡我們解釋一下。由於

matplotlib

會將日期資料理解為

連續資料

,而連續資料之間的間距是有意義的,所以非交易日即使沒有資料,在座標軸上還是會體現出來。連續多少個非交易日,在座標軸上就對應了多少個小格子,但這些小格子上方並沒有相應的蠟燭圖。

明白了它的原理,我們就可以對症下藥了。我們可以給橫座標(日期)傳入連續的、固定間距的資料,先保證K線圖的繪製是連續的;然後生成一個儲存有正確日期資料的列表,接下來,我們根據座標軸上的資料去取對應的正確的日期,並替換為座標軸上的標籤即可。

上邊

format_date

函式就是這個作用。由於前邊我們給

dates

列生成了從0開始的序列連續資料,因此我們可以直接把它當作索引,從真正的日期列表裡去取對應的資料。在這裡我們要使用

matplotlib。ticker。FuncFormattter()

方法,它允許我們指定一個格式化座標軸標籤的函式,在這個函數里,我們需要接受座標軸的值以及位置,並返回自定義的標籤。

你學會了嗎?

當然,一個完整的K線圖到這裡並沒有結束,後邊我們會考慮加入均線、成交量等元素,感興趣的同學歡迎關注哦!