…接上文,现在利用上文下载好的数据做个 K 线图:
# -*- coding: utf-8 -*- # 加载 shujuchuli.py import sys sys.path.append('C:WinPython-32bit-3.4.4.2my_WorkSpace1shujuchuli.py') # 之前我已经下载好数据,现在调取本地数据库数据 import shujuchuli temp = shujuchuli.shujuchuli('sa', '123456', 'XiTongDSN', 'ShuJuKu') data = temp.get_sql('002237') # 数据选择,取表 002237 的数据中所需的几列数据就行了 import datetime import matplotlib date = [i[14] for i in data] o = [i[0] for i in data] h = [i[1] for i in data] c = [i[2] for i in data] l = [i[3] for i in data] volume = [i[4] for i in data] # 根据 candlestick_ohlc 参数要求调整数据格式 for i in range(0, len(date)): date[i] = matplotlib.dates.date2num(datetime.datetime.strptime(date[i], '%Y-%m-%d')) quotes = [] for i in range(0, len(date)): quotes.append((date[i], o[i], h[i], l[i], c[i], volume[i])) # 绘图 import matplotlib.pyplot as plot from matplotlib.finance import candlestick_ohlc figure, axes = plot.subplots() # K 线图 candlestick_ohlc(axes, quotes, width=0.6, colordown='g', colorup='r')
附图:
需说明的是此图是引用未经复权处理过的数据而做,后面可以细调,如横坐标日期格式的调整啊等等,这些美化的问题有空再说。
复权是根据上市公司的权益分派、公积金转增股本、配股等情况和交易所的除权报价方案精确计算复权价格。其计算公式:
前复权:复权后价格=[(复权前价格-现金红利)+配(新)股价格×流通股份变动比例]÷(1+流通股份变动比例)
后复权:复权后价格=复权前价格×(1+流通股份变动比例)-配(新)股价格×流通股份变动比例+现金红利
其实个人对于 K 线图无感,就是看起来好看点,对分析来说没什么意义。
上证指数。# -*- coding: utf-8 -*- import os import tushare import pandas import matplotlib.pyplot as plot from matplotlib.finance import candlestick_ochl # 清屏 clea = os.system('cls') # 获取上证指数历史数据 sh = tushare.get_hist_data('sh') # 根据需要选择数据 date = pandas.Series([i for i in range(0, len(sh))]) o = sh['open'] h = sh['high'] c = sh['close'] l = sh['low'] volume = sh['volume'] ma5 = sh['ma5'] ma10 = sh['ma10'] ma20 = sh['ma20'] # 按列合并成一个 quotes = [] for i in range(0, len(sh)): quotes.append((date[i], o[i], c[i], h[i], l[i], volume[i])) # 获取图表实例 figure = plot.figure('Figure') # 上图 subf1 = figure.add_subplot(211, title='Index of Shanghai', xlabel='date', ylabel='index', xlim=[min(date), max(date)]) candlestick_ochl(subf1, quotes, colorup='r', colordown='g') l11 = subf1.plot(date, ma5) l12 = subf1.plot(date, ma10) l13 = subf1.plot(date, ma20) b11 = subf1.bar(left=date, height=[i*100/min(volume) for i in volume], bottom=0, width=0.8, color='c', edgecolor='c') plot.grid(True, axis='both') # 下图 subf2 = figure.add_subplot(212, title='Singal of Buy or Sell', xlabel='date', ylabel='index', xlim=[min(date), max(date)]) l21 = subf2.plot(date, ma5, 'g-') l22 = subf2.plot(date, ma20, 'r-') b21 = subf2.bar(left=date, height=[ma5[i]-ma20[i] for i in range(0, len(date))], bottom=0, color='c', edgecolor='c') plot.grid(True, axis='both') plot.legend(('ma5', 'ma20'))