Пример #1
0
    def get_historical_klines(self,
                              symbol: str,
                              interval: str,
                              startTime: Union[int, str],
                              endTime: Union[int, str] = None) -> dict:
        params = locals()
        del params['self']
        earliest_timestamp = self._get_earliest_valid_timestamp(
            symbol, interval)

        params['startTime'] = format_time(params['startTime'])
        params['startTime'] = max(earliest_timestamp, params['startTime'])
        if (params['endTime'] is not None):
            params['endTime'] = format_time(params['endTime'])
        if (params['endTime']
                is not None) and (params['startTime'] > params['endTime']):
            raise ValueError('startTime entered is greater than endTime')
        params = {k: v for k, v in params.items() if v is not None}
        params['limit'] = 500
        data = []
        api_call_count = 0
        while (True):
            fetched_data = self.get_klines(**params)
            api_call_count += 1
            data.extend(fetched_data)
            if (len(fetched_data) < params['limit']):
                break
            params['startTime'] = fetched_data[-1][0] + interval_to_ms(
                interval)
            if (api_call_count) == 3:
                time.sleep(0.5)
                api_call_count = 0
        return data
Пример #2
0
    def _get_historical_data(self,
                             func: Callable,
                             symbol,
                             startTime: Union[int, str] = 0,
                             endTime: Union[int, str] = None,
                             **kwargs) -> dict:

        earliest_timestamp = func(symbol, startTime=0, limit=1)[0]['time']
        startTime = format_time(startTime)
        startTime = max(earliest_timestamp, startTime)
        if (endTime is not None):
            endTime = format_time(endTime)
            if (startTime > endTime):
                raise ValueError('startTime entered is greater than endTime')
        data = []
        limit = 500
        api_call_count = 0
        while (True):
            fetched_data = func(symbol,
                                startTime=startTime,
                                endTime=endTime,
                                limit=limit,
                                **kwargs)
            api_call_count += 1
            data.extend(fetched_data)
            if (len(fetched_data) < limit):
                break
            startTime = fetched_data[-1]['time'] + 1
            if (api_call_count) == 3:
                time.sleep(0.5)  # sleep to prevent overload of api calls
                api_call_count = 0
        return data
Пример #3
0
 def get_agg_trades(self,
                    symbol: str,
                    formId: int = None,
                    startTime: int = None,
                    endTime: int = None,
                    limit: int = 500):
     params = locals()
     del params['self']
     if (params['startTime'] is not None):
         params['startTime'] = format_time(params['startTime'])
     if (params['endTime'] is not None):
         params['endTime'] = format_time(params['endTime'])
     params = {k: v for k, v in params.items() if v is not None}
     uri = self._create_api_uri('aggTrades')
     return self.request_handler.get(uri, **params)
Пример #4
0
    def get_daily_account_snapshot(self,
                                   type: str,
                                   startTime: Union[int, str] = None,
                                   endTime: Union[int, str] = None,
                                   limit: int = 5,
                                   recvWindow: int = None) -> dict:

        params = locals()
        del params['self']
        if (params['startTime'] is not None):
            params['startTime'] = format_time(params['startTime'])
        if (params['endTime'] is not None):
            params['endTime'] = format_time(params['endTime'])
        params = {k: v for k, v in params.items() if v is not None}
        uri = self._create_wallet_v1_api_uri('accountSnapshot')
        return self.request_handler.get(uri, signed=True, **params)
Пример #5
0
    def get_asset_dividend_record(self,
                                  asset: str = None,
                                  startTime: int = None,
                                  endTime: int = None,
                                  limit: int = None,
                                  recvWindow: int = None) -> dict:

        params = locals()
        del params['self']
        if (params['startTime'] is not None):
            params['startTime'] = format_time(params['startTime'])
        if (params['endTime'] is not None):
            params['endTime'] = format_time(params['endTime'])
        params = {k: v for k, v in params.items() if v is not None}
        uri = self._create_wallet_v1_api_uri('asset/assetDividend')
        return self.request_handler.get(uri, signed=True, **params)
