diff --git a/findatapy/market/datavendor.py b/findatapy/market/datavendor.py index 8baa9b6..3e088f9 100644 --- a/findatapy/market/datavendor.py +++ b/findatapy/market/datavendor.py @@ -217,9 +217,6 @@ def translate_from_vendor_field(self, vendor_fields_list, # Otherwise used stored configuration files (every field needs to be # defined!) else: - if "-" in data_source: - data_source = data_source.split("-")[0] - for vendor_field in vendor_fields_list: try: v = self.config.convert_vendor_to_library_field( diff --git a/findatapy/market/datavendorcrypto.py b/findatapy/market/datavendorcrypto.py index e34ab17..601b949 100644 --- a/findatapy/market/datavendorcrypto.py +++ b/findatapy/market/datavendorcrypto.py @@ -16,9 +16,12 @@ # import pandas - +from pandas import json_normalize +import requests +from requests import get from findatapy.market.datavendor import DataVendor from findatapy.util import LoggerManager +import datetime class DataVendorBitcoincharts(DataVendor): @@ -31,31 +34,28 @@ def __init__(self): # implement method in abstract superclass def load_ticker(self, md_request): + logger = LoggerManager().getLogger(__name__) md_request_vendor = self.construct_vendor_md_request( md_request) - logger.info("Request data from Bitcoincharts") - - data_website = 'http://api.bitcoincharts.com/v1/csv/' + \ - md_request_vendor.tickers[0] + '.csv.gz' - data_frame = pandas.read_csv(data_website, - names=['datetime', 'close', 'volume']) - data_frame = data_frame.set_index('datetime') - data_frame.index = pandas.to_datetime(data_frame.index, unit='s') + data_website = 'https://www.bitmex.com/api/v1/trade/bucketed?binSize=1d&partial=false&symbol=XBT&count=1000&reverse=false' + response = requests.get(data_website) + data_frame = json_normalize(response.json()) + data_frame['timestamp'] = data_frame['timestamp'].apply(datetime.fromisoformat) + # data_frame = pandas.read_csv(data_website, + # names=['datetime', 'close', 'volume']) + data_frame = data_frame.set_index('timestamp') + data_frame = data_frame[['close', 'volume']] + # data_frame.index = pandas.to_datetime(data_frame.index, unit='s') data_frame.index.name = 'Date' data_frame = data_frame[ - (data_frame.index >= md_request_vendor.start_date) & ( - data_frame.index <= md_request_vendor.finish_date)] + (data_frame.index >= md_request_vendor.start_date.tz_localize("UTC")) & ( + data_frame.index <= md_request_vendor.finish_date.tz_localize("UTC"))] # data_frame = df[~df.index.duplicated(keep='last')] - if len(data_frame) == 0: - logger.warning( - "Warning: No data. Please change the start_date and finish_date.") - data_frame.columns = [md_request.tickers[0] + '.close', md_request.tickers[0] + '.volume'] logger.info("Completed request from Bitcoincharts.") - return data_frame diff --git a/findatapy_examples/cryptodata_example.py b/findatapy_examples/cryptodata_example.py index 3d0152a..2ef2096 100644 --- a/findatapy_examples/cryptodata_example.py +++ b/findatapy_examples/cryptodata_example.py @@ -21,6 +21,7 @@ if __name__ == "__main__": ###### below line CRUCIAL when running Windows, otherwise multiprocessing # doesn"t work! (not necessary on Linux) + from findatapy.util import SwimPool; SwimPool() @@ -51,13 +52,13 @@ # fields contains ["close","volume"] # return tick data - md_request = MarketDataRequest(start_date="11 Jan 2018", - finish_date="02 Feb 2018", cut="LOC", + md_request = MarketDataRequest(start_date="09 Sep 2024", + finish_date="10 Oct 2024", cut="LOC", freq="tick", data_source="bitcoincharts", category="crypto", fields=["close", "volume"], - tickers=["XBTUSD_itbit"]) + tickers=["XBT"]) df = market.fetch_market(md_request) print(df.head(5))