def fetch(self, symbol, start_timestamp): """ note1: unlike Bitfinex, Binance does NOT skip candles with volume=0. note2: like Bitfinex, start_time includes the candle and so does the end_time. """ end_timestamp = start_timestamp + (self.count - 1) * 60000 dashless_symbol = jh.dashless_symbol(symbol) payload = { 'interval': '1m', 'symbol': dashless_symbol, 'startTime': start_timestamp, 'endTime': end_timestamp, 'limit': self.count, } response = requests.get(self.endpoint, params=payload) # Exchange In Maintenance if response.status_code == 502: raise exceptions.ExchangeInMaintenance( 'ERROR: 502 Bad Gateway. Please try again later') # unsupported symbol if response.status_code == 400: raise ValueError(response.json()['msg']) if response.status_code != 200: return data = response.json() candles = [] for d in data: candles.append({ 'id': jh.generate_unique_id(), 'symbol': symbol, 'exchange': self.name, 'timestamp': int(d[0]), 'open': float(d[1]), 'close': float(d[4]), 'high': float(d[2]), 'low': float(d[3]), 'volume': float(d[5]) }) return candles
def fetch(self, symbol, start_timestamp): end_timestamp = start_timestamp + (self.count - 1) * 60000 dashless_symbol = jh.dashless_symbol(symbol) payload = { 'interval': '1m', 'symbol': dashless_symbol, 'startTime': start_timestamp, 'endTime': end_timestamp, 'limit': self.count, } response = requests.get(self.endpoint, params=payload) # Exchange In Maintenance if response.status_code == 502: raise exceptions.ExchangeInMaintenance( 'ERROR: 502 Bad Gateway. Please try again later') # unsupported symbol if response.status_code == 400: raise ValueError(response.json()['msg']) if response.status_code != 200: return data = response.json() return [{ 'id': jh.generate_unique_id(), 'symbol': symbol, 'exchange': self.name, 'timestamp': int(d[0]), 'open': float(d[1]), 'close': float(d[4]), 'high': float(d[2]), 'low': float(d[3]), 'volume': float(d[5]) } for d in data]
def fetch(self, symbol: str, start_timestamp: int) -> Union[list, None]: dashless_symbol = jh.dashless_symbol(symbol) payload = { 'interval': 1, 'symbol': dashless_symbol, 'from': int(start_timestamp / 1000), 'limit': self.count, } response = requests.get(self.endpoint, params=payload) # Exchange In Maintenance if response.status_code == 502: raise exceptions.ExchangeInMaintenance('ERROR: 502 Bad Gateway. Please try again later') # unsupported symbol if response.status_code == 400: raise ValueError(response.json()['msg']) if response.status_code != 200: return data = response.json()['result'] return [{ 'id': jh.generate_unique_id(), 'symbol': symbol, 'exchange': self.name, 'timestamp': int(d['open_time']) * 1000, 'open': float(d['open']), 'close': float(d['close']), 'high': float(d['high']), 'low': float(d['low']), 'volume': float(d['volume']) } for d in data]
def fetch(self, symbol: str, start_timestamp): # since Bitfinex API skips candles with "volume=0", we have to send end_timestamp # instead of limit. Therefore, we use limit number to calculate the end_timestamp end_timestamp = start_timestamp + (self.count - 1) * 60000 payload = { 'start': start_timestamp, 'end': end_timestamp, 'limit': self.count, 'sort': 1 } dashless_symbol = jh.dashless_symbol(symbol) response = requests.get( f"{self.endpoint}/trade:1m:t{dashless_symbol}/hist", params=payload ) data = response.json() candles = [] for d in data: candles.append({ 'id': jh.generate_unique_id(), 'symbol': symbol, 'exchange': self.name, 'timestamp': d[0], 'open': d[1], 'close': d[2], 'high': d[3], 'low': d[4], 'volume': d[5] }) return candles
def test_dashless_symbol(): assert jh.dashless_symbol('BTC-USD') == 'BTCUSD' assert jh.dashless_symbol('BTC-USDT') == 'BTCUSDT' # make sure that it works even if it's already dashless assert jh.dashless_symbol('BTCUSDT') == 'BTCUSDT'
def test_dashless_symbol(): assert jh.dashless_symbol('BTC-USD') == 'BTCUSD' assert jh.dashless_symbol('BTC-USDT') == 'BTCUSDT'