Пример #6
0
    def get_klines(self,
                   symbol: str,
                   interval: str,
                   startTime: Union[int, str] = None,
                   endTime: Union[int, str] = None,
                   limit: int = None) -> dict:

        params = locals()
        del params['self']
        if (params['startTime'] is not None):
            params['startTime'] = format_time(params['startTime'])
        if (params['endTime'] is not None):
            params['endTime'] = format_time(params['endTime'])
        params = {k: v for k, v in params.items() if v is not None}
        uri = self._create_api_uri('klines')
        return self.request_handler.get(uri, **params)
Пример #7
0
    def cross_collateral_borrow_history(self,
                                        coin: str = None,
                                        startTime: Union[int, str] = None,
                                        endTime: Union[int, str] = None,
                                        limit: int = None,
                                        recvWindow: int = None) -> dict:

        params = locals()
        del params['self']
        if params['startTime'] is not None:
            params['startTime'] = format_time(params['startTime'])
        if params['endTime'] is not None:
            params['endTime'] = format_time(params['endTime'])
        params = {k: v for k, v in params.items() if v is not None}
        uri = self._create_futures_api_uri('futures/loan/borrow/history')
        return self.request_handler.get(uri, signed=True, **params)
Пример #8
0
 def get_future_transaction_history(self,
                                    asset: str,
                                    startTime: Union[int, str] = None,
                                    endTime: Union[int, str] = None,
                                    current: int = None,
                                    size: int = None,
                                    recvWindow: int = None) -> dict:
     params = locals()
     del params['self']
     if params['startTime'] is not None:
         params['startTime'] = format_time(params['startTime'])
     if params['endTime'] is not None:
         params['endTime'] = format_time(params['endTime'])
     params = {k: v for k, v in params.items() if v is not None}
     uri = self._create_futures_api_uri('futures/transfer')
     return self.request_handler.get(uri, signed=True, **params)
Пример #9
0
 def get_margin_force_liquidation_record(self,
                                         isolatedSymbol: str = None,
                                         txId: int = None,
                                         startTime: int = None,
                                         endTime: int = None,
                                         current: int = 1,
                                         size: int = 10,
                                         recvWindow: int = None):
     params = locals()
     del params['self']
     if params['startTime'] is not None:
         params['startTime'] = format_time(params['startTime'])
     if params['endTime'] is not None:
         params['endtTime'] = format_time(params['endTime'])
     params = {k: v for k, v in params.items() if v is not None}
     uri = self._create_margin_api_uri('margin/forceLiquidationRec')
     return self.request_handler.get(uri, signed=True, **params)
Пример #10
0
 def get_cross_margin_transfer_history(self,
                                       asset: str = None,
                                       type: str = None,
                                       startTime: int = None,
                                       endTime: int = None,
                                       current: int = 1,
                                       size: int = 10,
                                       archived: bool = False,
                                       recvWindow: int = None):
     params = locals()
     del params['self']
     if params['startTime'] is not None:
         params['startTime'] = format_time(params['startTime'])
     if params['endTime'] is not None:
         params['endtTime'] = format_time(params['endTime'])
     params = {k: v for k, v in params.items() if v is not None}
     uri = self._create_margin_api_uri('margin/transfer')
     return self.request_handler.get(uri, signed=True, **params)
Пример #11
0
    def get_withdraw_history(self,
                             coin: str = None,
                             status: int = None,
                             offset: int = None,
                             limit: int = None,
                             startTime: Union[int, str] = None,
                             endTime: Union[int, str] = None,
                             recvWindow: int = None) -> dict:

        params = locals()
        del params['self']
        if (params['startTime'] is not None):
            params['startTime'] = format_time(params['startTime'])
        if (params['endTime'] is not None):
            params['endTime'] = format_time(params['endTime'])
        self._check_history_timeline(params['startTime'], params['endTime'])
        params = {k: v for k, v in params.items() if v is not None}
        uri = self._create_wallet_v1_api_uri('capital/withdraw/history')
        return self.request_handler.get(uri, signed=True, **params)
