Exemplo n.º 1
0
def ax_draw_macd(axes, kdata, n1=12, n2=26, n3=9):
    """绘制MACD
    
    :param axes: 指定的坐标轴
    :param KData kdata: KData
    :param int n1: 指标 MACD 的参数1
    :param int n2: 指标 MACD 的参数2
    :param int n3: 指标 MACD 的参数3
    """
    macd = MACD(CLOSE(kdata), n1, n2, n3)
    bmacd, fmacd, smacd = macd.getResult(0), macd.getResult(1), macd.getResult(2)
    
    text = 'MACD(%s,%s,%s) DIF:%.2f, DEA:%.2f, BAR:%.2f'%(n1,n2,n3,fmacd[-1],smacd[-1],bmacd[-1])
    axes.text(0.01,0.97, text, horizontalalignment='left', verticalalignment='top', transform=axes.transAxes)
    total = len(kdata)
    x = [i-0.2 for i in range(total)]
    x1 = [x[i] for i,d in enumerate(bmacd) if d>0]
    y1 = [i for i in bmacd if i>0]
    x2 = [x[i] for i,d in enumerate(bmacd) if d<=0]
    y2 = [i for i in bmacd if i<=0]
    axes.bar(x1,y1, width=0.4, color='r', edgecolor='r')
    axes.bar(x2,y2, width=0.4, color='g', edgecolor='g')
    
    axt = axes.twinx()
    axt.grid(False)
    axt.set_yticks([])
    fmacd.plot(axes=axt, linestyle='--', legend_on=False, text_on=False)
    smacd.plot(axes=axt, legend_on=False, text_on=False)
    
    for label in axt.get_xticklabels():
        label.set_visible(False)
Exemplo n.º 2
0
def kplot(kdata, new=True, axes=None, 
          colorup='r', colordown='g', width=0.6, alpha=1.0):
    """绘制K线图
    
    :param KData kdata: K线数据
    :param bool new:    是否在新窗口中显示,只在没有指定axes时生效
    :param axes:        指定的坐标轴
    :param colorup:     the color of the rectangle where close >= open
    :param colordown:   the color of the rectangle where close < open
    :param width:       fraction of a day for the rectangle width
    :param alpha:       the rectangle alpha level, 透明度(0.0~1.0) 1.0为不透明
    """
    if not kdata:
        print("kdata is None")
        return
    
    if not axes:
        axes = create_figure() if new else gca()
        
    OFFSET = width/2.0
    rfcolor = matplotlib.rcParams['axes.facecolor']
    for i in range(len(kdata)):
        record = kdata[i]
        open, high, low, close = record.openPrice, record.highPrice, record.lowPrice, record.closePrice
        if close>=open:
            color = colorup
            lower = open
            height = close-open
            rect = Rectangle(xy=(i-OFFSET, lower), width=width, height=height, facecolor=rfcolor, edgecolor=color)
        else:
            color = colordown
            lower = close
            height = open-close
            rect = Rectangle(xy=(i-OFFSET, lower), width=width, height=height, facecolor=color, edgecolor=color)

        vline1 = Line2D(xdata=(i, i), ydata=(low, lower), color=color, linewidth=0.5, antialiased=True)
        vline2 = Line2D(xdata=(i, i), ydata=(lower+height, high), color=color, linewidth=0.5, antialiased=True)
        rect.set_alpha(alpha)

        axes.add_line(vline1)
        axes.add_line(vline2)
        axes.add_patch(rect)
        
    title = get_draw_title(kdata)
    axes.set_title(title)  
    last_record = kdata[-1]
    color = 'r' if last_record.closePrice>kdata[-2].closePrice else 'g'
    text = u'%s 开:%.2f 高:%.2f 低:%.2f 收:%.2f 涨幅:%.2f%%' % (
        last_record.datetime.number/10000, 
        last_record.openPrice, last_record.highPrice,
        last_record.lowPrice,  last_record.closePrice,
        100*(last_record.closePrice-kdata[-2].closePrice)/kdata[-2].closePrice)
    axes.text(0.99,0.97, text, horizontalalignment='right', verticalalignment='top', 
              transform=axes.transAxes, color=color)
        
    axes.autoscale_view()
    axes.set_xlim(-1, len(kdata)+1)
    ax_set_locator_formatter(axes, kdata.getDatetimeList(), kdata.getQuery().kType)
