Esempio n. 1
0
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()
Esempio n. 2
0
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()
Esempio n. 3
0
 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
Esempio n. 4
0
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
Esempio n. 5
0
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)
Esempio n. 6
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)
Esempio n. 7
0
    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)
Esempio n. 8
0
    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)