Fix more tests

This commit is contained in:
Matthias
2023-05-14 17:46:56 +02:00
parent 915cb5ffbd
commit 7a2ff60255
6 changed files with 54 additions and 51 deletions
+4 -3
View File
@@ -1,13 +1,14 @@
from datetime import timedelta
from typing import Dict, List, NamedTuple, Optional from typing import Dict, List, NamedTuple, Optional
import arrow
from pandas import DataFrame from pandas import DataFrame
from freqtrade.enums import ExitType from freqtrade.enums import ExitType
from freqtrade.exchange import timeframe_to_minutes from freqtrade.exchange import timeframe_to_minutes
from freqtrade.util.datetime_helpers import dt_utc
tests_start_time = arrow.get(2018, 10, 3) tests_start_time = dt_utc(2018, 10, 3)
tests_timeframe = '1h' tests_timeframe = '1h'
@@ -46,7 +47,7 @@ class BTContainer(NamedTuple):
def _get_frame_time_from_offset(offset): def _get_frame_time_from_offset(offset):
minutes = offset * timeframe_to_minutes(tests_timeframe) minutes = offset * timeframe_to_minutes(tests_timeframe)
return tests_start_time.shift(minutes=minutes).datetime return tests_start_time + timedelta(minutes=minutes)
def _build_backtest_dataframe(data): def _build_backtest_dataframe(data):
+5 -4
View File
@@ -26,6 +26,7 @@ from freqtrade.optimize.backtest_caching import get_strategy_run_id
from freqtrade.optimize.backtesting import Backtesting from freqtrade.optimize.backtesting import Backtesting
from freqtrade.persistence import LocalTrade, Trade from freqtrade.persistence import LocalTrade, Trade
from freqtrade.resolvers import StrategyResolver from freqtrade.resolvers import StrategyResolver
from freqtrade.util.datetime_helpers import dt_utc
from tests.conftest import (CURRENT_TEST_STRATEGY, EXMS, get_args, log_has, log_has_re, from tests.conftest import (CURRENT_TEST_STRATEGY, EXMS, get_args, log_has, log_has_re,
patch_exchange, patched_configuration_load_config_file) patch_exchange, patched_configuration_load_config_file)
@@ -710,11 +711,11 @@ def test_backtest_one(default_conf, fee, mocker, testdatadir) -> None:
'stake_amount': [0.001, 0.001], 'stake_amount': [0.001, 0.001],
'max_stake_amount': [0.001, 0.001], 'max_stake_amount': [0.001, 0.001],
'amount': [0.00957442, 0.0097064], 'amount': [0.00957442, 0.0097064],
'open_date': pd.to_datetime([Arrow(2018, 1, 29, 18, 40, 0).datetime, 'open_date': pd.to_datetime([dt_utc(2018, 1, 29, 18, 40, 0),
Arrow(2018, 1, 30, 3, 30, 0).datetime], utc=True dt_utc(2018, 1, 30, 3, 30, 0)], utc=True
), ),
'close_date': pd.to_datetime([Arrow(2018, 1, 29, 22, 35, 0).datetime, 'close_date': pd.to_datetime([dt_utc(2018, 1, 29, 22, 35, 0),
Arrow(2018, 1, 30, 4, 10, 0).datetime], utc=True), dt_utc(2018, 1, 30, 4, 10, 0)], utc=True),
'open_rate': [0.104445, 0.10302485], 'open_rate': [0.104445, 0.10302485],
'close_rate': [0.104969, 0.103541], 'close_rate': [0.104969, 0.103541],
'fee_open': [0.0025, 0.0025], 'fee_open': [0.0025, 0.0025],
@@ -5,13 +5,13 @@ from unittest.mock import MagicMock
import pandas as pd import pandas as pd
import pytest import pytest
from arrow import Arrow
from freqtrade.configuration import TimeRange from freqtrade.configuration import TimeRange
from freqtrade.data import history from freqtrade.data import history
from freqtrade.data.history import get_timerange from freqtrade.data.history import get_timerange
from freqtrade.enums import ExitType, TradingMode from freqtrade.enums import ExitType, TradingMode
from freqtrade.optimize.backtesting import Backtesting from freqtrade.optimize.backtesting import Backtesting
from freqtrade.util.datetime_helpers import dt_utc
from tests.conftest import EXMS, patch_exchange from tests.conftest import EXMS, patch_exchange
@@ -52,11 +52,11 @@ def test_backtest_position_adjustment(default_conf, fee, mocker, testdatadir) ->
'stake_amount': [500.0, 100.0], 'stake_amount': [500.0, 100.0],
'max_stake_amount': [500.0, 100], 'max_stake_amount': [500.0, 100],
'amount': [4806.87657523, 970.63960782], 'amount': [4806.87657523, 970.63960782],
'open_date': pd.to_datetime([Arrow(2018, 1, 29, 18, 40, 0).datetime, 'open_date': pd.to_datetime([dt_utc(2018, 1, 29, 18, 40, 0),
Arrow(2018, 1, 30, 3, 30, 0).datetime], utc=True dt_utc(2018, 1, 30, 3, 30, 0)], utc=True
), ),
'close_date': pd.to_datetime([Arrow(2018, 1, 29, 22, 00, 0).datetime, 'close_date': pd.to_datetime([dt_utc(2018, 1, 29, 22, 00, 0),
Arrow(2018, 1, 30, 4, 10, 0).datetime], utc=True), dt_utc(2018, 1, 30, 4, 10, 0)], utc=True),
'open_rate': [0.10401764894444211, 0.10302485], 'open_rate': [0.10401764894444211, 0.10302485],
'close_rate': [0.10453904066847439, 0.103541], 'close_rate': [0.10453904066847439, 0.103541],
'fee_open': [0.0025, 0.0025], 'fee_open': [0.0025, 0.0025],
+17 -16
View File
@@ -20,6 +20,7 @@ from freqtrade.optimize.hyperopt_tools import HyperoptTools
from freqtrade.optimize.optimize_reports import generate_strategy_stats from freqtrade.optimize.optimize_reports import generate_strategy_stats
from freqtrade.optimize.space import SKDecimal from freqtrade.optimize.space import SKDecimal
from freqtrade.strategy import IntParameter from freqtrade.strategy import IntParameter
from freqtrade.util import dt_utc
from tests.conftest import (CURRENT_TEST_STRATEGY, EXMS, get_args, get_markets, log_has, log_has_re, from tests.conftest import (CURRENT_TEST_STRATEGY, EXMS, get_args, get_markets, log_has, log_has_re,
patch_exchange, patched_configuration_load_config_file) patch_exchange, patched_configuration_load_config_file)
@@ -349,14 +350,14 @@ def test_hyperopt_format_results(hyperopt):
"UNITTEST/BTC", "UNITTEST/BTC"], "UNITTEST/BTC", "UNITTEST/BTC"],
"profit_ratio": [0.003312, 0.010801, 0.013803, 0.002780], "profit_ratio": [0.003312, 0.010801, 0.013803, 0.002780],
"profit_abs": [0.000003, 0.000011, 0.000014, 0.000003], "profit_abs": [0.000003, 0.000011, 0.000014, 0.000003],
"open_date": [Arrow(2017, 11, 14, 19, 32, 00).datetime, "open_date": [dt_utc(2017, 11, 14, 19, 32, 00),
Arrow(2017, 11, 14, 21, 36, 00).datetime, dt_utc(2017, 11, 14, 21, 36, 00),
Arrow(2017, 11, 14, 22, 12, 00).datetime, dt_utc(2017, 11, 14, 22, 12, 00),
Arrow(2017, 11, 14, 22, 44, 00).datetime], dt_utc(2017, 11, 14, 22, 44, 00)],
"close_date": [Arrow(2017, 11, 14, 21, 35, 00).datetime, "close_date": [dt_utc(2017, 11, 14, 21, 35, 00),
Arrow(2017, 11, 14, 22, 10, 00).datetime, dt_utc(2017, 11, 14, 22, 10, 00),
Arrow(2017, 11, 14, 22, 43, 00).datetime, dt_utc(2017, 11, 14, 22, 43, 00),
Arrow(2017, 11, 14, 22, 58, 00).datetime], dt_utc(2017, 11, 14, 22, 58, 00)],
"open_rate": [0.002543, 0.003003, 0.003089, 0.003214], "open_rate": [0.002543, 0.003003, 0.003089, 0.003214],
"close_rate": [0.002546, 0.003014, 0.003103, 0.003217], "close_rate": [0.002546, 0.003014, 0.003103, 0.003217],
"trade_duration": [123, 34, 31, 14], "trade_duration": [123, 34, 31, 14],
@@ -423,14 +424,14 @@ def test_generate_optimizer(mocker, hyperopt_conf) -> None:
"UNITTEST/BTC", "UNITTEST/BTC"], "UNITTEST/BTC", "UNITTEST/BTC"],
"profit_ratio": [0.003312, 0.010801, 0.013803, 0.002780], "profit_ratio": [0.003312, 0.010801, 0.013803, 0.002780],
"profit_abs": [0.000003, 0.000011, 0.000014, 0.000003], "profit_abs": [0.000003, 0.000011, 0.000014, 0.000003],
"open_date": [Arrow(2017, 11, 14, 19, 32, 00).datetime, "open_date": [dt_utc(2017, 11, 14, 19, 32, 00),
Arrow(2017, 11, 14, 21, 36, 00).datetime, dt_utc(2017, 11, 14, 21, 36, 00),
Arrow(2017, 11, 14, 22, 12, 00).datetime, dt_utc(2017, 11, 14, 22, 12, 00),
Arrow(2017, 11, 14, 22, 44, 00).datetime], dt_utc(2017, 11, 14, 22, 44, 00)],
"close_date": [Arrow(2017, 11, 14, 21, 35, 00).datetime, "close_date": [dt_utc(2017, 11, 14, 21, 35, 00),
Arrow(2017, 11, 14, 22, 10, 00).datetime, dt_utc(2017, 11, 14, 22, 10, 00),
Arrow(2017, 11, 14, 22, 43, 00).datetime, dt_utc(2017, 11, 14, 22, 43, 00),
Arrow(2017, 11, 14, 22, 58, 00).datetime], dt_utc(2017, 11, 14, 22, 58, 00)],
"open_rate": [0.002543, 0.003003, 0.003089, 0.003214], "open_rate": [0.002543, 0.003003, 0.003089, 0.003214],
"close_rate": [0.002546, 0.003014, 0.003103, 0.003217], "close_rate": [0.002546, 0.003014, 0.003103, 0.003217],
"trade_duration": [123, 34, 31, 14], "trade_duration": [123, 34, 31, 14],
+19 -19
View File
@@ -6,7 +6,6 @@ from shutil import copyfile
import joblib import joblib
import pandas as pd import pandas as pd
import pytest import pytest
from arrow import Arrow
from freqtrade.configuration import TimeRange from freqtrade.configuration import TimeRange
from freqtrade.constants import BACKTEST_BREAKDOWNS, DATETIME_PRINT_FORMAT, LAST_BT_RESULT_FN from freqtrade.constants import BACKTEST_BREAKDOWNS, DATETIME_PRINT_FORMAT, LAST_BT_RESULT_FN
@@ -26,6 +25,7 @@ from freqtrade.optimize.optimize_reports import (_get_resample_from_period, gene
text_table_exit_reason, text_table_strategy) text_table_exit_reason, text_table_strategy)
from freqtrade.resolvers.strategy_resolver import StrategyResolver from freqtrade.resolvers.strategy_resolver import StrategyResolver
from freqtrade.util import dt_ts from freqtrade.util import dt_ts
from freqtrade.util.datetime_helpers import dt_from_ts, dt_utc
from tests.conftest import CURRENT_TEST_STRATEGY from tests.conftest import CURRENT_TEST_STRATEGY
from tests.data.test_history import _clean_test_file from tests.data.test_history import _clean_test_file
@@ -81,14 +81,14 @@ def test_generate_backtest_stats(default_conf, testdatadir, tmpdir):
"UNITTEST/BTC", "UNITTEST/BTC"], "UNITTEST/BTC", "UNITTEST/BTC"],
"profit_ratio": [0.003312, 0.010801, 0.013803, 0.002780], "profit_ratio": [0.003312, 0.010801, 0.013803, 0.002780],
"profit_abs": [0.000003, 0.000011, 0.000014, 0.000003], "profit_abs": [0.000003, 0.000011, 0.000014, 0.000003],
"open_date": [Arrow(2017, 11, 14, 19, 32, 00).datetime, "open_date": [dt_utc(2017, 11, 14, 19, 32, 00),
Arrow(2017, 11, 14, 21, 36, 00).datetime, dt_utc(2017, 11, 14, 21, 36, 00),
Arrow(2017, 11, 14, 22, 12, 00).datetime, dt_utc(2017, 11, 14, 22, 12, 00),
Arrow(2017, 11, 14, 22, 44, 00).datetime], dt_utc(2017, 11, 14, 22, 44, 00)],
"close_date": [Arrow(2017, 11, 14, 21, 35, 00).datetime, "close_date": [dt_utc(2017, 11, 14, 21, 35, 00),
Arrow(2017, 11, 14, 22, 10, 00).datetime, dt_utc(2017, 11, 14, 22, 10, 00),
Arrow(2017, 11, 14, 22, 43, 00).datetime, dt_utc(2017, 11, 14, 22, 43, 00),
Arrow(2017, 11, 14, 22, 58, 00).datetime], dt_utc(2017, 11, 14, 22, 58, 00)],
"open_rate": [0.002543, 0.003003, 0.003089, 0.003214], "open_rate": [0.002543, 0.003003, 0.003089, 0.003214],
"close_rate": [0.002546, 0.003014, 0.003103, 0.003217], "close_rate": [0.002546, 0.003014, 0.003103, 0.003217],
"trade_duration": [123, 34, 31, 14], "trade_duration": [123, 34, 31, 14],
@@ -113,8 +113,8 @@ def test_generate_backtest_stats(default_conf, testdatadir, tmpdir):
} }
} }
timerange = TimeRange.parse_timerange('1510688220-1510700340') timerange = TimeRange.parse_timerange('1510688220-1510700340')
min_date = Arrow.fromtimestamp(1510688220) min_date = dt_from_ts(1510688220)
max_date = Arrow.fromtimestamp(1510700340) max_date = dt_from_ts(1510700340)
btdata = history.load_data(testdatadir, '1m', ['UNITTEST/BTC'], timerange=timerange, btdata = history.load_data(testdatadir, '1m', ['UNITTEST/BTC'], timerange=timerange,
fill_up_missing=True) fill_up_missing=True)
@@ -136,14 +136,14 @@ def test_generate_backtest_stats(default_conf, testdatadir, tmpdir):
{"pair": ["UNITTEST/BTC", "UNITTEST/BTC", "UNITTEST/BTC", "UNITTEST/BTC"], {"pair": ["UNITTEST/BTC", "UNITTEST/BTC", "UNITTEST/BTC", "UNITTEST/BTC"],
"profit_ratio": [0.003312, 0.010801, -0.013803, 0.002780], "profit_ratio": [0.003312, 0.010801, -0.013803, 0.002780],
"profit_abs": [0.000003, 0.000011, -0.000014, 0.000003], "profit_abs": [0.000003, 0.000011, -0.000014, 0.000003],
"open_date": [Arrow(2017, 11, 14, 19, 32, 00).datetime, "open_date": [dt_utc(2017, 11, 14, 19, 32, 00),
Arrow(2017, 11, 14, 21, 36, 00).datetime, dt_utc(2017, 11, 14, 21, 36, 00),
Arrow(2017, 11, 14, 22, 12, 00).datetime, dt_utc(2017, 11, 14, 22, 12, 00),
Arrow(2017, 11, 14, 22, 44, 00).datetime], dt_utc(2017, 11, 14, 22, 44, 00)],
"close_date": [Arrow(2017, 11, 14, 21, 35, 00).datetime, "close_date": [dt_utc(2017, 11, 14, 21, 35, 00),
Arrow(2017, 11, 14, 22, 10, 00).datetime, dt_utc(2017, 11, 14, 22, 10, 00),
Arrow(2017, 11, 14, 22, 43, 00).datetime, dt_utc(2017, 11, 14, 22, 43, 00),
Arrow(2017, 11, 14, 22, 58, 00).datetime], dt_utc(2017, 11, 14, 22, 58, 00)],
"open_rate": [0.002543, 0.003003, 0.003089, 0.003214], "open_rate": [0.002543, 0.003003, 0.003089, 0.003214],
"close_rate": [0.002546, 0.003014, 0.0032903, 0.003217], "close_rate": [0.002546, 0.003014, 0.0032903, 0.003217],
"trade_duration": [123, 34, 31, 14], "trade_duration": [123, 34, 31, 14],
+4 -4
View File
@@ -22,7 +22,7 @@ from freqtrade.freqtradebot import FreqtradeBot
from freqtrade.persistence import Order, PairLocks, Trade from freqtrade.persistence import Order, PairLocks, Trade
from freqtrade.persistence.models import PairLock from freqtrade.persistence.models import PairLock
from freqtrade.plugins.protections.iprotection import ProtectionReturn from freqtrade.plugins.protections.iprotection import ProtectionReturn
from freqtrade.util.datetime_helpers import dt_now from freqtrade.util.datetime_helpers import dt_now, dt_utc
from freqtrade.worker import Worker from freqtrade.worker import Worker
from tests.conftest import (EXMS, create_mock_trades, create_mock_trades_usdt, from tests.conftest import (EXMS, create_mock_trades, create_mock_trades_usdt,
get_patched_freqtradebot, get_patched_worker, log_has, log_has_re, get_patched_freqtradebot, get_patched_worker, log_has, log_has_re,
@@ -5712,9 +5712,9 @@ def test_update_funding_fees(
default_conf['trading_mode'] = 'futures' default_conf['trading_mode'] = 'futures'
default_conf['margin_mode'] = 'isolated' default_conf['margin_mode'] = 'isolated'
date_midnight = arrow.get('2021-09-01 00:00:00').datetime date_midnight = dt_utc(2021, 9, 1)
date_eight = arrow.get('2021-09-01 08:00:00').datetime date_eight = dt_utc(2021, 9, 1, 8)
date_sixteen = arrow.get('2021-09-01 16:00:00').datetime date_sixteen = dt_utc(2021, 9, 1, 16)
columns = ['date', 'open', 'high', 'low', 'close', 'volume'] columns = ['date', 'open', 'high', 'low', 'close', 'volume']
# 16:00 entry is actually never used # 16:00 entry is actually never used
# But should be kept in the test to ensure we're filtering correctly. # But should be kept in the test to ensure we're filtering correctly.