Merge pull request #2307 from freqtrade/rounding

Don't compare floats when updating fees
This commit is contained in:
hroff-1902
2019-09-28 12:39:27 +03:00
committed by GitHub
3 changed files with 79 additions and 2 deletions

View File

@@ -22,6 +22,7 @@ ORDERTYPE_POSSIBILITIES = ['limit', 'market']
ORDERTIF_POSSIBILITIES = ['gtc', 'fok', 'ioc']
AVAILABLE_PAIRLISTS = ['StaticPairList', 'VolumePairList']
DRY_RUN_WALLET = 999.9
MATH_CLOSE_PREC = 1e-14 # Precision used for float comparisons
TICKER_INTERVALS = [
'1m', '3m', '5m', '15m', '30m',

View File

@@ -6,6 +6,7 @@ import copy
import logging
import traceback
from datetime import datetime
from math import isclose
from typing import Any, Dict, List, Optional, Tuple
import arrow
@@ -510,7 +511,7 @@ class FreqtradeBot:
trade.pair.startswith(exectrade['fee']['currency'])):
fee_abs += exectrade['fee']['cost']
if amount != order_amount:
if not isclose(amount, order_amount, abs_tol=constants.MATH_CLOSE_PREC):
logger.warning(f"Amount {amount} does not match amount {trade.amount}")
raise OperationalException("Half bought? Amounts don't match")
real_amount = amount - fee_abs
@@ -535,7 +536,7 @@ class FreqtradeBot:
# Try update amount (binance-fix)
try:
new_amount = self.get_real_amount(trade, order)
if order['amount'] != new_amount:
if not isclose(order['amount'], new_amount, abs_tol=constants.MATH_CLOSE_PREC):
order['amount'] = new_amount
# Fee was applied, so set to 0
trade.fee_open = 0