From 8458a380b8d8ffc0eb5cda78d317c9de17d247ed Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 13 Aug 2020 19:37:41 +0200 Subject: [PATCH] Improve order catchup --- freqtrade/freqtradebot.py | 8 ++++++-- freqtrade/persistence/migrations.py | 25 ++++++++++++------------- freqtrade/persistence/models.py | 4 +++- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index db0c852fe..490169790 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -134,6 +134,8 @@ class FreqtradeBot: # Adjust stoploss if it was changed Trade.stoploss_reinitialization(self.strategy.stoploss) + self.update_open_orders() + def process(self) -> None: """ Queries the persistence layer for open trades and handles them, @@ -235,11 +237,13 @@ class FreqtradeBot: logger.info(f"Updating {len(orders)} open orders.") for order in orders: try: - if order.ft_order_side == 'stoposs': + if order.ft_order_side == 'stoploss': fo = self.exchange.fetch_stoploss_order(order.order_id, order.ft_pair) else: fo = self.exchange.fetch_order(order.order_id, order.ft_pair) - order.update_from_ccxt_object(fo) + + self.update_trade_state(order.trade, fo, sl_order=order.ft_order_side == 'stoploss') + except ExchangeError: logger.warning(f"Error updating {order.order_id}") diff --git a/freqtrade/persistence/migrations.py b/freqtrade/persistence/migrations.py index 96b3a0db6..b6fa8f9ae 100644 --- a/freqtrade/persistence/migrations.py +++ b/freqtrade/persistence/migrations.py @@ -108,18 +108,18 @@ def migrate_trades_table(decl_base, inspector, engine, table_back_name: str, col def migrate_open_orders_to_trades(engine): engine.execute(""" - insert into orders (ft_trade_id, ft_pair, order_id, ft_order_side, ft_is_open) - select id ft_trade_id, pair ft_pair, open_order_id, - case when close_rate_requested is null then 'buy' - else 'sell' end ft_order_side, true ft_is_open - from trades - where open_order_id is not null - union all - select id ft_trade_id, pair ft_pair, stoploss_order_id order_id, - 'stoploss' ft_order_side, true ft_is_open - from trades - where stoploss_order_id is not null - """) + insert into orders (ft_trade_id, ft_pair, order_id, ft_order_side, ft_is_open) + select id ft_trade_id, pair ft_pair, open_order_id, + case when close_rate_requested is null then 'buy' + else 'sell' end ft_order_side, true ft_is_open + from trades + where open_order_id is not null + union all + select id ft_trade_id, pair ft_pair, stoploss_order_id order_id, + 'stoploss' ft_order_side, true ft_is_open + from trades + where stoploss_order_id is not null + """) def check_migrate(engine, decl_base, previous_tables) -> None: @@ -144,7 +144,6 @@ def check_migrate(engine, decl_base, previous_tables) -> None: logger.info('Moving open orders to Orders table.') migrate_open_orders_to_trades(engine) else: - logger.info(f'Running database migration for orders - backup: {table_back_name}') pass # Empty for now - as there is only one iteration of the orders table so far. # table_back_name = get_backup_name(tabs, 'orders_bak') diff --git a/freqtrade/persistence/models.py b/freqtrade/persistence/models.py index b6a96b8f3..3f918670a 100644 --- a/freqtrade/persistence/models.py +++ b/freqtrade/persistence/models.py @@ -109,6 +109,8 @@ class Order(_DECL_BASE): id = Column(Integer, primary_key=True) ft_trade_id = Column(Integer, ForeignKey('trades.id'), index=True) + trade = relationship("Trade", back_populates="orders") + ft_order_side = Column(String, nullable=False) ft_pair = Column(String, nullable=False) ft_is_open = Column(Boolean, nullable=False, default=True, index=True) @@ -179,7 +181,7 @@ class Order(_DECL_BASE): return o @staticmethod - def get_open_orders(): + def get_open_orders() -> List['Order']: """ """ return Order.query.filter(Order.ft_is_open.is_(True)).all()