move open_rate updating to close_bt_order

This commit is contained in:
Matthias 2022-05-05 19:50:16 +02:00
parent 29f1edbde7
commit 2d9be6dace
3 changed files with 27 additions and 11 deletions

View File

@ -816,9 +816,7 @@ class Backtesting:
# Update trade open_rate on first filled order # Update trade open_rate on first filled order
# this is for cases where adjust_entry_order might have replaced the # this is for cases where adjust_entry_order might have replaced the
# initial order from trade opening # initial order from trade opening
if len(trade.select_filled_orders(trade.entry_side)) == 1: order.close_bt_order(current_time, trade)
trade.open_rate = order.price
order.close_bt_order(current_time)
else: else:
trade.open_order_id = str(self.order_id_counter) trade.open_order_id = str(self.order_id_counter)
trade.orders.append(order) trade.orders.append(order)
@ -1052,7 +1050,7 @@ class Backtesting:
# 3. Process entry orders. # 3. Process entry orders.
order = trade.select_order(trade.entry_side, is_open=True) order = trade.select_order(trade.entry_side, is_open=True)
if order and self._get_order_filled(order.price, row): if order and self._get_order_filled(order.price, row):
order.close_bt_order(current_time) order.close_bt_order(current_time, trade)
trade.open_order_id = None trade.open_order_id = None
LocalTrade.add_bt_trade(trade) LocalTrade.add_bt_trade(trade)
self.wallets.update() self.wallets.update()

View File

@ -219,11 +219,15 @@ class Order(_DECL_BASE):
'remaining': self.remaining, 'remaining': self.remaining,
} }
def close_bt_order(self, close_date: datetime): def close_bt_order(self, close_date: datetime, trade: 'LocalTrade'):
self.order_filled_date = close_date self.order_filled_date = close_date
self.filled = self.amount self.filled = self.amount
self.status = 'closed' self.status = 'closed'
self.ft_is_open = False self.ft_is_open = False
if (self.ft_order_side == trade.entry_side
and len(trade.select_filled_orders(trade.entry_side)) == 1):
trade.open_rate = self.price
trade.recalc_open_trade_value()
@staticmethod @staticmethod
def update_orders(orders: List['Order'], order: Dict[str, Any]): def update_orders(orders: List['Order'], order: Dict[str, Any]):

View File

@ -760,16 +760,29 @@ tc48 = BTContainer(data=[
[0, 5000, 5050, 4950, 5000, 6172, 1, 0], [0, 5000, 5050, 4950, 5000, 6172, 1, 0],
[1, 5000, 5500, 4951, 5000, 6172, 0, 0], # timeout [1, 5000, 5500, 4951, 5000, 6172, 0, 0], # timeout
[2, 4900, 5250, 4500, 5100, 6172, 0, 0], # Order readjust [2, 4900, 5250, 4500, 5100, 6172, 0, 0], # Order readjust
[3, 5100, 5100, 4650, 4750, 6172, 0, 0], [3, 5100, 5100, 4650, 4750, 6172, 0, 1],
[4, 4750, 4950, 4350, 4750, 6172, 0, 0]], [4, 4750, 4950, 4350, 4750, 6172, 0, 0]],
stop_loss=-0.01, roi={"0": 0.10}, profit_perc=0.1, stop_loss=-0.01, roi={"0": 0.10}, profit_perc=-0.087,
timeout=1000, use_exit_signal=True, timeout=1000,
custom_entry_price=4200, custom_entry_price=4200, adjust_entry_price=5200,
adjust_entry_price=5200, trades=[BTrade(exit_reason=ExitType.EXIT_SIGNAL, open_tick=1, close_tick=4, is_short=False)]
trades=[BTrade(exit_reason=ExitType.ROI, open_tick=1, close_tick=2, is_short=False)]
) )
# Test 49: Custom-entry-price short above all candles - readjust order
tc49 = BTContainer(data=[
# D O H L C V EL XL ES Xs BT
[0, 5000, 5050, 4950, 5000, 6172, 0, 0, 1, 0],
[1, 5000, 5200, 4951, 5000, 6172, 0, 0, 0, 0], # timeout
[2, 4900, 5250, 4900, 5100, 6172, 0, 0, 0, 0], # Order readjust
[3, 5100, 5100, 4650, 4750, 6172, 0, 0, 0, 1],
[4, 4750, 4950, 4350, 4750, 6172, 0, 0, 0, 0]],
stop_loss=-0.01, roi={"0": 0.10}, profit_perc=0.05,
use_exit_signal=True, timeout=1000,
custom_entry_price=5300, adjust_entry_price=5000,
trades=[BTrade(exit_reason=ExitType.EXIT_SIGNAL, open_tick=1, close_tick=4, is_short=True)]
)
TESTS = [ TESTS = [
tc0, tc0,
tc1, tc1,
@ -820,6 +833,7 @@ TESTS = [
tc46, tc46,
tc47, tc47,
tc48, tc48,
tc49,
] ]