Exemplo n.º 3
0
def ax_draw_sys_signal(axes, kdata, sys, style=2):
    """
    """
    refdates = kdata.getDatetimeList()
    date_index = dict([(d, i) for i, d in enumerate(refdates)])
    ylim = axes.get_ylim()
    height = ylim[1] - ylim[0]

    if style == 1:
        arrow_buy = dict(arrowstyle="->")
        arrow_sell = arrow_buy
    else:
        arrow_buy = dict(facecolor='red', frac=0.5)
        arrow_sell = dict(facecolor='blue', frac=0.5)

    buy_request = sys.getBuyTradeRequest()
    sell_request = sys.getSellTradeRequest()
    text_request = ''
    if buy_request.valid:
        text_request = u'建议买入  止损: %.2f' % (buy_request.stoploss)
        color = 'r'
    if sell_request.valid:
        text_request = u'建议卖出  来源: %s' % (getSystemPartName(sell_request.part))
        color = 'b'

    if buy_request.valid or sell_request.valid:
        axes.text(0.99,
                  0.03,
                  text_request,
                  horizontalalignment='right',
                  verticalalignment='bottom',
                  transform=axes.transAxes,
                  color=color)

    dates = sys.getTradeRecordList()
    for d in dates:
        if not date_index.has_key(d.datetime):
            continue
        pos = date_index[d.datetime]
        krecord = kdata[pos]
        if d.business == BUSINESS.BUY:
            axes.annotate('SG', (pos, krecord.lowPrice - height * 0.01),
                          (pos, krecord.lowPrice - height * 0.1),
                          arrowprops=arrow_buy,
                          horizontalalignment='center',
                          verticalalignment='bottom',
                          color='red')
        elif d.business == BUSINESS.SELL:
            text = getSystemPartName(d.part)
            axes.annotate(text, (pos, krecord.highPrice + height * 0.01),
                          (pos, krecord.highPrice + height * 0.1),
                          arrowprops=arrow_sell,
                          horizontalalignment='center',
                          verticalalignment='top',
                          color='blue')
        else:
            None
Exemplo n.º 4
0
def ibar(indicator, new=True, axes=None, 
         legend_on=False, text_on=False, text_color='k', label=None,
         width=0.4, color='r', edgecolor='r', 
         zero_on=False, *args, **kwargs):
    """绘制indicator柱状图
    
    :param Indicator indicator: Indicator实例
    :param axes:       指定的坐标轴
    :param new:        是否在新窗口中显示,只在没有指定axes时生效
    :param legend_on:  是否打开图例
    :param text_on:    是否在左上角显示指标名称及其参数
    :param text_color: 指标名称解释文字的颜色,默认为黑色
    :param str label:  label显示文字信息,text_on 及 legend_on 为 True 时生效
    :param zero_on:    是否需要在y=0轴上绘制一条直线
    :param width:      Bar的宽度
    :param color:      Bar的颜色
    :param edgecolor:  Bar边缘颜色
    :param args:       pylab plot参数
    :param kwargs:     pylab plot参数
    """
    if not indicator:
        print("indicator is None")
        return
    
    if not axes:
        axes = create_figure() if new else gca()

    if not label:
        label = "%s %.2f" % (indicator.long_name, indicator[-1])
    
    py_indicatr = [ None if x == constant.null_price else x for x in indicator]
    x = [i-0.2 for i in range(len(indicator))]
    y = py_indicatr
    
    axes.bar(x, py_indicatr, width=width, color=color, edgecolor=edgecolor, 
             *args, **kwargs)
        
    if legend_on:
        leg = axes.legend(loc='upper left')
        leg.get_frame().set_alpha(0.5)
        
    if text_on:
        if not axes.texts:
            axes.text(0.01,0.97, label, horizontalalignment='left', verticalalignment='top', 
                      transform=axes.transAxes, color=text_color)
        else:
            temp_str = axes.texts[0].get_text() + '  ' + label
            axes.texts[0].set_text(temp_str)
        
    if zero_on:
        ylim = axes.get_ylim()
        if ylim[0]<0<ylim[1]:
            axes.hlines(0,0,len(indicator))

    axes.autoscale_view()
    axes.set_xlim(-1, len(indicator)+1)
