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
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
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)