Replace Decimal with FtPrecise in trade_model
This commit is contained in:
parent
b427c7ff13
commit
0e61c2d057
@ -3,7 +3,6 @@ This module contains the class to persist trades into SQLite
|
|||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from decimal import Decimal
|
|
||||||
from math import isclose
|
from math import isclose
|
||||||
from typing import Any, Dict, List, Optional
|
from typing import Any, Dict, List, Optional
|
||||||
|
|
||||||
@ -17,6 +16,7 @@ from freqtrade.enums import ExitType, TradingMode
|
|||||||
from freqtrade.exceptions import DependencyException, OperationalException
|
from freqtrade.exceptions import DependencyException, OperationalException
|
||||||
from freqtrade.leverage import interest
|
from freqtrade.leverage import interest
|
||||||
from freqtrade.persistence.base import _DECL_BASE
|
from freqtrade.persistence.base import _DECL_BASE
|
||||||
|
from freqtrade.util import FtPrecise
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@ -694,8 +694,8 @@ class LocalTrade():
|
|||||||
Calculate the open_rate including open_fee.
|
Calculate the open_rate including open_fee.
|
||||||
:return: Price in of the open trade incl. Fees
|
:return: Price in of the open trade incl. Fees
|
||||||
"""
|
"""
|
||||||
open_trade = Decimal(amount) * Decimal(open_rate)
|
open_trade = FtPrecise(amount) * FtPrecise(open_rate)
|
||||||
fees = open_trade * Decimal(self.fee_open)
|
fees = open_trade * FtPrecise(self.fee_open)
|
||||||
if self.is_short:
|
if self.is_short:
|
||||||
return float(open_trade - fees)
|
return float(open_trade - fees)
|
||||||
else:
|
else:
|
||||||
@ -708,30 +708,30 @@ class LocalTrade():
|
|||||||
"""
|
"""
|
||||||
self.open_trade_value = self._calc_open_trade_value(self.amount, self.open_rate)
|
self.open_trade_value = self._calc_open_trade_value(self.amount, self.open_rate)
|
||||||
|
|
||||||
def calculate_interest(self) -> Decimal:
|
def calculate_interest(self) -> FtPrecise:
|
||||||
"""
|
"""
|
||||||
Calculate interest for this trade. Only applicable for Margin trading.
|
Calculate interest for this trade. Only applicable for Margin trading.
|
||||||
"""
|
"""
|
||||||
zero = Decimal(0.0)
|
zero = FtPrecise(0.0)
|
||||||
# If nothing was borrowed
|
# If nothing was borrowed
|
||||||
if self.trading_mode != TradingMode.MARGIN or self.has_no_leverage:
|
if self.trading_mode != TradingMode.MARGIN or self.has_no_leverage:
|
||||||
return zero
|
return zero
|
||||||
|
|
||||||
open_date = self.open_date.replace(tzinfo=None)
|
open_date = self.open_date.replace(tzinfo=None)
|
||||||
now = (self.close_date or datetime.now(timezone.utc)).replace(tzinfo=None)
|
now = (self.close_date or datetime.now(timezone.utc)).replace(tzinfo=None)
|
||||||
sec_per_hour = Decimal(3600)
|
sec_per_hour = FtPrecise(3600)
|
||||||
total_seconds = Decimal((now - open_date).total_seconds())
|
total_seconds = FtPrecise((now - open_date).total_seconds())
|
||||||
hours = total_seconds / sec_per_hour or zero
|
hours = total_seconds / sec_per_hour or zero
|
||||||
|
|
||||||
rate = Decimal(self.interest_rate)
|
rate = FtPrecise(self.interest_rate)
|
||||||
borrowed = Decimal(self.borrowed)
|
borrowed = FtPrecise(self.borrowed)
|
||||||
|
|
||||||
return interest(exchange_name=self.exchange, borrowed=borrowed, rate=rate, hours=hours)
|
return interest(exchange_name=self.exchange, borrowed=borrowed, rate=rate, hours=hours)
|
||||||
|
|
||||||
def _calc_base_close(self, amount: Decimal, rate: float, fee: float) -> Decimal:
|
def _calc_base_close(self, amount: FtPrecise, rate: float, fee: float) -> FtPrecise:
|
||||||
|
|
||||||
close_trade = amount * Decimal(rate)
|
close_trade = amount * FtPrecise(rate)
|
||||||
fees = close_trade * Decimal(fee)
|
fees = close_trade * FtPrecise(fee)
|
||||||
|
|
||||||
if self.is_short:
|
if self.is_short:
|
||||||
return close_trade + fees
|
return close_trade + fees
|
||||||
@ -747,7 +747,7 @@ class LocalTrade():
|
|||||||
if rate is None and not self.close_rate:
|
if rate is None and not self.close_rate:
|
||||||
return 0.0
|
return 0.0
|
||||||
|
|
||||||
amount1 = Decimal(amount or self.amount)
|
amount1 = FtPrecise(amount or self.amount)
|
||||||
trading_mode = self.trading_mode or TradingMode.SPOT
|
trading_mode = self.trading_mode or TradingMode.SPOT
|
||||||
|
|
||||||
if trading_mode == TradingMode.SPOT:
|
if trading_mode == TradingMode.SPOT:
|
||||||
|
@ -78,3 +78,5 @@ def test_FtPrecise():
|
|||||||
assert FtPrecise(-213) == '-213'
|
assert FtPrecise(-213) == '-213'
|
||||||
assert str(FtPrecise(-213)) == '-213'
|
assert str(FtPrecise(-213)) == '-213'
|
||||||
assert FtPrecise(213.2) == '213.2'
|
assert FtPrecise(213.2) == '213.2'
|
||||||
|
assert float(FtPrecise(213.2)) == 213.2
|
||||||
|
assert float(FtPrecise(-213.2)) == -213.2
|
||||||
|
Loading…
Reference in New Issue
Block a user