Exemplo n.º 5
0
def ax_draw_macd2(axes, ref, kdata, n1=12, n2=26, n3=9):
    """绘制MACD。
    当BAR值变化与参考序列ref变化不一致时,显示为灰色,
    当BAR和参考序列ref同时上涨,显示红色
    当BAR和参考序列ref同时下跌,显示绿色

    :param axes: 指定的坐标轴
    :param ref: 参考序列,EMA
    :param KData kdata: KData
    :param int n1: 指标 MACD 的参数1
    :param int n2: 指标 MACD 的参数2
    :param int n3: 指标 MACD 的参数3
    """
    macd = MACD(CLOSE(kdata), n1, n2, n3)
    bmacd, fmacd, smacd = macd.getResult(0), macd.getResult(1), macd.getResult(2)

    text = 'MACD(%s,%s,%s) DIF:%.2f, DEA:%.2f, BAR:%.2f' % (
        n1, n2, n3, fmacd[-1], smacd[-1], bmacd[-1]
    )
    axes.text(
        0.01,
        0.97,
        text,
        horizontalalignment='left',
        verticalalignment='top',
        transform=axes.transAxes
    )
    total = len(kdata)
    x = [i - 0.2 for i in range(0, total)]
    y = bmacd
    x1, x2, x3 = [x[0]], [], []
    y1, y2, y3 = [y[0]], [], []
    for i in range(1, total):
        if ref[i] - ref[i - 1] > 0 and y[i] - y[i - 1] > 0:
            x2.append(x[i])
            y2.append(y[i])
        elif ref[i] - ref[i - 1] < 0 and y[i] - y[i - 1] < 0:
            x3.append(x[i])
            y3.append(y[i])
        else:
            x1.append(x[i])
            y1.append(y[i])

    axes.bar(x1, y1, width=0.4, color='#BFBFBF', edgecolor='#BFBFBF')
    axes.bar(x2, y2, width=0.4, color='r', edgecolor='r')
    axes.bar(x3, y3, width=0.4, color='g', edgecolor='g')

    axt = axes.twinx()
    axt.grid(False)
    axt.set_yticks([])
    fmacd.plot(axes=axt, linestyle='--', legend_on=False, text_on=False)
    smacd.plot(axes=axt, legend_on=False, text_on=False)

    for label in axt.get_xticklabels():
        label.set_visible(False)
Exemplo n.º 6
0
def mkplot(kdata, new=True, axes=None, colorup='r', colordown='g', ticksize=3):
    """绘制美式K线图
    
    :param KData kdata: K线数据
    :param bool new:    是否在新窗口中显示,只在没有指定axes时生效
    :param axes:        指定的坐标轴
    :param colorup:     the color of the lines where close >= open
    :param colordown:   the color of the lines where close < open
    :param ticksize:    open/close tick marker in points
    """
    if not kdata:
        print("kdata is None")
        return

    if not axes:
        axes = create_figure() if new else gca()
        
    for t in range(len(kdata)):
        record = kdata[t]
        open, high, low, close = record.openPrice, record.highPrice, record.lowPrice, record.closePrice 
        color = colorup if close>=open else colordown

        vline = Line2D(xdata=(t, t), ydata=(low, high), color=color, antialiased=False)
        oline = Line2D(xdata=(t, t), ydata=(open, open), color=color, antialiased=False,
                       marker=TICKLEFT, markersize=ticksize)
        cline = Line2D(xdata=(t, t), ydata=(close, close), color=color, antialiased=False,
                       markersize=ticksize, marker=TICKRIGHT)

        axes.add_line(vline)
        axes.add_line(oline)
        axes.add_line(cline)
        
    title = get_draw_title(kdata)
    axes.set_title(title)  
    last_record = kdata[-1]
    color = 'r' if last_record.closePrice>kdata[-2].closePrice else 'g'
    text = u'%s 开:%.2f 高:%.2f 低:%.2f 收:%.2f' % (last_record.datetime.number/10000, 
                                                last_record.openPrice, 
                                                last_record.highPrice,
                                                last_record.lowPrice, 
                                                last_record.closePrice)
    axes.text(0.99,0.97, text, horizontalalignment='right', verticalalignment='top', 
              transform=axes.transAxes, color=color)
        
    axes.autoscale_view()
    #axes.set_xlim(0, len(kdata))
    ax_set_locator_formatter(axes, kdata.getDatetimeList(), kdata.getQuery().kType)
