Пример #1
0
    def kline_res_handle(self, kline_acquired):
        if isinstance(kline_acquired, list):
            if not kline_acquired:
                return kline_restful(self.kline_info, 2001, data=kline_acquired)

            parameters_list = ['_id', 'open', 'high', 'low', 'close', 'vol', 'close_time',
                               'quote_asset_volume', 'trades_num', 'taker_buy_base', 'taker_buy_quote']
            df = pandas.DataFrame(kline_acquired, columns=parameters_list).iloc[:, 0:6]

            if self.period == '1min':
                df['ts'] = df['_id']
                df['ts'] = df['ts'].astype('int64')

            for column in parameters_list[0:6]:
                if column == '_id':
                    df[column] = (df[column] / 1000).astype('int32')
                    continue
                data = df[column].astype('double')
                df[column] = round(data, 8)
            kline_list = df.to_dict('records')
            return kline_restful(self.kline_info, 2000, data=kline_list)

        if isinstance(kline_acquired, dict):
            # {"code": -10009,"msg": "Invalid period!"}
            return kline_restful(self.kline_info, 4000, data=kline_acquired)
Пример #2
0
    def kline_res_handle(self, kline_acquired):
        if kline_acquired['status'] == 200:
            kline_data = kline_acquired['data']
            if not kline_data:
                # {"status":200,"msg":"","data":{},"time":1571123247,"microtime":"0.46184200 1571123247","source":"api"}
                return kline_restful(self.kline_info,
                                     2001,
                                     data=kline_acquired)
            kline_bars = kline_data['bars']
            df = pandas.DataFrame(kline_bars)
            df = df.rename(columns={'volume': 'vol', 'time': '_id'})
            df = df.drop(columns=['datetime'])

            if self.period == '1min':
                df['ts'] = df['_id']
                df['ts'] = df['ts'].astype('int64')

            columns = [column for column in df]
            for column in columns:
                if column not in ['_id', 'ts']:
                    df[column] = round(df[column].astype('double'), 8)

            df['_id'] = (df['_id'].astype('double') / 1000).astype('int32')
            kline_list = df.to_dict('records')
            return kline_restful(self.kline_info, 2000, data=kline_list)

        else:
            # {"status":-102,"msg":"","data":"","time":1571123137,"microtime":"0.69178400 1571123137","source":"api"}
            return kline_restful(self.kline_info, 4000, data=kline_acquired)
Пример #3
0
    def kline_res_handle(self, kline_acquired):
        if isinstance(kline_acquired, list):
            if kline_acquired:
                # okex 返回值的存储规则处理
                parameters_list = [
                    '_id', 'open', 'high', 'low', 'close', 'vol'
                ]
                df = pandas.DataFrame(kline_acquired, columns=parameters_list)

                df['_id'] = df['_id'].apply(lambda x: time.mktime(
                    time.strptime(x, "%Y-%m-%dT%H:%M:%S.000Z")))
                if self.period == '1min':
                    df['ts'] = (df['_id'] * 1000).astype('int64')

                for column in parameters_list:
                    if column == '_id':
                        df['_id'] = df['_id'].astype('int32')
                        continue
                    data = df[column].astype('double')
                    df[column] = round(data, 8)

                final_kline = df.to_dict('records')
                return kline_restful(self.kline_info, 2000, data=final_kline)
            return kline_restful(self.kline_info, 2001, data=kline_acquired)
        if isinstance(kline_acquired, dict):
            # {'code': 30032, 'message': 'The currency pair does not exist'}
            return kline_restful(self.kline_info, 4000, data=kline_acquired)
Пример #4
0
    def kline_res_handle(self, kline_acquired):
        if isinstance(kline_acquired, list):
            if kline_acquired:
                parameters_list = [
                    '_id', 'open', 'high', 'low', 'close', 'vol', 'close_time',
                    'quote_asset_volume', 'trades_num', 'taker_buy_base',
                    'taker_buy_quote', 'ignore'
                ]
                df = pandas.DataFrame(kline_acquired,
                                      columns=parameters_list).iloc[:, 0:6]

                if self.period == '1min':
                    df['ts'] = df['_id']
                    df['ts'] = df['ts'].astype('int64')

                for column in parameters_list[0:6]:
                    if column == '_id':
                        df[column] = (df[column] / 1000).astype('int32')
                        continue
                    data = df[column].astype('double')
                    df[column] = round(data, 8)
                kline_list = df.to_dict('records')
                return kline_restful(self.kline_info, 2000, data=kline_list)
            return kline_restful(self.kline_info, 2001, data=kline_acquired)
        if isinstance(kline_acquired, dict):
            # {'code': -1104, 'msg': "Not all sent parameters were read; read '4' parameter(s) but was sent '5'."}
            return kline_restful(self.kline_info, 4000, data=kline_acquired)
