diff options
author | Ismaël Bouya <ismael.bouya@normalesup.org> | 2018-04-02 19:18:49 +0200 |
---|---|---|
committer | Ismaël Bouya <ismael.bouya@normalesup.org> | 2018-04-02 19:18:49 +0200 |
commit | 5542e9e31a0074f4ed3b91cadce643ad60083cde (patch) | |
tree | b8216162ee14e27695e4b46cfb26825ccfdb7e25 /portfolio.py | |
parent | b03f2a307dfdaafc1597035ef669b14da0d55f77 (diff) | |
download | Trader-5542e9e31a0074f4ed3b91cadce643ad60083cde.tar.gz Trader-5542e9e31a0074f4ed3b91cadce643ad60083cde.tar.zst Trader-5542e9e31a0074f4ed3b91cadce643ad60083cde.zip |
Fix vanishing orders
Fixes https://git.immae.eu/mantisbt/view.php?id=60
Diffstat (limited to 'portfolio.py')
-rw-r--r-- | portfolio.py | 19 |
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 | ||