1. 程式人生 > >利用 python numpy +matplotlib 繪製股票k線圖

利用 python numpy +matplotlib 繪製股票k線圖

# -- coding: utf-8 --
import requests
import numpy as np   
from matplotlib import pyplot as plt   
from matplotlib import animation

fig = plt.figure(figsize=(8,6), dpi=72,facecolor="white")
axes = plt.subplot(111)
axes.set_title('Shangzheng')
axes.set_xlabel('time')
line, = axes.plot([], [], linewidth=1.5, linestyle='-')
alldata = []

def dapan(code):
	url = 'http://hq.sinajs.cn/?list='+code
	r = requests.get(url)
	data = r.content[21:-3].decode('gbk').encode('utf8').split(',')
	alldata.append(data[3])
	axes.set_ylim(float(data[5]), float(data[4]))
	return alldata

def init():
	line.set_data([], [])
	return line

def animate(i): 
  	axes.set_xlim(0, i+10)
  	x = range(i+1)
  	y = dapan('sh000001')
  	line.set_data(x, y)
  	return line

anim=animation.FuncAnimation(fig, animate, init_func=init,  frames=10000, interval=5000)

plt.show()


二、使用matplotlib輕鬆繪製股票K線圖

K線圖是看懂股票走勢的最基本知識,K線分為陰線和陽線,陰線和陽線都包含了最低價、開盤價、最高價和收盤價,一般都K線如下圖所示:


在使用Python進行股票分析的過程中,我們可以很容易的對K線圖進行繪製,下面介紹兩種情形下的K線圖繪製:

1. 股票資料來源於Matplotlib:

# 匯入需要的庫
import tushare as ts
import matplotlib.pyplot as plt
import matplotlib.finance as mpf
 
%matplotlib inline
 
# 設定歷史資料區間
date1 = (2014, 12, 1) # 起始日期,格式:(年,月,日)元組
date2 = (2016, 12, 1)  # 結束日期,格式:(年,月,日)元組
# 從雅虎財經中獲取股票程式碼601558的歷史行情
quotes = mpf.quotes_historical_yahoo_ohlc('601558.ss', date1, date2)
 
# 建立一個子圖 
fig, ax = plt.subplots(facecolor=(0.5, 0.5, 0.5))
fig.subplots_adjust(bottom=0.2)
# 設定X軸刻度為日期時間
ax.xaxis_date()
# X軸刻度文字傾斜45度
plt.xticks(rotation=45)
plt.title("股票程式碼:601558兩年K線圖")
plt.xlabel("時間")
plt.ylabel("股價(元)")
mpf.candlestick_ohlc(ax,quotes,width=1.2,colorup='r',colordown='green')
plt.grid(True)

繪製出來的K線圖如下:


2.股票資料來源於Tushare:

因為從Tushare中獲取到的資料為Pandas的DataFrame結構,需要將其轉換為matplotlib.finance.candlestick_ohlc()方法能夠處理的資料結構。

from matplotlib.pylab import date2num
import datetime
 
# 對tushare獲取到的資料轉換成candlestick_ohlc()方法可讀取的格式
data_list = []
for dates,row in hist_data.iterrows():
    # 將時間轉換為數字
    date_time = datetime.datetime.strptime(dates,'%Y-%m-%d')
    t = date2num(date_time)
    open,high,low,close = row[:4]
    datas = (t,open,high,low,close)
    data_list.append(datas)
 
# 建立子圖
fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2)
# 設定X軸刻度為日期時間
ax.xaxis_date()
plt.xticks(rotation=45)
plt.yticks()
plt.title("股票程式碼:601558兩年K線圖")
plt.xlabel("時間")
plt.ylabel("股價(元)")
mpf.candlestick_ohlc(ax,data_list,width=1.5,colorup='r',colordown='green')
plt.grid()

同樣也能繪製會一樣的K線圖: