moved interest to exchange class method
This commit is contained in:
parent
de26844578
commit
65a97d5d6c
@ -2,6 +2,8 @@
|
|||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from decimal import Decimal
|
||||||
|
from math import ceil
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict, List, Optional, Tuple
|
from typing import Dict, List, Optional, Tuple
|
||||||
|
|
||||||
@ -358,3 +360,23 @@ class Binance(Exchange):
|
|||||||
else:
|
else:
|
||||||
raise OperationalException(
|
raise OperationalException(
|
||||||
"Freqtrade only supports isolated futures for leverage trading")
|
"Freqtrade only supports isolated futures for leverage trading")
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def interest(
|
||||||
|
cls,
|
||||||
|
borrowed: Decimal,
|
||||||
|
rate: Decimal,
|
||||||
|
hours: Decimal
|
||||||
|
) -> Decimal:
|
||||||
|
"""
|
||||||
|
Equation to calculate interest on margin trades
|
||||||
|
|
||||||
|
:param borrowed: The amount of currency being borrowed
|
||||||
|
:param rate: The rate of interest (i.e daily interest rate)
|
||||||
|
:param hours: The time in hours that the currency has been borrowed for
|
||||||
|
|
||||||
|
Returns: The amount of interest owed (currency matches borrowed)
|
||||||
|
"""
|
||||||
|
twenty_four = Decimal(24.0)
|
||||||
|
|
||||||
|
return borrowed * rate * ceil(hours)/twenty_four
|
||||||
|
@ -8,6 +8,7 @@ import inspect
|
|||||||
import logging
|
import logging
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
|
from decimal import Decimal
|
||||||
from math import ceil
|
from math import ceil
|
||||||
from typing import Any, Dict, List, Literal, Optional, Tuple, Union
|
from typing import Any, Dict, List, Literal, Optional, Tuple, Union
|
||||||
|
|
||||||
@ -2160,6 +2161,28 @@ class Exchange:
|
|||||||
raise OperationalException(
|
raise OperationalException(
|
||||||
"Freqtrade only supports isolated futures for leverage trading")
|
"Freqtrade only supports isolated futures for leverage trading")
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def interest(
|
||||||
|
cls,
|
||||||
|
borrowed: Decimal,
|
||||||
|
rate: Decimal,
|
||||||
|
hours: Decimal
|
||||||
|
) -> Decimal:
|
||||||
|
"""
|
||||||
|
Equation to calculate interest on margin trades
|
||||||
|
|
||||||
|
:param borrowed: The amount of currency being borrowed
|
||||||
|
:param rate: The rate of interest (i.e daily interest rate)
|
||||||
|
:param hours: The time in hours that the currency has been borrowed for
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
OperationalException: Raised if freqtrade does
|
||||||
|
not support margin trading for this exchange
|
||||||
|
|
||||||
|
Returns: The amount of interest owed (currency matches borrowed)
|
||||||
|
"""
|
||||||
|
raise OperationalException('interest not implemented for ' + cls.__name__)
|
||||||
|
|
||||||
|
|
||||||
def is_exchange_known_ccxt(exchange_name: str, ccxt_module: CcxtModuleType = None) -> bool:
|
def is_exchange_known_ccxt(exchange_name: str, ccxt_module: CcxtModuleType = None) -> bool:
|
||||||
return exchange_name in ccxt_exchanges(ccxt_module)
|
return exchange_name in ccxt_exchanges(ccxt_module)
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
""" FTX exchange subclass """
|
""" FTX exchange subclass """
|
||||||
import logging
|
import logging
|
||||||
|
from decimal import Decimal
|
||||||
|
from math import ceil
|
||||||
from typing import Any, Dict, List, Tuple
|
from typing import Any, Dict, List, Tuple
|
||||||
|
|
||||||
import ccxt
|
import ccxt
|
||||||
@ -162,3 +164,25 @@ class Ftx(Exchange):
|
|||||||
if order['type'] == 'stop':
|
if order['type'] == 'stop':
|
||||||
return safe_value_fallback2(order, order, 'id_stop', 'id')
|
return safe_value_fallback2(order, order, 'id_stop', 'id')
|
||||||
return order['id']
|
return order['id']
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def interest(
|
||||||
|
cls,
|
||||||
|
borrowed: Decimal,
|
||||||
|
rate: Decimal,
|
||||||
|
hours: Decimal
|
||||||
|
) -> Decimal:
|
||||||
|
"""
|
||||||
|
Equation to calculate interest on margin trades
|
||||||
|
|
||||||
|
:param borrowed: The amount of currency being borrowed
|
||||||
|
:param rate: The rate of interest (i.e daily interest rate)
|
||||||
|
:param hours: The time in hours that the currency has been borrowed for
|
||||||
|
|
||||||
|
Returns: The amount of interest owed (currency matches borrowed)
|
||||||
|
"""
|
||||||
|
twenty_four = Decimal(24.0)
|
||||||
|
|
||||||
|
# As Explained under #Interest rates section in
|
||||||
|
# https://help.ftx.com/hc/en-us/articles/360053007671-Spot-Margin-Trading-Explainer
|
||||||
|
return borrowed * rate * ceil(hours)/twenty_four
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
""" Kraken exchange subclass """
|
""" Kraken exchange subclass """
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from decimal import Decimal
|
||||||
|
from math import ceil
|
||||||
from typing import Any, Dict, List, Optional, Tuple
|
from typing import Any, Dict, List, Optional, Tuple
|
||||||
|
|
||||||
import ccxt
|
import ccxt
|
||||||
@ -206,3 +208,26 @@ class Kraken(Exchange):
|
|||||||
fees = sum(df['open_fund'] * df['open_mark'] * amount * time_in_ratio)
|
fees = sum(df['open_fund'] * df['open_mark'] * amount * time_in_ratio)
|
||||||
|
|
||||||
return fees if is_short else -fees
|
return fees if is_short else -fees
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def interest(
|
||||||
|
cls,
|
||||||
|
borrowed: Decimal,
|
||||||
|
rate: Decimal,
|
||||||
|
hours: Decimal
|
||||||
|
) -> Decimal:
|
||||||
|
"""
|
||||||
|
Equation to calculate interest on margin trades
|
||||||
|
|
||||||
|
:param borrowed: The amount of currency being borrowed
|
||||||
|
:param rate: The rate of interest (i.e daily interest rate)
|
||||||
|
:param hours: The time in hours that the currency has been borrowed for
|
||||||
|
|
||||||
|
Returns: The amount of interest owed (currency matches borrowed)
|
||||||
|
"""
|
||||||
|
|
||||||
|
one = Decimal(1.0)
|
||||||
|
four = Decimal(4.0)
|
||||||
|
|
||||||
|
# Rounded based on https://kraken-fees-calculator.github.io/
|
||||||
|
return borrowed * rate * (one+ceil(hours/four))
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
# flake8: noqa: F401
|
|
||||||
from freqtrade.leverage.interest import interest
|
|
@ -1,43 +0,0 @@
|
|||||||
from decimal import Decimal
|
|
||||||
from math import ceil
|
|
||||||
|
|
||||||
from freqtrade.exceptions import OperationalException
|
|
||||||
|
|
||||||
|
|
||||||
one = Decimal(1.0)
|
|
||||||
four = Decimal(4.0)
|
|
||||||
twenty_four = Decimal(24.0)
|
|
||||||
|
|
||||||
|
|
||||||
def interest(
|
|
||||||
exchange_name: str,
|
|
||||||
borrowed: Decimal,
|
|
||||||
rate: Decimal,
|
|
||||||
hours: Decimal
|
|
||||||
) -> Decimal:
|
|
||||||
"""
|
|
||||||
Equation to calculate interest on margin trades
|
|
||||||
|
|
||||||
:param exchange_name: The exchanged being trading on
|
|
||||||
:param borrowed: The amount of currency being borrowed
|
|
||||||
:param rate: The rate of interest (i.e daily interest rate)
|
|
||||||
:param hours: The time in hours that the currency has been borrowed for
|
|
||||||
|
|
||||||
Raises:
|
|
||||||
OperationalException: Raised if freqtrade does
|
|
||||||
not support margin trading for this exchange
|
|
||||||
|
|
||||||
Returns: The amount of interest owed (currency matches borrowed)
|
|
||||||
"""
|
|
||||||
exchange_name = exchange_name.lower()
|
|
||||||
if exchange_name == "binance":
|
|
||||||
return borrowed * rate * ceil(hours)/twenty_four
|
|
||||||
elif exchange_name == "kraken":
|
|
||||||
# Rounded based on https://kraken-fees-calculator.github.io/
|
|
||||||
return borrowed * rate * (one+ceil(hours/four))
|
|
||||||
elif exchange_name == "ftx":
|
|
||||||
# As Explained under #Interest rates section in
|
|
||||||
# https://help.ftx.com/hc/en-us/articles/360053007671-Spot-Margin-Trading-Explainer
|
|
||||||
return borrowed * rate * ceil(hours)/twenty_four
|
|
||||||
else:
|
|
||||||
raise OperationalException(f"Leverage not available on {exchange_name} with freqtrade")
|
|
Loading…
Reference in New Issue
Block a user