Exemplo n.º 7
0
def ax_draw_macd2(axes, ref, kdata, n1=12, n2=26, n3=9):
    """绘制MACD。
    当BAR值变化与参考序列ref变化不一致时,显示为灰色,
    当BAR和参考序列ref同时上涨,显示红色
    当BAR和参考序列ref同时下跌,显示绿色

    :param axes: 指定的坐标轴
    :param ref: 参考序列,EMA
    :param KData kdata: KData
    :param int n1: 指标 MACD 的参数1
    :param int n2: 指标 MACD 的参数2
    :param int n3: 指标 MACD 的参数3
    """
    macd = MACD(CLOSE(kdata), n1, n2, n3)
    bmacd, fmacd, smacd = macd.getResult(0), macd.getResult(1), macd.getResult(2)

    text = 'MACD(%s,%s,%s) DIF:%.2f, DEA:%.2f, BAR:%.2f'%(n1,n2,n3,fmacd[-1],smacd[-1],bmacd[-1])
    axes.text(0.01,0.97, text, horizontalalignment='left', verticalalignment='top', transform=axes.transAxes)
    total = len(kdata)
    x = [i-0.2 for i in range(0, total)]
    y = bmacd
    x1,x2,x3 = [x[0]],[],[]
    y1,y2,y3 = [y[0]],[],[]
    for i in range(1, total):
        if ref[i]-ref[i-1]>0 and y[i]-y[i-1]>0:
            x2.append(x[i])
            y2.append(y[i])
        elif ref[i]-ref[i-1]<0 and y[i]-y[i-1]<0:
            x3.append(x[i])
            y3.append(y[i])
        else:
            x1.append(x[i])
            y1.append(y[i])
    
    axes.bar(x1,y1, width=0.4, color='#BFBFBF', edgecolor='#BFBFBF')
    axes.bar(x2,y2, width=0.4, color='r', edgecolor='r')
    axes.bar(x3,y3, width=0.4, color='g', edgecolor='g')
    
    axt = axes.twinx()
    axt.grid(False)
    axt.set_yticks([])
    fmacd.plot(axes=axt, linestyle='--', legend_on=False, text_on=False)
    smacd.plot(axes=axt, legend_on=False, text_on=False)
    
    for label in axt.get_xticklabels():
        label.set_visible(False)  
Exemplo n.º 8
0
def ax_draw_macd(axes, kdata, n1=12, n2=26, n3=9):
    """绘制MACD
    
    :param axes: 指定的坐标轴
    :param KData kdata: KData
    :param int n1: 指标 MACD 的参数1
    :param int n2: 指标 MACD 的参数2
    :param int n3: 指标 MACD 的参数3
    """
    macd = MACD(CLOSE(kdata), n1, n2, n3)
    bmacd, fmacd, smacd = macd.getResult(0), macd.getResult(1), macd.getResult(2)

    text = 'MACD(%s,%s,%s) DIF:%.2f, DEA:%.2f, BAR:%.2f' % (
        n1, n2, n3, fmacd[-1], smacd[-1], bmacd[-1]
    )
    axes.text(
        0.01,
        0.97,
        text,
        horizontalalignment='left',
        verticalalignment='top',
        transform=axes.transAxes
    )
    total = len(kdata)
    x = [i - 0.2 for i in range(total)]
    x1 = [x[i] for i, d in enumerate(bmacd) if d > 0]
    y1 = [i for i in bmacd if i > 0]
    x2 = [x[i] for i, d in enumerate(bmacd) if d <= 0]
    y2 = [i for i in bmacd if i <= 0]
    axes.bar(x1, y1, width=0.4, color='r', edgecolor='r')
    axes.bar(x2, y2, width=0.4, color='g', edgecolor='g')

    axt = axes.twinx()
    axt.grid(False)
    axt.set_yticks([])
    fmacd.plot(axes=axt, linestyle='--', legend_on=False, text_on=False)
    smacd.plot(axes=axt, legend_on=False, text_on=False)

    for label in axt.get_xticklabels():
        label.set_visible(False)
