不管是對量化分析師還是普通的投資者來說,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
()
獲取行情資料
我們以上證綜指18年9月份以來的行情為例。
這裡我們對資料按照日期做了個排序,因為
tushare
預設提供的資料是最新的資料在最前邊;
我們用
pd。to_datetime()
將字串日期轉換為
pandas Timestamp
格式(類似datetime。datetime),然後用date2num轉換為matplotlib需要的格式。
然後我們另外新增一列
dates
,這一列用於解決
mpl_finance
中存在的一些問題,後邊我們會詳細解釋。
繪製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
);
可以看到,所有的節假日包括週末,在這裡都會顯示為空白,這對於我們圖形的連續性非常不友好,因此我們要解決掉他們。
解決空白問題
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
);
可以看到,空白問題完美解決,這裡我們解釋一下。由於
matplotlib
會將日期資料理解為
連續資料
,而連續資料之間的間距是有意義的,所以非交易日即使沒有資料,在座標軸上還是會體現出來。連續多少個非交易日,在座標軸上就對應了多少個小格子,但這些小格子上方並沒有相應的蠟燭圖。
明白了它的原理,我們就可以對症下藥了。我們可以給橫座標(日期)傳入連續的、固定間距的資料,先保證K線圖的繪製是連續的;然後生成一個儲存有正確日期資料的列表,接下來,我們根據座標軸上的資料去取對應的正確的日期,並替換為座標軸上的標籤即可。
上邊
format_date
函式就是這個作用。由於前邊我們給
dates
列生成了從0開始的序列連續資料,因此我們可以直接把它當作索引,從真正的日期列表裡去取對應的資料。在這裡我們要使用
matplotlib。ticker。FuncFormattter()
方法,它允許我們指定一個格式化座標軸標籤的函式,在這個函數里,我們需要接受座標軸的值以及位置,並返回自定義的標籤。
你學會了嗎?
當然,一個完整的K線圖到這裡並沒有結束,後邊我們會考慮加入均線、成交量等元素,感興趣的同學歡迎關注哦!