-def make_orders(market, base_currency="BTC"):
- Balance.prepare_trades(market, base_currency=base_currency)
- for currency, trade in Trade.trades.items():
- print(trade)
- for order in trade.orders:
- print("\t", order, sep="")
- order.run(market)
+ 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 TradeStore.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"])