Exemplo n.º 9
0
def ibar(
    indicator,
    new=True,
    axes=None,
    legend_on=False,
    text_on=False,
    text_color='k',
    label=None,
    width=0.4,
    color='r',
    edgecolor='r',
    zero_on=False,
    *args,
    **kwargs
):
    """绘制indicator柱状图
    
    :param Indicator indicator: Indicator实例
    :param axes:       指定的坐标轴
    :param new:        是否在新窗口中显示,只在没有指定axes时生效
    :param legend_on:  是否打开图例
    :param text_on:    是否在左上角显示指标名称及其参数
    :param text_color: 指标名称解释文字的颜色,默认为黑色
    :param str label:  label显示文字信息,text_on 及 legend_on 为 True 时生效
    :param zero_on:    是否需要在y=0轴上绘制一条直线
    :param width:      Bar的宽度
    :param color:      Bar的颜色
    :param edgecolor:  Bar边缘颜色
    :param args:       pylab plot参数
    :param kwargs:     pylab plot参数
    """
    if not indicator:
        print("indicator is None")
        return

    if not axes:
        axes = create_figure() if new else gca()

    if not label:
        label = "%s %.2f" % (indicator.long_name, indicator[-1])

    py_indicatr = [None if x == constant.null_price else x for x in indicator]
    x = [i - 0.2 for i in range(len(indicator))]
    y = py_indicatr

    axes.bar(x, py_indicatr, width=width, color=color, edgecolor=edgecolor, *args, **kwargs)

    if legend_on:
        leg = axes.legend(loc='upper left')
        leg.get_frame().set_alpha(0.5)

    if text_on:
        if not axes.texts:
            axes.text(
                0.01,
                0.97,
                label,
                horizontalalignment='left',
                verticalalignment='top',
                transform=axes.transAxes,
                color=text_color
            )
        else:
            temp_str = axes.texts[0].get_text() + '  ' + label
            axes.texts[0].set_text(temp_str)

    if zero_on:
        ylim = axes.get_ylim()
        if ylim[0] < 0 < ylim[1]:
            axes.hlines(0, 0, len(indicator))

    axes.autoscale_view()
    axes.set_xlim(-1, len(indicator) + 1)
    k = indicator.get_context()
    if len(k) > 0:
        ax_set_locator_formatter(axes, k.get_date_list(), k.get_query().ktype)
Exemplo n.º 10
0
def mkplot(kdata, new=True, axes=None, colorup='r', colordown='g', ticksize=3):
    """绘制美式K线图
    
    :param KData kdata: K线数据
    :param bool new:    是否在新窗口中显示,只在没有指定axes时生效
    :param axes:        指定的坐标轴
    :param colorup:     the color of the lines where close >= open
    :param colordown:   the color of the lines where close < open
    :param ticksize:    open/close tick marker in points
    """
    if not kdata:
        print("kdata is None")
        return

    if not axes:
        axes = create_figure() if new else gca()

    for t in range(len(kdata)):
        record = kdata[t]
        open, high, low, close = record.open, record.high, record.low, record.close
        color = colorup if close >= open else colordown

        vline = Line2D(xdata=(t, t), ydata=(low, high), color=color, antialiased=False)
        oline = Line2D(
            xdata=(t, t),
            ydata=(open, open),
            color=color,
            antialiased=False,
            marker=TICKLEFT,
            markersize=ticksize
        )
        cline = Line2D(
            xdata=(t, t),
            ydata=(close, close),
            color=color,
            antialiased=False,
            markersize=ticksize,
            marker=TICKRIGHT
        )

        axes.add_line(vline)
        axes.add_line(oline)
        axes.add_line(cline)

    title = get_draw_title(kdata)
    axes.set_title(title)
    last_record = kdata[-1]
    color = 'r' if last_record.close > kdata[-2].close else 'g'
    text = u'%s 开:%.2f 高:%.2f 低:%.2f 收:%.2f' % (
        last_record.date.number / 10000, last_record.open, last_record.high, last_record.low,
        last_record.close
    )
    axes.text(
        0.99,
        0.97,
        text,
        horizontalalignment='right',
        verticalalignment='top',
        transform=axes.transAxes,
        color=color
    )

    axes.autoscale_view()
    axes.set_xlim(-1, len(kdata) + 1)
    ax_set_locator_formatter(axes, kdata.get_date_list(), kdata.get_query().ktype)
