Ejemplo n.º 1
0
    def dateseris(mindate, maxdate):

        date = timedelta(mindate, 0)
        series = []
        while maxdate >= date:
            series.append(date)

            date = timedelta(date, 1)

        return series
Ejemplo n.º 2
0
 def getTime(self):
     """
     获取最小起始日期和min{最大交割日日期,当前日期}
     """
     post = postgersql()
     colname = ['trade_date','delivery_date','currency_pair','dates']
     sql = """select op.trade_date,op.delivery_date,op.currency_pair,
             case
             when t.dates<op.delivery_date then date(t.dates)+1
             when t.dates=op.delivery_date then current_date
             end as dates
             from %s op
             left join 
             (select max(pt.date) as dates,pt.der_id from %s pt
             group by pt.der_id) t
             on op.trade_type||'_'||op.id = t.der_id
             """%(self.table,self.querytable)
     time = post.view(sql,colname)
     if time==[] or time==None:
         self.begintime = None
         self.endtime = None
     else:
         time = filter(lambda x:x['currency_pair'] in getrate() and dateTostr(x['delivery_date'])>=getrate()[x['currency_pair']],time)
         #print len(time)
         for lst in time:
             if lst['dates'] is None:
                 lst['dates'] = dateTostr(lst['trade_date']) if dateTostr(lst['trade_date'])>getrate()[lst['currency_pair']] else getrate()[lst['currency_pair']]
             else:
                 lst['dates'] = dateTostr(lst['dates'])
         begintime = time[0]['dates'] if len(time)==1 else min(map(lambda x:x['dates'],time))
         self.begintime = begintime if getNow('%Y-%m-%d')>=begintime else None
         endtime = dateTostr(time[0]['delivery_date'] if len(time)==1 else max(map(lambda x:x['delivery_date'],time)))
         self.endtime = endtime if getNow('%Y-%m-%d')>endtime else timedelta(getNow('%Y-%m-%d'),-1)
Ejemplo n.º 3
0
    def getday(self, Time=None):
        """
        获取某一天的拆借利率值
        """

        Time2 = timedelta(Time, -100)
        ##查找最近20天的拆借利率,如果找不到就以0填充
        data = self.__mongo.select(
            'KPI', {
                'index': self.code,
                'datadate': {
                    '$lte': Time,
                    '$gte': Time2
                },
                'ratetype': self.ratetype
            })
        if data != []:
            data = data[-1]
            try:
                rate = float(data['rate'])
                self.__mongo.close()
                return rate
            except:
                return 0.0

        #print '查找不到所需数据,那么其拆借利率以0填充'
        self.__mongo.close()
        return 0.0
Ejemplo n.º 4
0
 def do_all(self):
     """
     执行所有历史数据
     """
     self.getTime()
     if self.begintime and self.endtime is not None:
         Now = self.begintime
         while (Now >= self.begintime and Now <= self.endtime):
             self.Now = strTostr(Now)
             CollaOptions_oneday(self.Lock, self.Now)
             Now = timedelta(Now, 1)
Ejemplo n.º 5
0
    def getdayMax(self,Time=None):
        """
        获取某一天汇率最大值
        """
        key={'code':True}
        
        Time_end = strTostr(timedelta(Time,17.0/24))##当天时间下午5点
        Time = strTostr(Time)
        initial ={'Close':0,'Time':Time}
       
        reduces = """function(doc,prev){
 
                     if (prev.Time<doc.Time){
                          prev.Close = doc.Close/1.0/doc.PriceWeight;
                          prev.Time = doc.Time
                     }}"""##遍历寻找当前最大汇率值
        condition={'type':'0','code':self.code,'Time':{'$lt':Time_end,'$gte':Time}}             
        data =  self.__mongo.group('kline',key,condition,initial,reduces)
        self.__mongo.close()
        return data
Ejemplo n.º 6
0
    def getday(self, Time=None):
        """
        获取某一天汇率
        """
        Time1 = Time + ' 00:00:00'
        Time2 = timedelta(Time, -100) + ' 00:00:00'
        data = self.__mongo.select('kline', {
            'type': '5',
            'code': self.code,
            'Time': {
                '$gte': Time2,
                '$lte': Time1
            }
        })
        if data == []:
            return []
        else:
            data = data[0]
            return data.get('Close') / 1.0 / data.get('PriceWeight')

        return None
Ejemplo n.º 7
0
    def getdayMax(self, Time=None):
        """
        获取某一天汇率最大值
        """
        '''key={'code':True}
        
        Time_end = strTostr(timedelta(Time,17.0/24))##当天时间下午5点
        Time = strTostr(Time)
        initial ={'Close':0,'Time':Time}
       
        reduces = """function(doc,prev){
 
                     if (prev.Time<doc.Time){
                          prev.Close = doc.Close/1.0/doc.PriceWeight;
                          prev.Time = doc.Time
                     }}"""##遍历寻找当前最大汇率值
        condition={'type':'0','code':self.code,'Time':{'$lt':Time_end,'$gte':Time}}             
        data =  self.__mongo.group('kline',key,condition,initial,reduces)
        self.__mongo.close()'''
        Time1 = Time + ' 00:00:00'
        Time2 = timedelta(Time, -100) + ' 00:00:00'
        data = self.__mongo.select('kline', {
            'type': '5',
            'code': self.code,
            'Time': {
                '$gte': Time2,
                '$lte': Time1
            }
        })
        if data == []:
            return []
        else:
            data = data[0]
            return data.get('High') / 1.0 / data.get('PriceWeight')

        return None
Ejemplo n.º 8
0
    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