def getDataFromMongo(self): """ from mongo get the currency_pairs and bank_rate """ ## currency_pairs currency_pairs = list(set(map(lambda x: x['currency_pair'], self.data))) Time = self.Now.split()[0] #currency_dict = getcurrentrate(currency_pairs) currency_dict = gethistoryrate(currency_pairs, Time) ##bank_rate self.forwarddict = [] for lst in self.data: forwarddict = {} sell_currency = lst['currency_pair'][:3] buy_currency = lst['currency_pair'][3:] currency_pair = lst['currency_pair'] #ratetype = getRate((lst['delivery_date'] -lst['trade_date']).days) ratetype = '12月' #SellRate,BuyRate = getcurrentbankrate(sell_currency,buy_currency,ratetype) SellRate, BuyRate = gethistorybankrate(sell_currency, buy_currency, ratetype, Time) ##获取银行历史拆借利率 #sell_amount = float64(lst['sell_amount']) #buy_amount = float64(lst['buy_amount']) ##获取厘定日的汇率,如果还未到厘定日,那么汇率返回None Setdate = dateTostr(lst['determined_date']) ##厘定日 if Setdate is None: Setdate = dateTostr(lst['delivery_date']) if Time < Setdate: SetRate = None else: SetRate = RateExchange(currency_pair).getdayMax( Setdate) ##厘定日汇率 #SetRate = RateExchange(currency_pair).getdayMax(Setdate)##厘定日汇率 if SetRate == []: SetRate = None ## 还未到厘定日 ## 执行汇率上下限 strikeLowerRate = float64(lst['exe_doexrate']) strikeUpperRate = float64(lst['exe_upexrate']) currentRate = currency_dict.get(currency_pair) if currentRate is None: print "{ } not Fund!\n".format(currency_pair) continue deliverydate = dateTostr(lst['delivery_date']) #print 'CollaOptions',lst['id'],currency_pair,dateTostr(lst['trade_date']),deliverydate, temp = self.cumputeLost(Setdate, SetRate, deliverydate, strikeLowerRate, strikeUpperRate, currentRate, SellRate, BuyRate, self.delta) #if forwarddict[lst['id']] is not None: ## 计算本金损益 #forwarddict[lst['id']] = chooselocalmoney(lst,forwarddict[lst['id']]) """ 'date','com_code','der_id','cap_currency','cap_amount','gal','exrate','data_date': 日期,公司代码,衍生品编号,本金币种,本金金额,汇兑损益,当天的本金/人民币汇率,数据生成日期 """ if temp is not None: forwarddict['gal'], forwarddict['cap_amount'], forwarddict[ 'cap_currency'] = chooselocalmoney(lst, temp) forwarddict['date'] = Time forwarddict['com_code'] = lst['consign_entity'] forwarddict['der_id'] = lst['trade_type'] + '_' + str(lst['id']) currencypair = forwarddict['cap_currency'] + 'CNY' forwarddict['exrate'] = gethistoryrate( [currencypair], Time)[currencypair] if currencypair != 'CNYCNY' else 1.0 forwarddict['data_date'] = getNow('%Y-%m-%d %H:%M:%S') logs('compute', 'CollaOptions', 'getDataFromMongo', forwarddict, infoFalg=True) self.forwarddict.append(forwarddict) #self.forwarddict = forwarddict self.updateData()
def getDataFromMongo(self): """ from mongo get the currency_pairs and bank_rate #卖出币种如果是人民币(CNY/CNH),那么买入币种是本金,否则就是卖出币种 """ ## currency_pairs ##--------------------获取汇率对的实时汇率 currency_pairs = list(set(map(lambda x: x['currency_pair'], self.data))) Time = self.Now.split()[0] #currency_dict = getcurrentrate(currency_pairs) currency_dict = gethistoryrate(currency_pairs, Time) ##--------------------获取汇率对的历史汇率 self.forwarddict = [] for lst in self.data: ## forwarddict = {} sell_currency = lst['currency_pair'][:3] buy_currency = lst['currency_pair'][3:] currency_pair = lst['currency_pair'] #ratetype = getRate((lst['delivery_date'] -lst['trade_date']).days) ratetype = '12月' #SellRate,BuyRate = getcurrentbankrate(sell_currency,buy_currency,ratetype)##获取银行拆借利率 SellRate, BuyRate = gethistorybankrate(sell_currency, buy_currency, ratetype, Time) ##获取银行历史拆借利率 LockedRate = float(lst['rate']) ##锁定汇率 currentRate = currency_dict.get(currency_pair) ##即期实时汇率 if currentRate is None: print "{} not fund!\n".format(currency_pair) continue deliverydate = dateTostr(lst['delivery_date']) ##交割日期 #print 'forwards',lst['id'],currency_pair,dateTostr(lst['trade_date']),deliverydate, temp = self.cumputeLost(SellRate, BuyRate, deliverydate, LockedRate, currentRate) #print temp ## 计算本金损益 #if forwarddict[lst['id']] is not None: #forwarddict[lst['id']] = chooselocalmoney(lst,forwarddict[lst['id']]) """ 'date','com_code','der_id','cap_currency','cap_amount','gal','exrate','data_date': 日期,公司代码,衍生品编号,本金币种,本金金额,汇兑损益,当天的本金/人民币汇率,数据生成日期 """ if temp is not None: forwarddict['gal'], forwarddict['cap_amount'], forwarddict[ 'cap_currency'] = chooselocalmoney(lst, temp) forwarddict['date'] = Time forwarddict['com_code'] = lst['consign_entity'] forwarddict['der_id'] = lst['trade_type'] + '_' + str(lst['id']) currencypair = forwarddict['cap_currency'] + 'CNY' forwarddict['exrate'] = gethistoryrate( [currencypair], Time)[currencypair] if currencypair != 'CNYCNY' else 1.0 forwarddict['data_date'] = getNow('%Y-%m-%d %H:%M:%S') logs('compute', 'forwards', 'getDataFromMongo', forwarddict, infoFalg=True) #forwarddict[lst['consign_entity']] self.forwarddict.append(forwarddict) #self.forwarddict = forwarddict self.updateData()
def getDataFromMongo(self): """ from mongo get the currency_pairs and bank_rate """ ## currency_pairs currency_pairs = list(set(map(lambda x: x['currency_pair'], self.data))) Time = self.Now.split()[0] #currency_dict = getcurrentrate(currency_pairs) currency_dict = gethistoryrate(currency_pairs, Time) ##--------------------获取汇率对的历史汇率 ##bank_rate self.forwarddict = [] for lst in self.data: forwarddict = {} sell_currency = lst['currency_pair'][:3] buy_currency = lst['currency_pair'][3:] currency_pair = lst['currency_pair'] #ratetype = getRate((lst['delivery_date'] -lst['trade_date']).days) ratetype = '12月' #SellRate,BuyRate = getcurrentbankrate(sell_currency,buy_currency,ratetype) SellRate, BuyRate = gethistorybankrate(sell_currency, buy_currency, ratetype, Time) ##获取银行历史拆借利率 #sell_amount = float64(lst['sell_amount']) #buy_amount = float64(lst['buy_amount']) Setdate = dateTostr(lst['determined_date']) if Time < Setdate: SetRate = None else: SetRate = RateExchange(currency_pair).getdayMax( Setdate) ##厘定日汇率 #SetRate = RateExchange(currency_pair).getdayMax(Setdate)##厘定日汇率 kncockRate = float64(lst['knockout_exrate']) ##敲出汇率 LockedRate = float(lst['rate']) currentRate = currency_dict[currency_pair] deliverydate = dateTostr(lst['delivery_date']) #print 'knockoptions',lst['id'],currency_pair,dateTostr(lst['trade_date']),deliverydate, type = lst['type'] temp = self.cumputeLost(Setdate, SetRate, deliverydate, currentRate, LockedRate, kncockRate, SellRate, BuyRate, self.delta, type) #print temp #print '\n' ## 计算本金损益 #if forwarddict[lst['id']] is not None: #forwarddict[lst['id']] = chooselocalmoney(lst,forwarddict[lst['id']]) """ 'date','com_code','der_id','cap_currency','cap_amount','gal','exrate','data_date': 日期,公司代码,衍生品编号,本金币种,本金金额,汇兑损益,当天的本金/人民币汇率,数据生成日期 """ if temp is not None: forwarddict['gal'], forwarddict['cap_amount'], forwarddict[ 'cap_currency'] = chooselocalmoney(lst, temp) forwarddict['date'] = Time forwarddict['com_code'] = lst['consign_entity'] forwarddict['der_id'] = lst['trade_type'] + '_' + str(lst['id']) currencypair = forwarddict['cap_currency'] + 'CNY' forwarddict['exrate'] = gethistoryrate( [currencypair], Time)[currencypair] if currencypair != 'CNYCNY' else 1.0 forwarddict['data_date'] = getNow('%Y-%m-%d %H:%M:%S') logs('compute', 'knockoptions', 'getDataFromMongo', forwarddict, infoFalg=True) self.forwarddict.append(forwarddict) #self.forwarddict = forwarddict self.updateData()
def getDataFromMongo(self): """ from mongo get the currency_pairs and bank_rate """ trfdata = {} if self.data != []: S = {} ##货币对最新汇率 spot = {} Time = dateTostr(self.Now) #mongo = mongodb() for lst in self.data: ##获取厘定日汇率,未到立定日,以None填充 code = lst.get('currency_pair') date = lst.get('determined_date').strftime('%Y-%m-%d') #determined_date_rate = getkline(code,date,self.mongo)##获取厘定日汇率 if Time < date: determined_date_rate = None else: determined_date_rate = getkline(code, date, self.mongo) ##获取厘定日汇率 #SetRate = RateExchange(currency_pair).getdayMax(Setdate)##厘定日汇率 lst.update({'determined_date_rate': determined_date_rate}) sell_currency = lst['currency_pair'][:3] buy_currency = lst['currency_pair'][3:] #ratetype = getRate((lst['delivery_date'] -lst['trade_date']).days) ratetype = '12月' #SellRate,BuyRate = getcurrentbankrate(sell_currency,buy_currency,ratetype) SellRate, BuyRate = gethistorybankrate(sell_currency, buy_currency, ratetype, Time) ##获取银行历史拆借利率 if S.get(code) is None: for i in range(100): RE = RateExchange(code).getdayMax(Time) if RE is not None and RE != []: S[code] = RE break Time = timedelta(Time, -1) #RE = RateExchange(code).getMax() #if RE is not None and RE !=[]: #S[code] = RE[0].get('Close')##获取实时汇率 #if sell_currency+buy_currency!=code: # BuyRate,SellRate=SellRate,BuyRate##判断卖出买入货币与汇率对的对应情况 if spot.get(code) is None: dayspot = getdayspot(code, self.mongo) dayspot = datafill(dayspot) spot[code] = dayspot sell_amount = np.float64(lst['sell_amount']) buy_amount = np.float64(lst['buy_amount']) if lst['type'] == u'1': amount = buy_amount currency = lst['buy_currency'] elif lst['type'] == u'2': amount = sell_amount currency = lst['sell_currency'] elif lst['type'] == u'3': if lst['sell_currency'] == 'USD': amount = buy_amount currency = lst['buy_currency'] else: amount = sell_amount currency = lst['sell_currency'] else: amount = None ##其他交易类型,暂时无法计算 currency = None if trfdata.get(lst['trade_id']) is None: try: lags = getLags(self.data, lst['trade_id']) except: continue trfdata[lst['trade_id']] = { 'orderlist': [], 'spotList': lagdata(spot[code], lags), ##lags时间段收益时间序列 'S': S[code], ##实时汇率 'SellRate': SellRate, ##卖出货币拆解利率 'BuyRate': BuyRate, ##买入货币拆解利率 'K': float(lst.get('rate')), ##锁定汇率 'TIV': float(lst.get('trp')), ##目标收益 'lags': lags, ##每期时间间隔 'Now': self.Now, ##损益计算时间 'amount': amount, ##本金 'consign_entity': lst['consign_entity'], 'trade_type': lst['trade_type'], 'id': lst['id'], 'currency': currency } trfdata[lst['trade_id']]['orderlist'].append(lst) self.trfdata = trfdata
def getDataFromMongo(self): """ from mongo get the currency_pairs and bank_rate """ ## currency_pairs currency_pairs = list(set(map(lambda x:x['currency_pair'],self.data))) Time = self.Now.split()[0] #currency_dict = getcurrentrate(currency_pairs) currency_dict = gethistoryrate(currency_pairs,Time) ##bank_rate self.forwarddict = [] for lst in self.data: forwarddict= {} ##交易本币与外币 ##支付固定利率 #print '计算订单{}\n'.format(lst) payFixRate = None if lst['pay_fix_rate'] is None else float64(lst['pay_fix_rate']) ##支付固定利率 chargeFixRate = None if lst['charge_fix_rate'] is None else float64(lst['charge_fix_rate'])##收取浮动利息固定部分 value_date = dateTostr(lst['value_date']) delivery_date = dateTostr(lst['delivery_date']) trade_date = dateTostr(lst['trade_date']) #print lst['id'] if lst['interest_pay_way'] == '3': ##到期一次性支付 br = BankRate(lst['buy_currency'],interestway(lst['interest_pay_way'],lst['charge_float_libor'])) if delivery_date> Time: date = {dateTostr(lst['delivery_date']):br.getday(Time)} else: date = {dateTostr(lst['delivery_date']):br.getday(delivery_date)} elif lst['interest_pay_way']== '0' or lst['trade_type']=='4': ##提前支付 br = BankRate(lst['buy_currency'],interestway(lst['interest_pay_way'],lst['charge_float_libor'])) if (lst['trade_date'] - lst['value_date']).days>180: date = {dateTostr(lst['delivery_date']):br.getday(trade_date)}## value_date trade_date else: date = {dateTostr(lst['delivery_date']):br.getday(value_date)}## value_date trade_date else: #print lst if (lst['trade_date'] - lst['value_date']).days>180: date = getbankrateoneday(lst['buy_currency'],trade_date,delivery_date,lst['interest_pay_way'],lst['charge_float_libor'],Time) else: date = getbankrateoneday(lst['buy_currency'],value_date,delivery_date,lst['interest_pay_way'],lst['charge_float_libor'],Time) #payFixRateDict = {} if chargeFixRate is None: chargeFixRate=0.0 for t in date: date[t] = date[t]/100.0+chargeFixRate##货币浮动利率及支付利息时间 Fix = array(sorted(date.items(),key=lambda x:x[0])) FixDate = Fix[:,0] FixRate = Fix[:,1][:] FixRate = FixRate.astype(float64) Rate = (FixDate,payFixRate,FixRate)##利息支付日期,支付卖出货币利息,收取浮动利率利息 currency_pair = lst['currency_pair'] ##货币对之间本币与外币 sellCurrency = currency_pair[:3] buyCurrency = currency_pair[3:] ratetype ='12月' #SellRate,BuyRate = getcurrentbankrate(sellCurrency,buyCurrency,ratetype) SellRate,BuyRate = gethistorybankrate(sellCurrency,buyCurrency,ratetype,Time)##获取银行历史拆借利率 LockedRate = float64(lst['exe_exrate'])##执行汇率 capped_exrate = None if lst['capped_exrate'] is None else float64(lst['capped_exrate']) ##封顶汇率 ##获取厘定日汇率 ##获取厘定日的汇率,如果还未到厘定日,那么汇率返回None Setdate = dateTostr(lst['determined_date'])##厘定日 if Time<Setdate: SetRate = None else: SetRate = RateExchange(currency_pair).getdayMax(Setdate)##厘定日汇率 #SetRate = RateExchange(currency_pair).getdayMax(Setdate)##厘定日汇率 if SetRate ==[]: SetRate = None## 还未到厘定日 currentRate = currency_dict.get(currency_pair) ## 实时汇率 if currentRate is None: print "{} not fund!".format(currency_pair) continue #deliverydate = dateTostr(lst['delivery_date'])## 交割日期 trade_type = lst['trade_type']##交易类型 rateway = lst['interest_pay_way']##利息支付方式 #sell_amount = float64(lst['sell_amount']) #buy_amount = float64(lst['buy_amount']) #2,3,4分别表示:区间式货币掉期(利率进行互换+固定补贴)、货币掉期(利率互换)、封顶式期权(固定补贴) #print 'SwapOptions', lst['id'],currency_pair,rateway,'区间式货币掉期' if trade_type=='2' else ('货币掉期' if trade_type=='3' else '封顶式期权'),value_date,delivery_date, temp = self.cumputeLost(Setdate,SetRate,value_date,delivery_date,currentRate,SellRate,BuyRate,LockedRate,rateway,self.delta,capped_exrate,trade_type,Rate) #if sell_currency+buy_currency !=currency_pair: # forwarddict[lst['id']] = forwarddict[lst['id']]/currentRate #if forwarddict[lst['id']] is not None: #forwarddict[lst['id']] = chooselocalmoney(lst,forwarddict[lst['id']]) """ 'date','com_code','der_id','cap_currency','cap_amount','gal','exrate','data_date': 日期,公司代码,衍生品编号,本金币种,本金金额,汇兑损益,当天的本金/人民币汇率,数据生成日期 """ if temp is not None: forwarddict['gal'],forwarddict['cap_amount'],forwarddict['cap_currency'] = chooselocalmoney(lst,temp) forwarddict['date'] = Time forwarddict['com_code'] = lst['consign_entity'] forwarddict['der_id'] = lst['trade_type']+'_'+str(lst['id']) currencypair = forwarddict['cap_currency']+'CNY' forwarddict['exrate'] = gethistoryrate([currencypair],Time)[currencypair] if currencypair!='CNYCNY' else 1.0 forwarddict['data_date'] = getNow('%Y-%m-%d %H:%M:%S') logs('compute','swaoption','getDataFromMongo',forwarddict,infoFalg=True) #if lst['id']==1170: #print Setdate,SetRate,value_date,delivery_date,currentRate,SellRate,BuyRate,LockedRate,rateway,self.delta,capped_exrate,trade_type,Rate,forwarddict['gal'] self.forwarddict.append(forwarddict) #print forwarddict #self.forwarddict = forwarddict self.updateData()