From e988995d71a512e2485f3663c9a876c9c21855d7 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 29 Feb 2024 07:22:40 +0100 Subject: [PATCH] Handle NaN funding fees closes #9831 --- freqtrade/exchange/exchange.py | 5 +++-- tests/exchange/test_exchange.py | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 7f7fccca8..d1ac47df4 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -8,7 +8,7 @@ import logging import signal from copy import deepcopy from datetime import datetime, timedelta, timezone -from math import floor +from math import floor, isnan from threading import Lock from typing import Any, Coroutine, Dict, List, Literal, Optional, Tuple, Union @@ -2916,7 +2916,8 @@ class Exchange: if not df.empty: df1 = df[(df['date'] >= open_date) & (df['date'] <= close_date)] fees = sum(df1['open_fund'] * df1['open_mark'] * amount) - + if isnan(fees): + fees = 0.0 # Negate fees for longs as funding_fees expects it this way based on live endpoints. return fees if is_short else -fees diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 5c4879a32..168cf512d 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -7,6 +7,7 @@ from unittest.mock import MagicMock, Mock, PropertyMock, patch import ccxt import pytest +from numpy import NaN from pandas import DataFrame from freqtrade.enums import CandleType, MarginMode, RunMode, TradingMode @@ -4203,6 +4204,7 @@ def test_get_max_leverage_from_margin(default_conf, mocker, pair, nominal_value, (10, 0.0001, 2.0, 1.0, 0.002, 0.002), (10, 0.0002, 2.0, 0.01, 0.004, 0.00004), (10, 0.0002, 2.5, None, 0.005, None), + (10, 0.0002, NaN, None, 0.0, None), ]) def test_calculate_funding_fees( default_conf,