Skip to content

Commit

Permalink
bug fixes for interval scaling
Browse files Browse the repository at this point in the history
  • Loading branch information
realiti4 committed Apr 22, 2021
1 parent 0994b74 commit f3397c6
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 15 deletions.
7 changes: 4 additions & 3 deletions tradingfeatures/api_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def get(self, *args, **kwargs):
def interval_check(self, interval):
if 'h' in interval:
interval = int(interval.split('h')[0]) * 3600
minutes = int(interval / 60)
minutes = int(interval / 60)
elif 'm' in interval:
interval = int(interval.split('m')[0]) * 60
minutes = int(interval / 60)
Expand Down Expand Up @@ -116,6 +116,7 @@ def get_hist(self,
assert len(df) == 0, 'Debug: empty df_temp in middle of download'
df_temp = df
except Exception as e:
# raise e
print(e, '\nError between timestamps: ', start_batch, end_batch)
if steps <= 1: return None

Expand Down Expand Up @@ -168,13 +169,13 @@ def update(self, path):

return df_final

def calc_start(self, limit, start=None, end=None, interval=3600):
def calc_start(self, limit, start=None, end=None, interval=3600, scale=1):
current_time = int(time.time())
if isinstance(interval, str):
interval = self.interval_check(interval)[0]

limit = self.limit if limit is None else limit
limit = int(limit / (interval / 3600))
limit = int(limit / scale) # for 8h funding, bad solution
end = current_time if end is None else end
if start is None:
start = end - (interval * (limit-1)) # limit -1 to be sure to get the latest hour
Expand Down
4 changes: 2 additions & 2 deletions tradingfeatures/apis/binance/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@ def get(self,
address = self.base_address + address
symbol = symbol or 'btcusd'

start, end, out_of_range = self.calc_start(limit, start, end)
start, end, out_of_range = self.calc_start(limit, start, end, interval)
if out_of_range:
return self.get_hist(symbol=symbol, start=start, end=end)
return self.get_hist(symbol=symbol, start=start, end=end, interval=interval)

symbol = self.symbol_check(symbol) # had to give raw symbol above, this has to be after

Expand Down
8 changes: 4 additions & 4 deletions tradingfeatures/apis/binance/funding.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ def get(self,
query: dict = None,
start: int = None,
end: int = None,
interval: str = '1h',
interval: str = '8h',
columns: list = None,
return_r: bool = False,
):

interval = '8h'
start, end, out_of_range = self.calc_start(limit, start, end, interval)
assert interval == '8h'
start, end, out_of_range = self.calc_start(limit, start, end, interval, scale=8)
if out_of_range:
return self.get_hist(start=start, end=end)

Expand All @@ -50,7 +50,7 @@ def get(self,
limit = self.limit if limit is None else limit
start, end = self.ts_to_mts(start), self.ts_to_mts(end)

query = {'symbol': symbol, 'startTime': start, 'endTime': end, 'limit': limit}
query = {'symbol': symbol, 'startTime': start, 'endTime': end, 'limit': self.limit}

r = self.response_handler(address, query)

Expand Down
21 changes: 15 additions & 6 deletions tradingfeatures/apis/bitmex/funding.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,19 @@ def __init__(self):
self.address = '/funding'
self.start = 1463227200
self.limit = 500

def get(self, limit=None, symbol=None, query=None, start=None, end=None, *args, **kwargs):
interval = '8h'
start, end, out_of_range = self.calc_start(limit, start, end, interval)
self.default_columns = ['fundingRate']

def get(self,
limit=None,
symbol=None,
query=None,
start=None,
end=None,
interval: str = '8h',
*args, **kwargs
):
assert interval == '8h'
start, end, out_of_range = self.calc_start(limit, start, end, interval, scale=8)
if out_of_range:
return self.get_hist(start=start, end=end)

Expand Down Expand Up @@ -69,10 +78,10 @@ def get_recent(self, df): # Recent Funding
return df_final

def get_hist(self, columns=None, convert_funds=False, *args, **kwargs):
columns = ['fundingRate', 'fundingRateDaily'] if columns is None else columns
# columns = ['fundingRate', 'fundingRateDaily'] if columns is None else columns
return apiBase.get_hist(
self,
columns=columns,
# columns=columns,
interval='8h',
*args, **kwargs
)
Expand Down

0 comments on commit f3397c6

Please sign in to comment.