X-Git-Url: https://git.immae.eu/?p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FCryptoportfolio%2FTrader.git;a=blobdiff_plain;f=portfolio.py;h=9e98c43ab3e3b656eed3db87208d5a626370a228;hp=9dae23eeb09a58755376da51e12cfe81dd67cc6d;hb=5542e9e31a0074f4ed3b91cadce643ad60083cde;hpb=b03f2a307dfdaafc1597035ef669b14da0d55f77 diff --git a/portfolio.py b/portfolio.py index 9dae23e..9e98c43 100644 --- a/portfolio.py +++ b/portfolio.py @@ -381,6 +381,14 @@ class Trade: self.orders.append(order) return order + def reopen_same_order(self, order): + new_order = Order(order.action, order.amount, order.rate, + order.base_currency, order.trade_type, self.market, + self, close_if_possible=order.close_if_possible) + self.orders.append(new_order) + new_order.run() + return new_order + def as_json(self): return { "action": self.action, @@ -542,6 +550,15 @@ class Order: self.fetch() return self.status + def fix_disappeared_order(self): + if self.status.startswith("closed") and \ + len(self.mouvements) == 1 and \ + self.mouvements[0].total_in_base == 0: + self.status = "error_disappeared" + new_order = self.trade.reopen_same_order(self) + self.market.report.log_error("fetch", + message="Order {} disappeared, recreating it as {}".format(self, new_order)) + def mark_finished_order(self): if self.status.startswith("closed") and self.market.debug: self.market.report.log_debug_action("Mark {} as finished".format(self)) @@ -565,6 +582,8 @@ class Order: self.fetch_mouvements() + self.fix_disappeared_order() + self.mark_finished_order() # FIXME: consider open order with dust remaining as closed