aboutsummaryrefslogtreecommitdiff
path: root/portfolio.py
diff options
context:
space:
mode:
Diffstat (limited to 'portfolio.py')
-rw-r--r--portfolio.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/portfolio.py b/portfolio.py
index 9dae23e..9e98c43 100644
--- a/portfolio.py
+++ b/portfolio.py
@@ -381,6 +381,14 @@ class Trade:
381 self.orders.append(order) 381 self.orders.append(order)
382 return order 382 return order
383 383
384 def reopen_same_order(self, order):
385 new_order = Order(order.action, order.amount, order.rate,
386 order.base_currency, order.trade_type, self.market,
387 self, close_if_possible=order.close_if_possible)
388 self.orders.append(new_order)
389 new_order.run()
390 return new_order
391
384 def as_json(self): 392 def as_json(self):
385 return { 393 return {
386 "action": self.action, 394 "action": self.action,
@@ -542,6 +550,15 @@ class Order:
542 self.fetch() 550 self.fetch()
543 return self.status 551 return self.status
544 552
553 def fix_disappeared_order(self):
554 if self.status.startswith("closed") and \
555 len(self.mouvements) == 1 and \
556 self.mouvements[0].total_in_base == 0:
557 self.status = "error_disappeared"
558 new_order = self.trade.reopen_same_order(self)
559 self.market.report.log_error("fetch",
560 message="Order {} disappeared, recreating it as {}".format(self, new_order))
561
545 def mark_finished_order(self): 562 def mark_finished_order(self):
546 if self.status.startswith("closed") and self.market.debug: 563 if self.status.startswith("closed") and self.market.debug:
547 self.market.report.log_debug_action("Mark {} as finished".format(self)) 564 self.market.report.log_debug_action("Mark {} as finished".format(self))
@@ -565,6 +582,8 @@ class Order:
565 582
566 self.fetch_mouvements() 583 self.fetch_mouvements()
567 584
585 self.fix_disappeared_order()
586
568 self.mark_finished_order() 587 self.mark_finished_order()
569 # FIXME: consider open order with dust remaining as closed 588 # FIXME: consider open order with dust remaining as closed
570 589