Пример #5
0
    def kline_res_handle(self, kline_acquired):
        if 'data' not in kline_acquired:
            # {"error": "市场错误"}
            # {"code": 3005,"message": "无效的参数"}
            return kline_restful(self.kline_info, 4000, data=kline_acquired)

        kline_data = kline_acquired['data']
        if kline_data[0][0] > (self.kline_info['from_time'] * 1000) \
                and kline_data[-1][0] > (self.kline_info['end_time'] * 1000):
            return kline_restful(self.kline_info, 2001, data=kline_acquired)

        # 存在数据时间重合,即处理数据存库
        parameters_list = ['_id', 'open', 'high', 'low', 'close', 'vol']
        df = pandas.DataFrame(kline_data, columns=parameters_list)

        if self.period == '1min':
            df['ts'] = df['_id'].astype('int64')

        for column in parameters_list[0:6]:
            if column == '_id':
                df[column] = (df[column] / 1000).astype('int32')
                continue
            df[column] = round(df[column].astype('double'), 8)
        kline_list = df.to_dict('records')
        return kline_restful(self.kline_info, 2000, data=kline_list)
Пример #6
0
    def kline_res_handle(self, kline_acquired):
        if isinstance(kline_acquired, list):
            if not kline_acquired:
                return kline_restful(self.kline_info,
                                     2001,
                                     data=kline_acquired)

            df = pandas.DataFrame(kline_acquired)
            df = df.drop(columns=['volumeQuote'])
            rename_map = {
                'volume': 'vol',
                'timestamp': '_id',
                'min': 'low',
                'max': 'high'
            }
            df = df.rename(columns=rename_map)
            df['_id'] = df['_id'].apply(lambda x: time.mktime(
                time.strptime(x, "%Y-%m-%dT%H:%M:%S.000Z")))

            if self.period == '1min':
                df['ts'] = df['_id'] * 1000
                df['ts'] = df['ts'].astype('int64')

            columns = [column for column in df]
            for column in columns:
                if column not in ['_id', 'ts']:
                    df[column] = round(df[column].astype('double'), 8)
            df['_id'] = df['_id'].astype('int32')

            kline_list = df.to_dict('records')
            return kline_restful(self.kline_info, 2000, data=kline_list)

        if isinstance(kline_acquired, dict):
            '''
            {
                "error": {
                    "code": 10001,
                    "message": "Validation error",
                    "description": "Parameter period with value 1mon unsupported"
                }
            }
            '''
            return kline_restful(self.kline_info, 4000, data=kline_acquired)
Пример #7
0
    def kline_res_handle(self, kline_acquired):
        if isinstance(kline_acquired, list):
            if not kline_acquired:
                return kline_restful(self.kline_info,
                                     2001,
                                     data=kline_acquired)

            if 'error' in kline_acquired:
                # ['error', 10020, 'time_interval: invalid']
                return kline_restful(self.kline_info,
                                     4000,
                                     data=kline_acquired[2])

            df = self.df_handle(kline_acquired)
            if len(kline_acquired) < self.per_count:
                # 返回数据存在丢失,使用pandas获取丢失时间戳,并进行补全操作。
                miss_info = self.missing_data_handle(df)
                miss_data = self.get_miss_data(miss_info)
                miss_df = self.df_handle(miss_data)
                df = df.append(miss_df, ignore_index=True)

            kline_list = df.to_dict('records')
            return kline_restful(self.kline_info, 2000, data=kline_list)
Пример #8
0
 def kline_res_handle(self, kline_acquired):
     if isinstance(kline_acquired, list):
         if not kline_acquired:
             return kline_restful(self.kline_info,
                                  2001,
                                  data=kline_acquired)
         df = pandas.DataFrame(kline_acquired)
         drop_column = [
             'foreignNotional', 'homeNotional', 'lastSize', 'symbol',
             'trades', 'turnover', 'vwap'
         ]
         df = df.drop(columns=drop_column)
         df = df.rename(columns={'volume': 'vol', 'timestamp': '_id'})
         df['_id'] = df['_id'].apply(lambda x: time.mktime(
             time.strptime(x, "%Y-%m-%dT%H:%M:%S.000Z")))
         if self.period == '1min':
             df['ts'] = df['_id'] * 1000
             df['ts'] = df['ts'].astype('int64')
         df['_id'] = df['_id'].astype('int32')
         kline_list = df.to_dict('records')
         return kline_restful(self.kline_info, 2000, data=kline_list)
     if isinstance(kline_acquired, dict):
         # {'error': {'message': 'binSize is invalid.', 'name': 'HTTPError'}}
         return kline_restful(self.kline_info, 4000, data=kline_acquired)