Update backtesting to not use open_order_id

This commit is contained in:
Matthias
2023-08-25 07:08:24 +02:00
parent b82b77d03f
commit 95daff182d
2 changed files with 4 additions and 11 deletions
+4 -10
View File
@@ -588,7 +588,6 @@ class Backtesting:
""" """
if order and self._get_order_filled(order.ft_price, row): if order and self._get_order_filled(order.ft_price, row):
order.close_bt_order(current_date, trade) order.close_bt_order(current_date, trade)
trade.open_order_id = None
return True return True
return False return False
@@ -854,7 +853,6 @@ class Backtesting:
self.trade_id_counter += 1 self.trade_id_counter += 1
trade = LocalTrade( trade = LocalTrade(
id=self.trade_id_counter, id=self.trade_id_counter,
open_order_id=self.order_id_counter,
pair=pair, pair=pair,
base_currency=base_currency, base_currency=base_currency,
stake_currency=self.config['stake_currency'], stake_currency=self.config['stake_currency'],
@@ -916,8 +914,7 @@ class Backtesting:
) )
order._trade_bt = trade order._trade_bt = trade
trade.orders.append(order) trade.orders.append(order)
if not self._try_close_open_order(order, trade, current_time, row): self._try_close_open_order(order, trade, current_time, row)
trade.open_order_id = str(self.order_id_counter)
trade.recalc_trade_from_orders() trade.recalc_trade_from_orders()
return trade return trade
@@ -929,7 +926,7 @@ class Backtesting:
""" """
for pair in open_trades.keys(): for pair in open_trades.keys():
for trade in list(open_trades[pair]): for trade in list(open_trades[pair]):
if trade.open_order_id and trade.nr_of_successful_entries == 0: if trade.has_open_orders and trade.nr_of_successful_entries == 0:
# Ignore trade if entry-order did not fill yet # Ignore trade if entry-order did not fill yet
continue continue
exit_row = data[pair][-1] exit_row = data[pair][-1]
@@ -1006,13 +1003,11 @@ class Backtesting:
else: else:
# Close additional entry order # Close additional entry order
del trade.orders[trade.orders.index(order)] del trade.orders[trade.orders.index(order)]
trade.open_order_id = None
return False return False
if order.side == trade.exit_side: if order.side == trade.exit_side:
self.timedout_exit_orders += 1 self.timedout_exit_orders += 1
# Close exit order and retry exiting on next signal. # Close exit order and retry exiting on next signal.
del trade.orders[trade.orders.index(order)] del trade.orders[trade.orders.index(order)]
trade.open_order_id = None
return False return False
return None return None
@@ -1040,7 +1035,6 @@ class Backtesting:
return False return False
else: else:
del trade.orders[trade.orders.index(order)] del trade.orders[trade.orders.index(order)]
trade.open_order_id = None
self.canceled_entry_orders += 1 self.canceled_entry_orders += 1
# place new order if result was not None # place new order if result was not None
@@ -1051,7 +1045,7 @@ class Backtesting:
order.safe_remaining * order.ft_price / trade.leverage), order.safe_remaining * order.ft_price / trade.leverage),
direction='short' if trade.is_short else 'long') direction='short' if trade.is_short else 'long')
# Delete trade if no successful entries happened (if placing the new order failed) # Delete trade if no successful entries happened (if placing the new order failed)
if trade.open_order_id is None and trade.nr_of_successful_entries == 0: if not trade.has_open_orders and trade.nr_of_successful_entries == 0:
return True return True
self.replaced_entry_orders += 1 self.replaced_entry_orders += 1
else: else:
@@ -1136,7 +1130,7 @@ class Backtesting:
self.wallets.update() self.wallets.update()
# 4. Create exit orders (if any) # 4. Create exit orders (if any)
if not trade.open_order_id: if not trade.has_open_orders:
self._check_trade_exit(trade, row) # Place exit order if necessary self._check_trade_exit(trade, row) # Place exit order if necessary
# 5. Process exit orders. # 5. Process exit orders.
-1
View File
@@ -765,7 +765,6 @@ class LocalTrade:
self.close_date = self.close_date or datetime.utcnow() self.close_date = self.close_date or datetime.utcnow()
self.is_open = False self.is_open = False
self.exit_order_status = 'closed' self.exit_order_status = 'closed'
self.open_order_id = None
self.recalc_trade_from_orders(is_closing=True) self.recalc_trade_from_orders(is_closing=True)
if show_msg: if show_msg:
logger.info(f"Marking {self} as closed as the trade is fulfilled " logger.info(f"Marking {self} as closed as the trade is fulfilled "