+ def mark_finished_order(self):
+ if self.debug:
+ return
+ if self.status == "closed":
+ if self.trade_type == "short" and self.action == "buy" and self.close_if_possible:
+ self.market.close_margin_position(self.amount.currency, self.base_currency)
+
+ fetch_cache_timestamp = None
+ def fetch(self, force=False):
+ if self.debug or (not force and self.fetch_cache_timestamp is not None
+ and time.time() - self.fetch_cache_timestamp < 10):
+ return
+ self.fetch_cache_timestamp = time.time()
+
+ self.results.append(self.market.fetch_order(self.id))
+ result = self.results[-1]
+ self.status = result["status"]
+ # Time at which the order started
+ self.timestamp = result["datetime"]
+ self.fetch_mouvements()
+
+ # FIXME: consider open order with dust remaining as closed
+
+ @property
+ def dust_amount_remaining(self):
+ return self.remaining_amount < 0.001
+
+ @property
+ def remaining_amount(self):
+ if self.status == "open":
+ self.fetch()
+ return self.amount - self.filled_amount
+
+ @property
+ def filled_amount(self):
+ if self.status == "open":
+ self.fetch()
+ filled_amount = Amount(self.amount.currency, 0)
+ for mouvement in self.mouvements:
+ filled_amount += mouvement.total
+ return filled_amount
+
+ def fetch_mouvements(self):
+ mouvements = self.market.privatePostReturnOrderTrades({"orderNumber": self.id})
+ self.mouvements = []
+
+ for mouvement_hash in mouvements:
+ self.mouvements.append(Mouvement(self.amount.currency,
+ self.base_currency, mouvement_hash))
+
+ def cancel(self):
+ if self.debug:
+ self.status = "canceled"
+ return
+ self.market.cancel_order(self.result['id'])
+ self.fetch()
+
+class Mouvement:
+ def __init__(self, currency, base_currency, hash_):
+ self.currency = currency
+ self.base_currency = base_currency
+ self.id = hash_["id"]
+ self.action = hash_["type"]
+ self.fee_rate = D(hash_["fee"])
+ self.date = datetime.strptime(hash_["date"], '%Y-%m-%d %H:%M:%S')
+ self.rate = D(hash_["rate"])
+ self.total = Amount(currency, hash_["amount"])
+ # rate * total = total_in_base
+ self.total_in_base = Amount(base_currency, hash_["total"])