From 0af9e913d4a3bd0c66b387e9d79fdd949d9da1d2 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 13 Aug 2020 15:39:29 +0200 Subject: [PATCH] Timestamps are in ms --- freqtrade/exchange/exchange.py | 2 +- freqtrade/freqtradebot.py | 5 ++++- freqtrade/persistence/models.py | 12 ++++++++---- tests/exchange/test_exchange.py | 2 +- tests/test_freqtradebot.py | 1 + 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 533377746..bcb511010 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -486,7 +486,7 @@ class Exchange: 'side': side, 'remaining': _amount, 'datetime': arrow.utcnow().isoformat(), - 'timestamp': arrow.utcnow().timestamp, + 'timestamp': int(arrow.utcnow().timestamp * 1000), 'status': "closed" if ordertype == "market" else "open", 'fee': None, 'info': {} diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index e2d504916..18d39e471 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -817,6 +817,9 @@ class FreqtradeBot: except InvalidOrderException as exception: logger.warning('Unable to fetch stoploss order: %s', exception) + if stoploss_order: + trade.update_order(stoploss_order) + # We check if stoploss order is fulfilled if stoploss_order and stoploss_order['status'] in ('closed', 'triggered'): trade.sell_reason = SellType.STOPLOSS_ON_EXCHANGE.value @@ -1260,7 +1263,7 @@ class FreqtradeBot: except InvalidOrderException as exception: logger.warning('Unable to fetch order %s: %s', order_id, exception) return False - Order.update_order(order) + trade.update_order(order) # Try update amount (binance-fix) try: new_amount = self.get_real_amount(trade, order, order_amount) diff --git a/freqtrade/persistence/models.py b/freqtrade/persistence/models.py index b0bde02fe..5f85cdb4c 100644 --- a/freqtrade/persistence/models.py +++ b/freqtrade/persistence/models.py @@ -107,7 +107,7 @@ class Order(_DECL_BASE): ft_order_side = Column(String, nullable=False) - order_id = Column(String, nullable=False, unique=True, index=True) + order_id = Column(String, nullable=False, index=True) status = Column(String, nullable=True) symbol = Column(String, nullable=True) order_type = Column(String, nullable=True) @@ -144,13 +144,14 @@ class Order(_DECL_BASE): self.remaining = order.get('remaining', self.remaining) self.cost = order.get('cost', self.cost) if 'timestamp' in order and order['timestamp'] is not None: - self.order_date = datetime.fromtimestamp(order['timestamp']) + self.order_date = datetime.fromtimestamp(order['timestamp'] / 1000) @staticmethod - def update_order(order: Dict[str, Any]): + def update_orders(orders: List['Order'], order: Dict[str, Any]): """ """ - oobj = Order.query.filter(Order.order_id == order['id']).first() + filtered_orders = [o for o in orders if o.order_id == order['id']] + oobj = filtered_orders[0] if filtered_orders else None oobj.update_from_ccxt_object(order) oobj.order_update_date = datetime.now() @@ -417,6 +418,9 @@ class Trade(_DECL_BASE): else: return False + def update_order(self, order: Dict) -> None: + Order.update_orders(self.orders, order) + def _calc_open_trade_price(self) -> float: """ Calculate the open_rate including open_fee. diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 350c2d3cb..d0e303f5f 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -807,7 +807,7 @@ def test_dry_run_order(default_conf, mocker, side, exchange_name): assert f'dry_run_{side}_' in order["id"] assert order["side"] == side assert order["type"] == "limit" - assert order["pair"] == "ETH/BTC" + assert order["symbol"] == "ETH/BTC" @pytest.mark.parametrize("side", [ diff --git a/tests/test_freqtradebot.py b/tests/test_freqtradebot.py index 1621be6e5..7257c73b9 100644 --- a/tests/test_freqtradebot.py +++ b/tests/test_freqtradebot.py @@ -1194,6 +1194,7 @@ def test_handle_stoploss_on_exchange(mocker, default_conf, fee, caplog, assert trade stoploss_order_hit = MagicMock(return_value={ + 'id': 100, 'status': 'closed', 'type': 'stop_loss_limit', 'price': 3,