mirror of
https://github.com/freqtrade/freqtrade.git
synced 2026-02-17 11:40:32 +00:00
Merge pull request #9522 from freqtrade/bt/improve_futures_speed
Improve funding fee calculation
This commit is contained in:
@@ -549,6 +549,7 @@ def test_backtest__enter_trade_futures(default_conf_usdt, fee, mocker) -> None:
|
||||
default_conf_usdt['exchange']['pair_whitelist'] = ['.*']
|
||||
backtesting = Backtesting(default_conf_usdt)
|
||||
backtesting._set_strategy(backtesting.strategylist[0])
|
||||
mocker.patch('freqtrade.optimize.backtesting.Backtesting._run_funding_fees')
|
||||
pair = 'ETH/USDT:USDT'
|
||||
row = [
|
||||
pd.Timestamp(year=2020, month=1, day=1, hour=5, minute=0),
|
||||
@@ -852,8 +853,8 @@ def test_backtest_one_detail(default_conf_usdt, fee, mocker, testdatadir, use_de
|
||||
|
||||
|
||||
@pytest.mark.parametrize('use_detail,exp_funding_fee, exp_ff_updates', [
|
||||
(True, -0.018054162, 44),
|
||||
(False, -0.01780296, 8),
|
||||
(True, -0.018054162, 11),
|
||||
(False, -0.01780296, 5),
|
||||
])
|
||||
def test_backtest_one_detail_futures(
|
||||
default_conf_usdt, fee, mocker, testdatadir, use_detail, exp_funding_fee,
|
||||
@@ -947,12 +948,13 @@ def test_backtest_one_detail_futures(
|
||||
# assert late_entry > 0
|
||||
|
||||
|
||||
@pytest.mark.parametrize('use_detail,entries,max_stake,expected_ff', [
|
||||
(True, 50, 3000, -1.18038144),
|
||||
(False, 6, 360, -0.14679994)])
|
||||
@pytest.mark.parametrize('use_detail,entries,max_stake,ff_updates,expected_ff', [
|
||||
(True, 50, 3000, 54, -1.18038144),
|
||||
(False, 6, 360, 10, -0.14679994),
|
||||
])
|
||||
def test_backtest_one_detail_futures_funding_fees(
|
||||
default_conf_usdt, fee, mocker, testdatadir, use_detail, entries, max_stake,
|
||||
expected_ff,
|
||||
ff_updates, expected_ff,
|
||||
) -> None:
|
||||
"""
|
||||
Funding fees are expected to differ, as the maximum position size differs.
|
||||
@@ -1015,8 +1017,10 @@ def test_backtest_one_detail_futures_funding_fees(
|
||||
assert len(results) == 1
|
||||
|
||||
assert 'orders' in results.columns
|
||||
# funding_fees have been calculated for each candle
|
||||
assert ff_spy.call_count == (324 if use_detail else 27)
|
||||
# funding_fees have been calculated for each funding-fee candle
|
||||
# the trade is open for 26 hours - hence we expect the 8h fee to apply 4 times.
|
||||
# Additional counts will happen due each successful entry, which needs to call this, too.
|
||||
assert ff_spy.call_count == ff_updates
|
||||
|
||||
for t in Trade.trades:
|
||||
# At least 6 adjustment orders
|
||||
|
||||
@@ -104,6 +104,7 @@ def test_backtest_position_adjustment_detailed(default_conf, fee, mocker, levera
|
||||
mocker.patch(f"{EXMS}.get_max_pair_stake_amount", return_value=float('inf'))
|
||||
mocker.patch(f"{EXMS}.get_max_leverage", return_value=10)
|
||||
mocker.patch(f"{EXMS}.get_maintenance_ratio_and_amt", return_value=(0.1, 0.1))
|
||||
mocker.patch('freqtrade.optimize.backtesting.Backtesting._run_funding_fees')
|
||||
|
||||
patch_exchange(mocker)
|
||||
default_conf.update({
|
||||
|
||||
Reference in New Issue
Block a user