Пример #12
0
 def get_isolated_margin_transfer_history(self,
                                          symbol: str,
                                          asset: str = None,
                                          transFrom: str = None,
                                          transTo: str = None,
                                          startTime: Union[str, int] = None,
                                          endTime: Union[str, int] = None,
                                          current: int = None,
                                          size: int = None,
                                          recvWindow: int = None):
     params = locals()
     del params['self']
     if params['startTime'] is not None:
         params['startTime'] = format_time(params['startTime'])
     if params['endTime'] is not None:
         params['endtTime'] = format_time(params['endTime'])
     params = {k: v for k, v in params.items() if v is not None}
     uri = self._create_margin_api_uri('margin/isolated/transfer')
     return self.request_handler.get(uri, signed=True, **params)
Пример #13
0
 def query_margin_account_trade_list(self,
                                     symbol: str,
                                     isIsolated: bool = False,
                                     startTime: int = None,
                                     endTime: int = None,
                                     formId: int = None,
                                     limit: int = 500,
                                     recvWindow: int = None):
     params = locals()
     del params['self']
     params['isIsolated'] = 'TRUE' if (params['isIsolated']
                                       == True) else 'FALSE'
     if params['startTime'] is not None:
         params['startTime'] = format_time(params['startTime'])
     if params['endTime'] is not None:
         params['endtTime'] = format_time(params['endTime'])
     params = {k: v for k, v in params.items() if v is not None}
     uri = self._create_margin_api_uri('margin/myTrades')
     return self.request_handler.get(uri, signed=True, **params)
Пример #14
0
 def query_margin_repay_record(self,
                               asset: str,
                               isolatedSymbol: str = None,
                               txId: int = None,
                               startTime: int = None,
                               endTime: int = None,
                               current: int = 1,
                               size: int = 10,
                               archived: bool = False,
                               recvWindow: int = None):
     params = locals()
     del params['self']
     if params['startTime'] is not None:
         params['startTime'] = format_time(params['startTime'])
     if params['endTime'] is not None:
         params['endtTime'] = format_time(params['endTime'])
     params = {k: v for k, v in params.items() if v is not None}
     uri = self._create_margin_api_uri('margin/repay')
     return self.request_handler.get(uri, signed=True, **params)
Пример #15
0
 def test_format_time(self):
     self.assertEqual(format_time(1614288267), 1614288267)
     self.assertEqual(format_time(1614288267.0), 1614288267.0)
     self.assertEqual(format_time("02/25/2021"), 1614211200000)
     self.assertEqual(format_time("25/2/2021"), 1614211200000)
     self.assertEqual(format_time("25.2.2021"), 1614211200000)
     self.assertEqual(format_time("2/23/2021 18:15:55"), 1614104155000)
Пример #16
0
    def get_all_oco_orders(self,
                           formId: int = None,
                           startTime: Union[int, str] = None,
                           endTime: Union[int, str] = None,
                           limit: int = None,
                           recvWindow: int = None) -> dict:

        params = locals()
        del params['self']
        if (params['formId']
                is not None) and ((params['startTime'] is not None) or
                                  (params['endTime'] is not None)):
            raise SpotTradingError(
                "All OCO orders called with both formId and startTime/endTime "
            )
        if params['startTime'] is not None:
            params['startTime'] = format_time(params['startTime'])
        if params['endTime'] is not None:
            params['endTime'] = format_time(params['endTime'])
        params = {k: v for k, v in params.items() if v is not None}
        uri = self._create_api_uri('allOrderList',
                                   version=self.API_VERSION.PRIVATE)
        return self.request_handler.get(uri, signed=True, **params)