Exemplo n.º 11
0
def kplot(kdata, new=True, axes=None, colorup='r', colordown='g', width=0.6, alpha=1.0):
    """绘制K线图
    
    :param KData kdata: K线数据
    :param bool new:    是否在新窗口中显示,只在没有指定axes时生效
    :param axes:        指定的坐标轴
    :param colorup:     the color of the rectangle where close >= open
    :param colordown:   the color of the rectangle where close < open
    :param width:       fraction of a day for the rectangle width
    :param alpha:       the rectangle alpha level, 透明度(0.0~1.0) 1.0为不透明
    """
    if not kdata:
        print("kdata is None")
        return

    if not axes:
        axes = create_figure() if new else gca()

    OFFSET = width / 2.0
    rfcolor = matplotlib.rcParams['axes.facecolor']
    for i in range(len(kdata)):
        record = kdata[i]
        open, high, low, close = record.open, record.high, record.low, record.close
        if close >= open:
            color = colorup
            lower = open
            height = close - open
            rect = Rectangle(
                xy=(i - OFFSET, lower),
                width=width,
                height=height,
                facecolor=rfcolor,
                edgecolor=color
            )
        else:
            color = colordown
            lower = close
            height = open - close
            rect = Rectangle(
                xy=(i - OFFSET, lower),
                width=width,
                height=height,
                facecolor=color,
                edgecolor=color
            )

        vline1 = Line2D(
            xdata=(i, i), ydata=(low, lower), color=color, linewidth=0.5, antialiased=True
        )
        vline2 = Line2D(
            xdata=(i, i),
            ydata=(lower + height, high),
            color=color,
            linewidth=0.5,
            antialiased=True
        )
        rect.set_alpha(alpha)

        axes.add_line(vline1)
        axes.add_line(vline2)
        axes.add_patch(rect)

    title = get_draw_title(kdata)
    axes.set_title(title)
    last_record = kdata[-1]
    color = 'r' if last_record.close > kdata[-2].close else 'g'
    text = u'%s 开:%.2f 高:%.2f 低:%.2f 收:%.2f 涨幅:%.2f%%' % (
        last_record.date.number / 10000, last_record.open, last_record.high, last_record.low,
        last_record.close, 100 * (last_record.close - kdata[-2].close) / kdata[-2].close
    )
    axes.text(
        0.99,
        0.97,
        text,
        horizontalalignment='right',
        verticalalignment='top',
        transform=axes.transAxes,
        color=color
    )

    axes.autoscale_view()
    axes.set_xlim(-1, len(kdata) + 1)
    ax_set_locator_formatter(axes, kdata.get_date_list(), kdata.get_query().ktype)
Exemplo n.º 12
0
def iplot(indicator,
          new=True,
          axes=None,
          legend_on=False,
          text_on=False,
          text_color='k',
          zero_on=False,
          label=None,
          *args,
          **kwargs):
    """绘制indicator曲线
    
    :param Indicator indicator: indicator实例
    :param axes:            指定的坐标轴
    :param new:             是否在新窗口中显示,只在没有指定axes时生效
    :param legend_on:       是否打开图例
    :param text_on:         是否在左上角显示指标名称及其参数
    :param text_color:      指标名称解释文字的颜色,默认为黑色
    :param zero_on:         是否需要在y=0轴上绘制一条直线
    :param str label:       label显示文字信息,text_on 及 legend_on 为 True 时生效
    :param args:            pylab plot参数
    :param kwargs:          pylab plot参数,如:marker(标记类型)、
                             markerfacecolor(标记颜色)、
                             markeredgecolor(标记的边缘颜色)
    """
    if not indicator:
        print("indicator is None")
        return

    if not axes:
        axes = create_figure() if new else gca()

    if not label:
        label = "%s %.2f" % (indicator.long_name, indicator[-1])

    py_indicatr = [None if x == constant.null_price else x for x in indicator]
    axes.plot(py_indicatr, '-', label=label, *args, **kwargs)

    if legend_on:
        leg = axes.legend(loc='upper left')
        leg.get_frame().set_alpha(0.5)

    if text_on:
        if not axes.texts:
            axes.text(0.01,
                      0.97,
                      label,
                      horizontalalignment='left',
                      verticalalignment='top',
                      transform=axes.transAxes,
                      color=text_color)
        else:
            temp_str = axes.texts[0].get_text() + '  ' + label
            axes.texts[0].set_text(temp_str)

    if zero_on:
        ylim = axes.get_ylim()
        if ylim[0] < 0 < ylim[1]:
            axes.hlines(0, 0, len(indicator))

    axes.autoscale_view()
    axes.set_xlim(-1, len(indicator) + 1)
