def draw(stock, query=Query(-130), ma1_n=5, ma2_n=10, ma3_n=20, ma4_n=60, ma5_n=100, ma_type="SMA", vma1_n=5, vma2_n=10): """绘制普通K线图 + 成交量(成交金额)""" kdata = stock.getKData(query) close = CLOSE(kdata, ) ma1 = MA(close, ma1_n, ma_type) ma2 = MA(close, ma2_n, ma_type) ma3 = MA(close, ma3_n, ma_type) ma4 = MA(close, ma4_n, ma_type) ma5 = MA(close, ma5_n, ma_type) ax1, ax2 = create_figure(2) kdata.plot(axes=ax1) ma1.plot(axes=ax1, legend_on=True) ma2.plot(axes=ax1, legend_on=True) ma3.plot(axes=ax1, legend_on=True) ma4.plot(axes=ax1, legend_on=True) ma5.plot(axes=ax1, legend_on=True) sg = SG_Cross(OP(MA(n=ma1_n, type=ma_type)), OP(MA(n=ma2_n, type=ma_type))) sg.setTO(kdata) sg.plot(axes=ax1, kdata=kdata) vol = VOL(kdata) total = len(kdata) rg = range(total) x = [i - 0.2 for i in rg] x1 = [x[i] for i in rg if kdata[i].closePrice > kdata[i].openPrice] y1 = [vol[i] for i in rg if kdata[i].closePrice > kdata[i].openPrice] x2 = [x[i] for i in rg if kdata[i].closePrice < kdata[i].openPrice] y2 = [vol[i] for i in rg if kdata[i].closePrice < kdata[i].openPrice] ax2.bar(x1, y1, width=0.4, color='r', edgecolor='r') ax2.bar(x2, y2, width=0.4, color='g', edgecolor='g') vma1 = MA(vol, vma1_n) vma2 = MA(vol, vma2_n) vma1.plot(axes=ax2, legend_on=True) vma2.plot(axes=ax2, legend_on=True) if query.kType == Query.WEEK and stock.market == 'SH' and stock.code == '000001': ax2.hlines(0.16e+009, 0, len(kdata), color='b', linestyle='--') ax_set_locator_formatter(ax1, kdata.getDatetimeList(), kdata.getQuery().kType) adjust_axes_show([ax1, ax2]) return show_gcf()
def draw(stock, query=Query(-130), n=10, filter_n=20, filter_p=0.1, sg_type="CROSS", show_high_low=False, arrow_style=1): """绘制佩里.J.考夫曼(Perry J.Kaufman) 自适应移动平均系统(AMA)""" kdata = stock.getKData(query) ax1, ax2 = create_figure(2) kdata.plot(axes=ax1) cama = AMA(CLOSE(kdata), n=n) cama.name = "CAMA" cama.plot(axes=ax1, color='b', legend_on=True) hama = AMA(HIGH(kdata), n=n) hama.name = "HAMA" hstd = STDEV(hama, n) lama = AMA(LOW(kdata), n=n) lama.name = "LAMA" lstd = STDEV(lama, n) fy1 = list(lama - lstd)[lstd.discard:] fy2 = list(hama + hstd)[hstd.discard:] ax1.fill_between(range(lstd.discard, len(kdata)), fy1, fy2, alpha=0.2, color='y') if show_high_low: hama.plot(axes=ax1, color='r', legend_on=True) lama.plot(axes=ax1, color='g', legend_on=True) if sg_type == 'CROSS': fast_op = OP(AMA(n=n)) slow_op = OP(OP(EMA(n=2 * n)), fast_op) sg = SG_Cross(fast_op, slow_op) sg.plot(axes=ax1, kdata=kdata) ind = slow_op(KDATA(kdata)) ind.name = "EMA(CAMA)" ind.plot(axes=ax1, color='m', legend_on=True) elif sg_type == 'SINGLE': sg = SG_Single(cama, filter_n=filter_n, filter_p=filter_p) sg.plot(axes=ax1, kdata=kdata) else: print("sg_type only in ('CORSS', 'SINGLE')") cer = PRICELIST(cama, 1) label = "ER(%s)" % cer[-1] cer.plot(axes=ax2, color='b', marker='o', label=label, legend_on=False, text_on=True) total = len(kdata) CVAL(0.8, total).plot(axes=ax2, color='r', linestyle='--') CVAL(-0.6, total).plot(axes=ax2, color='r', linestyle='--') CVAL(-0.8, total).plot(axes=ax2, color='r', linestyle='--') CVAL(0, total).plot(axes=ax2, color='k', linestyle='-') #ax2.hlines(0.8,0,len(kdata),color='r',linestyle='--') #ax2.hlines(-0.6,0,len(kdata),color='r',linestyle='--') #ax2.hlines(-0.8,0,len(kdata),color='r',linestyle='--') #ax2.hlines(0,0,len(kdata)) ax1.set_xlim((0, len(kdata))) ax_set_locator_formatter(ax1, kdata.getDatetimeList(), query.kType) adjust_axes_show([ax1, ax2]) return show_gcf()
def draw2(block, query=Query(-130), ama1=AMA(n=10, fast_n=2, slow_n=30), ama2=None, n=10, filter_n=20, filter_p=0.1, sg_type='CROSS', show_high_low=True, arrow_style=1): """绘制佩里.J.考夫曼(Perry J.Kaufman) 自适应移动平均系统(AMA)""" sm = StockManager.instance() if block.name == 'SZ': kdata = sm['sz000001'].getKData(query) elif block.name == 'GEM': kdata = sm['sz399006'].getKData(query) else: kdata = sm['sh000001'].getKData(query) ax1, ax2, ax3 = create_figure(3) kdata.plot(axes=ax1) cama = AMA(CLOSE(kdata), n=n) cama.name = "CAMA" cama.plot(axes=ax1, color='b', legend_on=True) hama = AMA(HIGH(kdata), n=n) hama.name = "HAMA" hstd = STDEV(hama, n) lama = AMA(LOW(kdata), n=n) lama.name = "LAMA" lstd = STDEV(lama, n) fy1 = list(lama - lstd)[lstd.discard:] fy2 = list(hama + hstd)[hstd.discard:] ax1.fill_between(range(lstd.discard, len(kdata)), fy1, fy2, alpha=0.2, color='y') if show_high_low: hama.plot(axes=ax1, color='r', legend_on=True) lama.plot(axes=ax1, color='g', legend_on=True) if sg_type == 'CROSS': fast_op = OP(OP(AMA(n=n))) slow_op = OP(OP(EMA(n=2 * n)), fast_op) sg = SG_Cross(fast_op, slow_op) sg.plot(axes=ax1, kdata=kdata) ind = slow_op(KDATA(kdata)) ind.name = "EMA(CAMA)" ind.plot(axes=ax1, color='m', legend_on=True) elif sg_type == 'SINGLE': sg = SG_Single(cama, filter_n=filter_n, filter_p=filter_p) sg.plot(axes=ax1, kdata=kdata) else: print("sg_type only in ('CORSS', 'SINGLE')") a = POS(block, query, SG_Flex(OP(AMA(n=3)), 6)) a.name = "POS(3)" a.plot(axes=ax2, color='b', marker='.', legend_on=True) a = POS(block, query, SG_Flex(OP(AMA(n=30)), 60)) a.name = "POS(30)" a.plot(axes=ax2, color='g', marker='.', legend_on=True) total = len(kdata) CVAL(0.8, total).plot(axes=ax2, color='r', linestyle='--') CVAL(0.2, total).plot(axes=ax2, color='r', linestyle='--') #ax2.hlines(0.8,0,len(kdata),color='r',linestyle='--') #ax2.hlines(0.2,0,len(kdata),color='r',linestyle='--') if ama1.name == "AMA": cer = PRICELIST(cama, 1) label = "ER(%s)" % cer[-1] cer.plot(axes=ax3, color='b', marker='.', label=label, legend_on=False, text_on=True) CVAL(0.8, total).plot(axes=ax2, color='r', linestyle='--') CVAL(-0.6, total).plot(axes=ax2, color='r', linestyle='--') CVAL(-0.8, total).plot(axes=ax2, color='r', linestyle='--') CVAL(0, total).plot(axes=ax2, color='k', linestyle='-') #ax3.hlines(0.8,0,len(kdata),color='r',linestyle='--') #ax3.hlines(-0.6,0,len(kdata),color='r',linestyle='--') #ax3.hlines(-0.8,0,len(kdata),color='r',linestyle='--') #ax3.hlines(0,0,len(kdata)) else: ax_draw_macd(ax2, kdata) #ax2.set_ylim(-1, 1) ax1.set_xlim((0, len(kdata))) ax_set_locator_formatter(ax1, kdata.getDatetimeList(), query.kType) adjust_axes_show([ax1, ax2]) return show_gcf()