2.绘制图形

…接上文,现在利用上文下载好的数据做个 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+流通股份变动比例)-配(新)股价格×流通股份变动比例+现金红利

figure_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'))

figure
原文地址:https://www.cnblogs.com/blog-3123958139/p/5517610.html