python生成k线图_基于tushare生成k线图

tushare简介

TuShare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工到数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。考虑到Python pandas包在金融量化分析中体现出的优势,TuShare返回的绝大部分的数据格式都是pandas DataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化。当然,如果您习惯了用Excel或者关系型数据库做分析,您也可以通过TuShare的数据存储功能,将数据全部保存到本地后进行分析。应一些用户的请求,从0.2.5版本开始,TuShare同时兼容Python 2.x和Python 3.x,对部分代码进行了重构,并优化了一些算法,确保数据获取的高效和稳定。 http://tushare.org/

股票数据获取

import tushare as ts

ts.get_hist_data('600848')#一次性获取全部日k线数据

结果显示:

open high close low volume p_change ma5 \

date

2012-01-11 6.880 7.380 7.060 6.880 14129.96 2.62 7.060

2012-01-12 7.050 7.100 6.980 6.900 7895.19 -1.13 7.020

2012-01-13 6.950 7.000 6.700 6.690 6611.87 -4.01 6.913

2012-01-16 6.680 6.750 6.510 6.480 2941.63 -2.84 6.813

2012-01-17 6.660 6.880 6.860 6.460 8642.57 5.38 6.822

2012-01-18 7.000 7.300 6.890 6.880 13075.40 0.44 6.788

2012-01-19 6.690 6.950 6.890 6.680 6117.32 0.00 6.770

2012-01-20 6.870 7.080 7.010 6.870 6813.09 1.74 6.832

ma10 ma20 v_ma5 v_ma10 v_ma20 turnover

date

2012-01-11 7.060 7.060 14129.96 14129.96 14129.96 0.48

2012-01-12 7.020 7.020 11012.58 11012.58 11012.58 0.27

2012-01-13 6.913 6.913 9545.67 9545.67 9545.67 0.23

2012-01-16 6.813 6.813 7894.66 7894.66 7894.66 0.10

2012-01-17 6.822 6.822 8044.24 8044.24 8044.24 0.30

2012-01-18 6.833 6.833 7833.33 8882.77 8882.77 0.45

2012-01-19 6.841 6.841 7477.76 8487.71 8487.71 0.21

2012-01-20 6.863 6.863 7518.00 8278.38 8278.38 0.23

绘制K线图

matplotlib.finance 工具包的绘制K线图

def _candlestick(ax, quotes, width=0.2, colorup='k', colordown='r',

alpha=1.0, ochl=True):

"""

Plot the time, open, high, low, close as a vertical line ranging

from low to high. Use a rectangular bar to represent the

open-close span. If close >= open, use colorup to color the bar,

otherwise use colordown

Parameters

----------

ax : `Axes`

an Axes instance to plot to

quotes : sequence of quote sequences

data to plot. time must be in float date format - see date2num

(time, open, high, low, close, ...) vs

(time, open, close, high, low, ...)

set by `ochl`

width : float

fraction of a day for the rectangle width

colorup : color

the color of the rectangle where close >= open

colordown : color

the color of the rectangle where close < open

alpha : float

the rectangle alpha level

ochl: bool

argument to select between ochl and ohlc ordering of quotes

Returns

-------

ret : tuple

returns (lines, patches) where lines is a list of lines

added and patches is a list of the rectangle patches added

"""

OFFSET = width / 2.0

lines = []

patches = []

for q in quotes:

if ochl:

t, open, close, high, low = q[:5]

else:

t, open, high, low, close = q[:5]

if close >= open:

color = colorup

lower = open

height = close - open

else:

color = colordown

lower = close

height = open - close

vline = Line2D(

xdata=(t, t), ydata=(low, high),

color=color,

linewidth=0.5,

antialiased=True,

)

rect = Rectangle(

xy=(t - OFFSET, lower),

width=width,

height=height,

facecolor=color,

edgecolor=color,

)

rect.set_alpha(alpha)

lines.append(vline)

patches.append(rect)

ax.add_line(vline)

ax.add_patch(rect)

ax.autoscale_view()

return lines, patches

tushare 的 pandas dataframe 生成K线图

def _candlestick(ax, df, width=0.2, colorup='k', colordown='r',

alpha=1.0):

"""

Plot the time, open, high, low, close as a vertical line ranging

from low to high. Use a rectangular bar to represent the

open-close span. If close >= open, use colorup to color the bar,

otherwise use colordown

Parameters

----------

ax : `Axes`

an Axes instance to plot to

df : pandas data from tushare

width : float

fraction of a day for the rectangle width

colorup : color

the color of the rectangle where close >= open

colordown : color

the color of the rectangle where close < open

alpha : float

the rectangle alpha level

ochl: bool

argument to select between ochl and ohlc ordering of quotes

Returns

-------

ret : tuple

returns (lines, patches) where lines is a list of lines

added and patches is a list of the rectangle patches added

"""

OFFSET = width / 2.0

lines = []

patches = []

for date_string,row in df.iterrows():

date_time = datetime.datetime.strptime(date_string,'%Y-%m-%d')

t = date2num(date_time)

open, high, close, low = row[:4]

if close >= open:

color = colorup

lower = open

height = close - open

else:

color = colordown

lower = close

height = open - close

vline = Line2D(

xdata=(t, t), ydata=(low, high),

color=color,

linewidth=0.5,

antialiased=True,

)

rect = Rectangle(

xy=(t - OFFSET, lower),

width=width,

height=height,

facecolor=color,

edgecolor=color,

)

rect.set_alpha(alpha)

lines.append(vline)

patches.append(rect)

ax.add_line(vline)

ax.add_patch(rect)

ax.autoscale_view()

return lines, patches

def drawPic(df, code, name):

mondays = WeekdayLocator(MONDAY) # 主要刻度

alldays = DayLocator() # 次要刻度

#weekFormatter = DateFormatter('%b %d') # 如:Jan 12

mondayFormatter = DateFormatter('%m-%d-%Y') # 如:2-29-2015

dayFormatter = DateFormatter('%d') # 如:12

fig, ax = plt.subplots()

fig.subplots_adjust(bottom=0.2)

ax.xaxis.set_major_locator(mondays)

ax.xaxis.set_minor_locator(alldays)

ax.xaxis.set_major_formatter(mondayFormatter)

_candlestick(ax, df, width=0.6, colorup='r', colordown='g')

ax.xaxis_date()

ax.autoscale_view()

plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right')

ax.grid(True)

plt.title(name + ' ' + code, fontproperties=zhfont)

plt.show()

def makePicture(code, name):

df = ts.get_hist_data(code, start=begin_time, end=end_time)

df = df.sort_index(0)

# df.plot()

drawPic(df, code, name)

你可能感兴趣的:(python生成k线图)