]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git/blobdiff - portfolio.py
Check before processing that credentials are valid
[perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git] / portfolio.py
index c313fd9067cae8e5624620b7a237001ce48082a4..9b27e261d0bfa93ab511e2c692cfc10f3ecd61f8 100644 (file)
@@ -261,12 +261,12 @@ class Trade:
 
     @property
     def is_fullfiled(self):
-        return abs(self.filled_amount(in_base_currency=(not self.inverted))) >= abs(self.delta)
+        return abs(self.filled_amount(in_base_currency=(not self.inverted), refetch=True)) >= abs(self.delta)
 
-    def filled_amount(self, in_base_currency=False):
+    def filled_amount(self, in_base_currency=False, refetch=False):
         filled_amount = 0
         for order in self.orders:
-            filled_amount += order.filled_amount(in_base_currency=in_base_currency)
+            filled_amount += order.filled_amount(in_base_currency=in_base_currency, refetch=refetch)
         return filled_amount
 
     tick_actions = {
@@ -578,18 +578,18 @@ class Order:
         self.fetch_mouvements()
 
         self.mark_disappeared_order()
-
+        self.mark_dust_amount_remaining_order()
         self.mark_finished_order()
-        # FIXME: consider open order with dust remaining as closed
 
-    def dust_amount_remaining(self):
-        return self.remaining_amount() < Amount(self.amount.currency, D("0.001"))
+    def mark_dust_amount_remaining_order(self):
+        if self.market.ccxt.is_dust_trade(self.remaining_amount().value, self.rate):
+            self.status = "closed_dust_remaining"
 
-    def remaining_amount(self):
-        return self.amount - self.filled_amount()
+    def remaining_amount(self, refetch=False):
+        return self.amount - self.filled_amount(refetch=refetch)
 
-    def filled_amount(self, in_base_currency=False):
-        if self.status == "open":
+    def filled_amount(self, in_base_currency=False, refetch=False):
+        if refetch and self.status == "open":
             self.fetch()
         filled_amount = 0
         for mouvement in self.mouvements:
@@ -616,7 +616,7 @@ class Order:
             self.market.report.log_debug_action("Mark {} as cancelled".format(self))
             self.status = "canceled"
             return
-        if self.open and self.id is not None:
+        if (self.status == "closed_dust_remaining" or self.open) and self.id is not None:
             try:
                 self.market.ccxt.cancel_order(self.id)
             except OrderNotFound as e: # Closed inbetween