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 HistoryWeiTuo(self): key = 'HistoryChengJiao' key = self._genKey(key) if self.is_dirty(): df = TcAccount.HistoryWeiTuo(self) myredis.set_obj(key, df) else: return myredis.get_obj(key) return df
def _getUserStrategy(self, downloadStrategyInterval=60): """按固定的时间间隔下载用户代码 downloadStrategyInterval: int default=60 秒 return: df""" k = "SignForWebUser_preLoadTime" preLoadTime = myredis.get_obj(k) if preLoadTime is None: preLoadTime = datetime.datetime(2015, 10, 19, 15, 33, 47, 53000) #上一次下载的时间 #判断时间 if (agl.curTime() - preLoadTime).total_seconds() > downloadStrategyInterval: url = "http://stocksign.sinaapp.com/query?cmd=query_strategy" result = Http().get(url) df_source = pd.read_json(result) df_source.columns = ['id', 'user_id', 'title', 'code'] preLoadTime = agl.curTime() myredis.set_obj(k, preLoadTime) myredis.set_obj('mysource', df_source) else: df_source = myredis.get_obj('mysource') if df_source is None: df_source = pd.DataFrame([]) return df_source
def PostTask(fn, t, reset=False): """每隔t秒执行一次fn 主要是防止交易接口被短期内多次调用, 造成系统异常 """ key = 'posttask_'+fn.func_name cur_t = agl.curTime() if reset: myredis.delkey(key) pre_t = myredis.get_obj(key) if pre_t == None: pre_t = cur_t - datetime.timedelta(seconds=t+1) if cur_t - pre_t > datetime.timedelta(seconds=t): fn() myredis.set_obj(key, cur_t)
def get_zhijing_from_redis(is_have_return=False): """获取资金列表""" key_df_stocklist = 'df_zhijing' if 0: df = pd.DataFrame() df = myredis.get_obj(key_df_stocklist) if is_have_return: return df if df is not None and len(df) > 0: from prettytable import PrettyTable cols = '余额|可用|参考市值|资产' cols = cols.split('|') table = PrettyTable(cols) for i, row in df.iterrows(): table.add_row(row[cols].tolist()) print table
def Reduce(self): """合并结果, 返回各任务的df return: list, 有几个Map list里就有几个元素""" df = self.pd_task #按task_id来排序 max_id = np.max(df[0]) result = [] for task_id in range(max_id + 1): df_result = pd.DataFrame([]) for i in df[df[0] == task_id].index: r = myredis.get_obj(getResultName(i)) assert (isinstance(r, pd.DataFrame)) df_result = pd.concat([df_result, r]) result.append(df_result) return result
def get_stocklist_from_redis(is_have_return=False): """临时函数, 因为策略basesign保存了列表, 因此可以直接取""" key_df_stocklist = 'df_stocklist' if 0: df = pd.DataFrame() df = myredis.get_obj(key_df_stocklist) if is_have_return: return df if df is not None: from prettytable import PrettyTable cols = '证券代码|证券名称|证券数量|库存数量|可卖数量|参考成本价|买入均价|参考盈亏成本价|当前价|最新市值|参考浮动盈亏|盈亏比例(%)' cols = cols.split('|') table = PrettyTable(cols) for i, row in df.iterrows(): table.add_row(row[cols].tolist()) #table.sort_key("ferocity") #table.reversesort = True print table
def main(args): os.chdir(getMainDir()) i = int(args[0]) #print 'arg=',i pd_task = myredis.get_obj('multi') if 0: pd_task = pd.DataFrame #print pd_task.iloc[i] v = tuple(pd_task.iloc[i].tolist()[1:]) #去掉task_id #print v v += (i, ) #加上task_id s = 'import %s\n' % (v[0]) #module.fn s += 'r = %s.%s(%s, %d)' % v #print s exec s #print 'result=',r #保存结果 myredis.set_obj(MultiSubProcess.getResultName(i), r)
def WeiTuoList(self): """历史成交加当日委托 主要用状态说明这个字段来判断, 通过枚举值来判断委托状态 操作日期|委托时间|股东代码|深0沪1|证券代码|证券名称|买0卖1|买卖标志|委托价格|委托数量|委托编号|成交数量|成交金额|撤单数量|状态说明|撤单标志|委托日期|备注| return : df""" key = 'WeiTuoList' key = self._genKey(key) if self.is_dirty(): df = self.HistoryWeiTuo() df2 = TcAccount.WeiTuoList(self) df = pd.concat([df2, df]) #对报单时间排序 df.index = pd.DatetimeIndex(df['操作日期'] + ' ' + df['委托时间']) df = df.sort() myredis.set_obj(key, df) self.setDirty(False) return df else: return myredis.get_obj(key)
def get_chengjiao_from_redis(is_have_return=False): """输出为成交的委托列表""" key = 'df_chengjiao' if 0: df = pd.DataFrame() df = myredis.get_obj(key) if is_have_return: return df if df is not None: from prettytable import PrettyTable cols = '成交时间|证券代码|证券名称|买卖标志|委托价格|委托数量|委托编号|成交价格|成交数量|成交金额|成交编号' cols = cols.split('|') df['成交金额'] = df['成交金额'].astype(float) df = df[df['成交金额'] > 0] table = PrettyTable(cols) for i, row in df.iterrows(): table.add_row(row[cols].tolist()) #table.sort_key("ferocity") #table.reversesort = True print table
def get_weituo_from_redis(is_have_return=False): """输出为成交的委托列表""" key = 'df_weituo' if 0: df = pd.DataFrame() df = myredis.get_obj(key) if is_have_return: return df if df is not None and len(df) > 0: from prettytable import PrettyTable cols = '证券代码|证券名称|买卖标志|委托价格|委托数量|委托编号|成交数量|成交金额|撤单数量|状态说明' cols = cols.split('|') df = df[df['状态说明'] != '已成'] df = df[df['状态说明'] != '已撤'] df = df[df['买卖标志'] != '配售申购'] table = PrettyTable(cols) for i, row in df.iterrows(): table.add_row(row[cols].tolist()) #table.sort_key("ferocity") #table.reversesort = True print table