使用Matplotlib和Tushare绘制K线图

股市数据获取

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)

转载于:https://my.oschina.net/u/2306127/blog/832540

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值