def getSpot(code): """ 获取汇率对的实时汇率,用于把本金转化为美元 """ if code.strip().upper() == 'USD': return 1.0 else: code1 = 'USD' + code.strip().upper() code2 = code.strip().upper() + 'USD' mongo = mongodb() data = mongo.select('kline_new', { 'type': '0', 'code': { '$in': [code1, code2] } }) mongo.close() if data != []: data = data[0] if data['code'][:3] == 'USD': return 1.0 / (data['Close'] / data['PriceWeight']) else: return data['Close'] / 1.0 / data['PriceWeight'] else: return None
def simulate(code,start_time,end_time): m = mongodb() start_time = start_time+' 00:00:00' end_time = end_time+' 00:00:00' data = m.select('kline',{'code':code,'type':'5','Time':{'$gte':start_time,'$lte':end_time}}) if data ==[]: return [] else: rate = map(lambda x:x.get('Close')/1.0/x.get('PriceWeight'),data)
def setrate(): from database.database import mongodb ## mongo connect from help.help import getNow, strTostr ##get current datetime key = {'code': True} Time = strTostr(getNow('%Y-%m-%d')) initial = {'Time': Time} reduces = """function(doc,prev){ if (prev.Time>doc.Time){ prev.Time = doc.Time }}""" condition = {'type': '5'} db = mongodb() rate = db.group('kline', key, condition, initial, reduces) rate = map(lambda x: {x['code']: x['Time'].split()[0]}, rate) globalrate.rate = reduce(lambda x, y: dict(x, **y), rate) db.close()
def getCNHCNY(_type): """ 获取美元对人民币的汇率 _type.upper()=='CNH' ###离岸人民币 _type.upper()=='CNY' ###在岸人民币 """ code = 'USD' + _type.strip().upper() mongo = mongodb() data = mongo.select('kline_new', {'type': '0', 'code': code}) mongo.close() if data != []: data = data[0] return data['Close'] / 1.0 / data['PriceWeight'] else: return None
def __init__(self, Lock, Now): #Now = getNow() #Now = strTodate(Now,'%Y-%m-%d %H:%M:%S') option.__init__(self) # self.delta =delta self.table = table_frs_option self.writetable = table_write_tmp self.Lock = Lock #self.Now = Now if testlag: ##调用测试数据 from test.test import getDataFromMongo # self.trfdata, self.data = getDataFromMongo(Now) self.cumputeLost() #self.cumputeLost() else: self.mongo = mongodb() self.Now = strTodate(Now, '%Y-%m-%d %H:%M:%S') self.getDataFromPostgres() ##从post提取数据
def getR(Currency): """ 获取货币对的最新汇率 """ error = None #sendData=({'errMsg':error,'errCode':0,'data':None}) try: mongo = mongodb() R = mongo.select('kline_new', {'type': '0', 'code': {'$in': Currency}}) R = reduce( lambda x, y: dict(x, **y), map( lambda lst: {lst['code']: lst['Close'] / 1.0 / lst['PriceWeight']}, R)) mongo.close() except: R = None if R is None: ## 判断是否找到数据 sendData = { 'errMsg': '{} not fund!\n'.format(Currency), 'errCode': 4, 'data': None } ##汇率缺失 return sendData if len(R) != len(Currency): error = 'The currencyPair not fund:\n' for currency in Currency: if currency not in R.keys(): if error is None: error = "%s not fund!\n" % currency else: error += "%s not fund!\n" % currency sendData = {'errMsg': error, 'errCode': 4, 'data': None} ##汇率缺失 else: sendData = {'errMsg': None, 'errCode': 0, 'data': R} return sendData
def gethistory(Currency): """获取汇率对的历史收盘价""" data = [] try: mongo = mongodb() data = mongo.select('kline', {'type': '5', 'code': Currency}) mongo.close() except: pass if data != []: data = pd.DataFrame(data) data = data[['Time', 'Close', 'PriceWeight']] data['Close'] = data['Close'] / data['PriceWeight'] #data['High'] = data['High']/data['PriceWeight'] #data['Open'] = data['Open']/data['PriceWeight'] #data['LastClose'] = data['LastClose']/data['PriceWeight'] #data['Low'] = data['Low']/data['PriceWeight'] data['Time'] = data['Time'].map( lambda x: strTostr(x, '%Y-%m-%d %H:%M:%S', '%Y-%m-%d')) data = data[['Time', 'Close']] return data