不管是對量化分析師還是普通的投資者來說,K線圖(蠟燭圖)都是一種很經典、很重要的工具。在K線圖中,它會繪制每天的最高價、最低價、開盤價和收盤價,這對于我們理解股票的趨勢以及每天的多空對比很有幫助。
一般來說,我們會從各大券商平台獲取K線圖,但是這種情況下獲得的K線圖往往不能靈活調整,也不能适應複雜多變的生産需求。因此我們有必要學習一下如何使用繪制K線圖。
導入必要庫
需要說明的是,這裡是原來的.,但是現在獨立出來了(而且好像沒什麼人維護更新了),我們将會使用它提供的方法來繪制K線圖;是用來在線獲取股票數據的庫;.中有個()方法可以幫助我們調整坐标軸;.pylab.可以幫助我們将日期數據進行必要的轉化。
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月份以來的行情為例。
繪制K線圖
我們先使用繪制一下,看看是否一切正常。
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);
可以看到,空白問題完美解決,這裡我們解釋一下。由于會将日期數據理解為連續數據,而連續數據之間的間距是有意義的,所以非交易日即使沒有數據,在坐标軸上還是會體現出來。連續多少個非交易日,在坐标軸上就對應了多少個小格子,但這些小格子上方并沒有相應的蠟燭圖。
明白了它的原理,我們就可以對症下藥了。我們可以給橫坐标(日期)傳入連續的、固定間距的數據,先保證K線圖的繪制是連續的;然後生成一個保存有正确日期數據的列表,接下來,我們根據坐标軸上的數據去取對應的正确的日期,并替換為坐标軸上的标簽即可。
上邊函數就是這個作用。由于前邊我們給dates列生成了從0開始的序列連續數據,因此我們可以直接把它當作索引,從真正的日期列表裡去取對應的數據。在這裡我們要使用..()方法,它允許我們指定一個格式化坐标軸标簽的函數,在這個函數裡,我們需要接受坐标軸的值以及位置,并返回自定義的标簽。
你學會了嗎?
我來說兩句