Skip to content

Commit

Permalink
update tests related to exit while having open order
Browse files Browse the repository at this point in the history
  • Loading branch information
Axel-CH committed Apr 11, 2024
1 parent 8cdd83c commit 9dd125f
Showing 1 changed file with 39 additions and 4 deletions.
43 changes: 39 additions & 4 deletions tests/optimize/test_backtesting_adjust_position.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# pragma pylint: disable=missing-docstring, W0212, line-too-long, C0103, unused-argument

from copy import deepcopy
from unittest.mock import MagicMock
from unittest.mock import MagicMock, PropertyMock

import pandas as pd
import pytest
Expand Down Expand Up @@ -203,6 +203,16 @@ def test_backtest_exit_trade_with_open_entry_order(default_conf, fee, mocker,) -
default_conf['use_exit_signal'] = False
default_conf['max_open_trades'] = 10
default_conf['stake_amount'] = 8

default_conf['unfilledtimeout']= {
"entry": 90000,
"exit": 100000,
"exit_timeout_count": 0,
"unit": "minutes"
}
# time out entry order to unlimited


mocker.patch(f'{EXMS}.get_fee', fee)

backtesting = Backtesting(default_conf)
Expand Down Expand Up @@ -230,10 +240,24 @@ def test_backtest_exit_trade_with_open_entry_order(default_conf, fee, mocker,) -

# position adjust creating exit order
def custom_entry_price(proposed_rate, **kwargs):
return proposed_rate * 0.95
return proposed_rate * 0.54

backtesting.strategy.custom_entry_price = custom_entry_price
backtesting.strategy.adjust_trade_position = MagicMock(return_value=5)
#backtesting.strategy.custom_entry_price = custom_entry_price
#backtesting.strategy.adjust_trade_position = MagicMock(return_value=(5, 'PartIncrease'))

current_time = row[0].to_pydatetime()

trade = backtesting._get_adjust_trade_entry_for_candle(trade, row, current_time)

assert trade
#assert pytest.approx(trade.stake_amount) == 200.0

print("BEFORE EXIT")
print(f'len trade.orders : {len(trade.orders)}')
print(f'trade.orders : {trade.orders}')
print(f"trade: {trade}")

#assert len(trade.orders) == 2

# wait for stoploss trigger event
row_sl_tgrd = [
Expand All @@ -251,13 +275,21 @@ def custom_entry_price(proposed_rate, **kwargs):
]
res = backtesting._check_trade_exit(trade, row_sl_tgrd, row_sl_tgrd[0].to_pydatetime())

print("AFTER EXIT")
print(f'trade.orders : {trade.orders}')
print(f"trade: {trade}")

# TODO count and validate that there is a open entry order
print(res)
print(f'exit reason : {res.exit_reason}')

sl_order = trade.orders[1]

# TODO This should FAIL curently as exits is not triggered if trade.has_open_orders
assert res
assert res.exit_reason == ExitType.STOP_LOSS.value
assert sl_order.status == 'closed' # TODO why the stoploss order is not filled ?
assert sl_order.filled > 0

def test_backtest_liquidation_with_open_exit_order(default_conf_usdt, fee, mocker,) -> None:
default_conf_usdt['use_exit_signal'] = False
Expand All @@ -277,6 +309,9 @@ def test_backtest_liquidation_with_open_exit_order(default_conf_usdt, fee, mocke
default_conf_usdt['exchange']['pair_whitelist'] = ['XRP/USDT:USDT']
default_conf_usdt['exchange']['pair_blacklist'] = []

mocker.patch('freqtrade.plugins.pairlistmanager.PairListManager.whitelist',
PropertyMock(return_value=['XRP/USDT:USDT']))

print(f'default_conf_usdt : {default_conf_usdt}')
mocker.patch(f'{EXMS}.get_fee', fee)

Expand Down

0 comments on commit 9dd125f

Please sign in to comment.