def DrawClosesAndVolumes(pl, closes, volumes, zz=None, avg=None, trade_index=None,\ title=None, closes_dp=None, closes_bankuai=None): """画closes,非df模式, closes_dp: 大盘 closes_bankuai: 板块 """ legend = [] pl.figure pl.subplot(211) if title != None: pl.title(title, fontproperties=getFont()) pl.plot(closes) legend.append('close') if zz is not None: DrawZZ(pl, zz, c='r') if avg is not None: pl.plot(avg) if not agl.IsNone(closes_dp): pl.plot(closes_dp) legend.append('dapan') if not agl.IsNone(closes_bankuai): pl.plot(closes_bankuai) legend.append('bankuai') if trade_index != None: pl, index, ts = pl, trade_index, closes _DrawVLine(pl, index, ts) pl.legend(legend, loc='upper left') pl.subplot(212) pl.plot(volumes) pl.show() pl.close()
def drawKline(pl, df_code, df_dp=None, df_bk=None, title=None, df_syl=None, legend2=None): """画个股k线图 pl: 自定义pl df_code: 个股pd.DataFrame, ['holcv'] df_dp: 大盘 df_bk: 板块 df_syl: 历史市盈率 legend2: 标识, 不支持中文 """ if 0: pl = plt pl.figure pl.subplot(211) if title != None: pl.title(title, fontproperties=getFont()) #画个股数据 df = copy.deepcopy(df_code) df['c'] = df['c'] / max(df['c']) df['v'] = df['v'] / max(df['v']) df['c'].plot() df2 = df['v'] legend = ['close'] if not isinstance(df_dp, type(None)) and len(df_dp) > 0: df = copy.deepcopy(df_dp) if isinstance(df, pd.Series): df.plot() else: df['c'] = df['c'] / max(df['c']) #df['v'] = df['v'] / max(df['v']) df['c'].plot() legend.append('dapan') #df['v'].plot() if not agl.IsNone(df_bk): df_bk.plot() legend.append('bankuai') pl.legend(legend, loc='upper left') pl.subplot(212) df2.plot() legend = ['volumns'] if not isinstance(df_syl, type(None)) and len(df_syl) > 0: df = copy.deepcopy(df_syl) #df['市盈率'] = df['市盈率'] / max(df['市盈率']) #df['每股收益'] = df['每股收益'] / max(df['每股收益']) ##df['市盈率'].plot() #df['每股收益'].plot() #legend.append('mgsy') df.plot() legend.append('jll') if legend2 is not None: legend = legend2 pl.legend(legend, loc='upper left') pl.show() pl.close()
def is_dirty(self): #return True key = 'dirty' key = self._genKey(key) o = myredis.get_obj(key) if agl.IsNone(o): self.setDirty(True) return True return o
def get_obj(key): """用key取值 return: obj 或者 None""" r = createRedis() s = r.get(key) if agl.IsNone(s): return s f = cStringIO.StringIO(s) o = cPickle.load(f) f.close() return o
def TradeResult_Boll(code, bars, trade_positions, zhijin, changwei): import backtest signals = pd.DataFrame(index=bars.index) signals['signal'] = 0.0 #signals['short_ma'] = stock.MA(closes=np.array(bars['c']), day=5) #signals['long_ma'] = stock.MA(closes=np.array(bars['c']), day=20) #signals['0'] = signals['short_ma'] #signals['1'] = signals['long_ma'] signals['signal'] = np.zeros(len(bars['c'])) if agl.IsNone(trade_positions): signals['positions'] = signals['signal'].diff() signals['positions'][10] = 1 signals['positions'][13] = 1 signals['positions'][20] = -1 else: signals['positions'] = trade_positions ShowTradeResult2(pl, bars, signals, zhijin, changwei, 0)
def TradeResult_Boll(pl, bars, trade_positions, zhijin,changwei, title=''): """显示策略结果 bars: df 包含有 c字段即可 trade_positions: np.darray or df 交易信号 zhijin: df index同bars changwei: df index同bars title: str 中文需要使用decode(utf8) """ signals = pd.DataFrame(index=bars.index) signals['signal'] = 0.0 signals['signal'] = np.zeros(len(bars['c'])) if agl.IsNone(trade_positions): signals['positions'] = signals['signal'].diff() signals['positions'][10] = 1 signals['positions'][13] = 1 signals['positions'][20] = -1 else: signals['positions'] = trade_positions ShowTradeResult2(pl, bars, signals, zhijin,changwei , 0, title=title)
def drawKline(df, df_trades=None): """画k线图, 异步模式 需要注意的是如果df比较大的话,那么速度是相当的慢, 一般5日线10天的数据较好 df : 日线或5分钟线, cols('ohlcv') df_trades : 交易点, 需要包含字段cols('trade_bSell', ['trade_price']), 见enum, []意思为不是必须 """ def df_to_matplotformat(df): """ return: list[turpl(t,o,h,l,c)] """ data_list = [] for dates, row in df.iterrows(): # 将时间转换为数字 #date_time = datetime.datetime.strptime(dates,'%Y-%m-%d') t = date2num(dates) open, high, low, close = row[:4] datas = (t, open, high, low, close) data_list.append(datas) return data_list quotes = df_to_matplotformat(df) plt.cla() # 创建一个子图 #fig, ax = plt.subplots(facecolor=(0.5, 0.5, 0.5)) #fig.subplots_adjust(bottom=0.2) ax = plt.gca() if 0: ax = matplotlib.axes.Axes(fig, rect) plt.subplots_adjust(bottom=0.2) ## 设置X轴刻度为日期时间 #ax.xaxis_date() ## X轴刻度文字倾斜45度 #plt.xticks(rotation=45) #plt.title("code") #plt.xlabel("time") #plt.ylabel("price") #mpf.candlestick_ohlc(ax,quotes,width=.001,colorup='r',colordown='green') #调整下面日期显示的密度 freq = len(quotes) / 20 weekday_candlestick(quotes, ax, fmt='%b %d %H:%M', freq=freq, width=0.01, colorup='r', colordown='green') #plt.grid(True) #画交易点 if not agl.IsNone(df_trades): if 0: df_trades = pd.DataFrame() for index, row in df_trades.iterrows(): if AsynDrawKline.enum.trade_price in row.keys(): price = row[AsynDrawKline.enum.trade_price] else: price = row['c'] #交易点 trade_position = [] a = np.zeros(len(quotes)) a[:] = price index = len(df[:index]) a[:index] = np.nan bSell = int(row[AsynDrawKline.enum.trade_bSell]) clr = agl.where(bSell, 'g', 'r') plt.plot(a, color=clr, linewidth=0.25) plt.text(len(quotes), price, str(price), color=clr) #左右两边都有坐标 #ax.yaxis.set_ticks_position('both') #plt.tick_params(axis='y', which='both', labelleft='on', labelright='on') plt.draw() plt.pause(0.1)
def ExePolicy(self, code): code = agl.unicode_to_utf8(code) live_data = LiveData() df_hisdat = live_data.getHisdat(code) df_fenshi = live_data.getFenshi(code) df_five_hisdat = live_data.getFiveMinHisdat(code) if agl.IsNone(df_five_hisdat): #print code ,'没有5分钟' return if len(df_fenshi) == 0: return if len(df_five_hisdat) < 30: return price = float(agl.FloatToStr(float(df_fenshi.tail(1)['p']))) yclose = df_hisdat.ix[df_hisdat.index[-1]]['c'] zhangfu = stock.ZhangFu(price, yclose) rsi = stock.RSI(df_five_hisdat['c']) #ui.DrawClosesAndVolumes(pl, df_five_hisdat['c'], rsi) upper, middle, lower = stock.TDX_BOLL(df_five_hisdat['c']) #ui.DrawTs(pl, df_five_hisdat['c'],mid=middle, high=upper, low=lower) highs, lows, closes = df_five_hisdat['h'], df_five_hisdat[ 'l'], df_five_hisdat['c'] #atr = stock.ATR(highs, lows, closes) adx = stock.TDX_ADX(highs, lows, closes) closes = np.array(df_hisdat['c']) if help.MyDate(agl.datetime_to_date(df_hisdat.index[-1])).d < \ help.MyDate(agl.CurDay()).d: closes = agl.array_insert(closes, len(closes), price) four = stock.FOUR(closes) #print code, four[-1] self._dict_four[code] = four[-1] #return #ui.DrawClosesAndVolumes(pl, df_five_hisdat['c'], adx) boll_up = (price - upper[-1]) / upper[-1] boll_mid = (price - middle[-1]) / middle[-1] boll_down = (lower[-1] - price) / lower[-1] boll_width = upper[-1] - lower[-1] if abs(zhangfu) > 0.098 or boll_width < 0.01: return if code == '300033': codename = stock.GetCodeName(code) s = 'rsi = %d %s %s' % (rsi[-1], codename, str(price)) print s if (rsi[-1] > 65 or rsi[-1] < 35) and adx[-1] > 60: codename = stock.GetCodeName(code) s = '%s %s' % (codename, str(price)) sign = False #if code in ['300033','510050']: #sign = True #if adx[-1] > 55: #s += ' ADX=%d'%(adx[-1]) #sign = True if boll_up > -0.003: s += ' 越过布林上轨' #sign = True if abs(boll_mid) < 0.003: s += ' 布林中轨' #sign = True if boll_down > -0.003: s += ' 越过布林下轨' sign = True if four[-1] > 0.1: sign = False #sign = False if sign: #ui.DrawTs(pl, df_five_hisdat['c'],mid=middle, high=upper, low=lower) sInfo = self.calcInfo(code, price, zhangfu) help.myprint(s, sInfo) help.myprint( '[%s,%s] %.3f,%.3f,%.3f,%.2f, four=%.2f, adx=%.2f' % (code, stock.GetCodeName(code), boll_up, boll_mid, boll_down, boll_width, four[-1], adx[-1])) self.NotifyAutoxdShow(code) self.Speak(s)