Exemplo n.º 13
0
def ibar(indicator,
         axes=None,
         width=0.4,
         color='r',
         edgecolor='r',
         new=True,
         legend_on=False,
         text_on=False,
         text_color='k',
         label=None,
         zero_on=False,
         *args,
         **kwargs):
    """绘制indicator曲线
    indicator: Indicator实例
    axes: 指定的坐标轴
    new: 是否在新窗口中显示,只在没有指定axes时生效
    legend_on : 是否打开图例
    text_on: 是否在左上角显示指标名称及其参数
    text_color: 指标名称解释文字的颜色,默认为黑色
    zero_on: 是否需要在y=0轴上绘制一条直线
    *args, **kwargs : pylab bar参数
    """
    if not indicator:
        print("indicator is None")
        return

    if not axes:
        axes = create_one_axes_figure() if new else gca()

    if not label:
        label = "%s %.2f" % (indicator.long_name, indicator[-1])

    py_indicatr = [None if x == constant.null_price else x for x in indicator]
    x = [i - 0.2 for i in range(len(indicator))]
    y = py_indicatr

    axes.bar(x,
             py_indicatr,
             width=width,
             color=color,
             edgecolor=edgecolor,
             *args,
             **kwargs)

    if legend_on:
        leg = axes.legend(loc='upper left')
        leg.get_frame().set_alpha(0.5)

    if text_on:
        if not axes.texts:
            axes.text(0.01,
                      0.97,
                      label,
                      horizontalalignment='left',
                      verticalalignment='top',
                      transform=axes.transAxes,
                      color=text_color)
        else:
            temp_str = axes.texts[0].get_text() + '  ' + label
            axes.texts[0].set_text(temp_str)

    if zero_on:
        ylim = axes.get_ylim()
        if ylim[0] < 0 < ylim[1]:
            axes.hlines(0, 0, len(indicator))

    axes.autoscale_view()
    axes.set_xlim(-1, len(indicator) + 1)
Exemplo n.º 14
0
def mkplot(kdata, ticksize=3, colorup='r', colordown='g', axes=None, new=True):
    """绘制美式K线图,x轴使用数据的自然索引做下标,并不使用quotes中的time
    kdata       : KData实例
    ticksize    : open/close tick marker in points
    colorup     : the color of the lines where close >= open
    colordown   : the color of the lines where close <  open
    axes        : 指定的坐标轴
    new       : 是否在新窗口中显示,只在没有指定axes时生效
    """
    if not kdata:
        print("kdata is None")
        return

    if not axes:
        axes = create_one_axes_figure() if new else gca()

    for t in range(len(kdata)):
        record = kdata[t]
        open, high, low, close = record.openPrice, record.highPrice, record.lowPrice, record.closePrice
        color = colorup if close >= open else colordown

        vline = Line2D(xdata=(t, t),
                       ydata=(low, high),
                       color=color,
                       antialiased=False)
        oline = Line2D(xdata=(t, t),
                       ydata=(open, open),
                       color=color,
                       antialiased=False,
                       marker=TICKLEFT,
                       markersize=ticksize)
        cline = Line2D(xdata=(t, t),
                       ydata=(close, close),
                       color=color,
                       antialiased=False,
                       markersize=ticksize,
                       marker=TICKRIGHT)

        axes.add_line(vline)
        axes.add_line(oline)
        axes.add_line(cline)

    title = get_draw_title(kdata)
    axes.set_title(title)
    last_record = kdata[-1]
    color = 'r' if last_record.closePrice > kdata[-2].closePrice else 'g'
    text = u'%s 开:%.2f 高:%.2f 低:%.2f 收:%.2f' % (
        last_record.datetime.number / 10000, last_record.openPrice,
        last_record.highPrice, last_record.lowPrice, last_record.closePrice)
    axes.text(0.99,
              0.97,
              text,
              horizontalalignment='right',
              verticalalignment='top',
              transform=axes.transAxes,
              color=color)

    axes.autoscale_view()
    #axes.set_xlim(0, len(kdata))
    ax_set_locator_formatter(axes, kdata.getDatetimeList(),
                             kdata.getQuery().kType)