wrote get_funding_rate_history method

This commit is contained in:
Sam Germain 2021-10-22 08:30:20 -06:00
parent 8060a3c822
commit 2b7fa2721f
3 changed files with 38 additions and 8 deletions

View File

@ -1819,9 +1819,12 @@ class Exchange:
return fees
def get_funding_rate_history(self, pair: str, start: int, end: int):
def get_funding_rate_history(
self,
start: int,
end: int
) -> Dict:
'''
:param pair: quote/base currency pair
:param start: timestamp in ms of the beginning time
:param end: timestamp in ms of the end time
'''
@ -1832,12 +1835,21 @@ class Exchange:
)
try:
fund_history = self._api.fetch_funding_rate_history(
pair,
since=start,
)
for fund in fund_history:
self.funding_rate_history[pair][fund['timestamp']] = fund['funding_rate']
funding_history: Dict = {}
for pair, market in self.markets.items():
if market['swap']:
response = self._api.fetch_funding_rate_history(
pair,
limit=1000,
since=start,
params={
'endTime': end
}
)
funding_history[pair] = {}
for fund in response:
funding_history[pair][fund['timestamp']] = fund['funding_rate']
return funding_history
except ccxt.DDoSProtection as e:
raise DDosProtection(e) from e
except (ccxt.NetworkError, ccxt.ExchangeError) as e:

View File

@ -33,3 +33,15 @@ class Gateio(Exchange):
if any(v == 'market' for k, v in order_types.items()):
raise OperationalException(
f'Exchange {self.name} does not support market orders.')
def get_funding_rate_history(
self,
start: int,
end: int
) -> Dict:
'''
:param start: timestamp in ms of the beginning time
:param end: timestamp in ms of the end time
'''
# TODO-lev: Has a max limit into the past of 333 days
return super().get_funding_rate_history(start, end)

View File

@ -3,6 +3,7 @@
"""
This module contains the backtesting logic
"""
import ccxt
import logging
from collections import defaultdict
from copy import deepcopy
@ -125,6 +126,11 @@ class Backtesting:
self.progress = BTProgress()
self.abort = False
self.funding_rate_history = getattr(ccxt, self._exchange_name).load_funding_rate_history(
self.timerange.startts,
self.timerange.stopts
)
self.init_backtest()
def __del__(self):