Extract funding and mark mergin to separate method
This commit is contained in:
parent
84c6d92d4c
commit
82c90c0049
@ -1922,19 +1922,29 @@ class Exchange:
|
|||||||
)
|
)
|
||||||
funding_rates = candle_histories[funding_comb]
|
funding_rates = candle_histories[funding_comb]
|
||||||
mark_rates = candle_histories[mark_comb]
|
mark_rates = candle_histories[mark_comb]
|
||||||
|
funding_mark_rates = self.combine_funding_and_mark(
|
||||||
|
funding_rates=funding_rates, mark_rates=mark_rates)
|
||||||
|
|
||||||
return self.calculate_funding_fees(
|
return self.calculate_funding_fees(
|
||||||
funding_rates=funding_rates,
|
funding_mark_rates,
|
||||||
mark_rates=mark_rates,
|
|
||||||
amount=amount,
|
amount=amount,
|
||||||
open_date=open_date,
|
open_date=open_date,
|
||||||
close_date=close_date
|
close_date=close_date
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def combine_funding_and_mark(funding_rates: DataFrame, mark_rates: DataFrame) -> DataFrame:
|
||||||
|
"""
|
||||||
|
Combine funding-rates and mark-rates dataframes
|
||||||
|
:param funding_rates: Dataframe containing Funding rates (Type FUNDING_RATE)
|
||||||
|
:param mark_rates: Dataframe containing Mark rates (Type mark_ohlcv_price)
|
||||||
|
"""
|
||||||
|
|
||||||
|
return funding_rates.merge(mark_rates, on='date', how="inner", suffixes=["_fund", "_mark"])
|
||||||
|
|
||||||
def calculate_funding_fees(
|
def calculate_funding_fees(
|
||||||
self,
|
self,
|
||||||
funding_rates: DataFrame,
|
df: DataFrame,
|
||||||
mark_rates: DataFrame,
|
|
||||||
amount: float,
|
amount: float,
|
||||||
open_date: datetime,
|
open_date: datetime,
|
||||||
close_date: Optional[datetime] = None,
|
close_date: Optional[datetime] = None,
|
||||||
@ -1942,8 +1952,8 @@ class Exchange:
|
|||||||
) -> float:
|
) -> float:
|
||||||
"""
|
"""
|
||||||
calculates the sum of all funding fees that occurred for a pair during a futures trade
|
calculates the sum of all funding fees that occurred for a pair during a futures trade
|
||||||
:param funding_rates: Dataframe containing Funding rates (Type FUNDING_RATE)
|
:param df: Dataframe containing combined funding and mark rates
|
||||||
:param mark_rates: Dataframe containing Mark rates (Type mark_ohlcv_price)
|
as `open_fund` and `open_mark`.
|
||||||
:param amount: The quantity of the trade
|
:param amount: The quantity of the trade
|
||||||
:param open_date: The date and time that the trade started
|
:param open_date: The date and time that the trade started
|
||||||
:param close_date: The date and time that the trade ended
|
:param close_date: The date and time that the trade ended
|
||||||
@ -1951,7 +1961,6 @@ class Exchange:
|
|||||||
"""
|
"""
|
||||||
fees: float = 0
|
fees: float = 0
|
||||||
|
|
||||||
df = funding_rates.merge(mark_rates, on='date', how="inner", suffixes=["_fund", "_mark"])
|
|
||||||
if not df.empty:
|
if not df.empty:
|
||||||
df = df[(df['date'] >= open_date) & (df['date'] <= close_date)]
|
df = df[(df['date'] >= open_date) & (df['date'] <= close_date)]
|
||||||
fees = sum(df['open_fund'] * df['open_mark'] * amount)
|
fees = sum(df['open_fund'] * df['open_mark'] * amount)
|
||||||
|
@ -161,8 +161,7 @@ class Kraken(Exchange):
|
|||||||
|
|
||||||
def calculate_funding_fees(
|
def calculate_funding_fees(
|
||||||
self,
|
self,
|
||||||
funding_rates: DataFrame,
|
df: DataFrame,
|
||||||
mark_rates: DataFrame,
|
|
||||||
amount: float,
|
amount: float,
|
||||||
open_date: datetime,
|
open_date: datetime,
|
||||||
close_date: Optional[datetime] = None,
|
close_date: Optional[datetime] = None,
|
||||||
@ -174,8 +173,8 @@ class Kraken(Exchange):
|
|||||||
# ! functionality must be added that passes the parameter time_in_ratio to
|
# ! functionality must be added that passes the parameter time_in_ratio to
|
||||||
# ! _get_funding_fee when using Kraken
|
# ! _get_funding_fee when using Kraken
|
||||||
calculates the sum of all funding fees that occurred for a pair during a futures trade
|
calculates the sum of all funding fees that occurred for a pair during a futures trade
|
||||||
:param funding_rates: Dataframe containing Funding rates (Type FUNDING_RATE)
|
:param df: Dataframe containing combined funding and mark rates
|
||||||
:param mark_rates: Dataframe containing Mark rates (Type mark_ohlcv_price)
|
as `open_fund` and `open_mark`.
|
||||||
:param amount: The quantity of the trade
|
:param amount: The quantity of the trade
|
||||||
:param open_date: The date and time that the trade started
|
:param open_date: The date and time that the trade started
|
||||||
:param close_date: The date and time that the trade ended
|
:param close_date: The date and time that the trade ended
|
||||||
@ -186,7 +185,6 @@ class Kraken(Exchange):
|
|||||||
f"time_in_ratio is required for {self.name}._get_funding_fee")
|
f"time_in_ratio is required for {self.name}._get_funding_fee")
|
||||||
fees: float = 0
|
fees: float = 0
|
||||||
|
|
||||||
df = funding_rates.merge(mark_rates, on='date', how="inner", suffixes=["_fund", "_mark"])
|
|
||||||
if not df.empty:
|
if not df.empty:
|
||||||
df = df[(df['date'] >= open_date) & (df['date'] <= close_date)]
|
df = df[(df['date'] >= open_date) & (df['date'] <= close_date)]
|
||||||
fees = sum(df['open_fund'] * df['open_mark'] * amount * time_in_ratio)
|
fees = sum(df['open_fund'] * df['open_mark'] * amount * time_in_ratio)
|
||||||
|
@ -3540,7 +3540,7 @@ def test_get_max_leverage(default_conf, mocker, pair, nominal_value, max_lev):
|
|||||||
(10, 0.0002, 2.0, 0.01, 0.004, 0.00004),
|
(10, 0.0002, 2.0, 0.01, 0.004, 0.00004),
|
||||||
(10, 0.0002, 2.5, None, 0.005, None),
|
(10, 0.0002, 2.5, None, 0.005, None),
|
||||||
])
|
])
|
||||||
def test__calculate_funding_fees(
|
def test_calculate_funding_fees(
|
||||||
default_conf,
|
default_conf,
|
||||||
mocker,
|
mocker,
|
||||||
size,
|
size,
|
||||||
@ -3562,10 +3562,10 @@ def test__calculate_funding_fees(
|
|||||||
{'date': prior_date, 'open': mark_price},
|
{'date': prior_date, 'open': mark_price},
|
||||||
{'date': trade_date, 'open': mark_price},
|
{'date': trade_date, 'open': mark_price},
|
||||||
])
|
])
|
||||||
|
df = exchange.combine_funding_and_mark(funding_rates, mark_rates)
|
||||||
|
|
||||||
assert exchange.calculate_funding_fees(
|
assert exchange.calculate_funding_fees(
|
||||||
funding_rates=funding_rates,
|
df,
|
||||||
mark_rates=mark_rates,
|
|
||||||
amount=size,
|
amount=size,
|
||||||
open_date=trade_date,
|
open_date=trade_date,
|
||||||
close_date=trade_date,
|
close_date=trade_date,
|
||||||
@ -3575,8 +3575,7 @@ def test__calculate_funding_fees(
|
|||||||
if (kraken_fee is None):
|
if (kraken_fee is None):
|
||||||
with pytest.raises(OperationalException):
|
with pytest.raises(OperationalException):
|
||||||
kraken.calculate_funding_fees(
|
kraken.calculate_funding_fees(
|
||||||
funding_rates=funding_rates,
|
df,
|
||||||
mark_rates=mark_rates,
|
|
||||||
amount=size,
|
amount=size,
|
||||||
open_date=trade_date,
|
open_date=trade_date,
|
||||||
close_date=trade_date,
|
close_date=trade_date,
|
||||||
@ -3585,8 +3584,7 @@ def test__calculate_funding_fees(
|
|||||||
|
|
||||||
else:
|
else:
|
||||||
assert kraken.calculate_funding_fees(
|
assert kraken.calculate_funding_fees(
|
||||||
funding_rates=funding_rates,
|
df,
|
||||||
mark_rates=mark_rates,
|
|
||||||
amount=size,
|
amount=size,
|
||||||
open_date=trade_date,
|
open_date=trade_date,
|
||||||
close_date=trade_date,
|
close_date=trade_date,
|
||||||
|
Loading…
Reference in New Issue
Block a user