X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=portfolio.py;h=17a17ba51e3c1672d4d174c1ba2f7872439bca4a;hb=df9e4e7f30a3505675bf61f7da19af4453647772;hp=e98689ee4c2599fc63f77b6236057e9df0b2519e;hpb=5a72ded790f8b5e7c9b38a3cc91c12fbfb6cb97a;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FCryptoportfolio%2FTrader.git diff --git a/portfolio.py b/portfolio.py index e98689e..17a17ba 100644 --- a/portfolio.py +++ b/portfolio.py @@ -3,6 +3,7 @@ from datetime import datetime from decimal import Decimal as D, ROUND_DOWN # Put your poloniex api key in market.py from json import JSONDecodeError +from ccxt import ExchangeError, ExchangeNotAvailable import requests import helper as h from store import * @@ -463,6 +464,11 @@ class Order: else: try: self.results.append(self.market.create_order(symbol, 'limit', self.action, amount, price=self.rate, account=self.account)) + except ExchangeNotAvailable: + # Impossible to honor the order (dust amount) + self.status = "closed" + self.mark_finished_order() + return except Exception as e: self.status = "error" print("error when running market.create_order('{}', 'limit', '{}', {}, price={}, account={})".format( @@ -526,7 +532,10 @@ class Order: return filled_amount def fetch_mouvements(self): - mouvements = self.market.privatePostReturnOrderTrades({"orderNumber": self.id}) + try: + mouvements = self.market.privatePostReturnOrderTrades({"orderNumber": self.id}) + except ExchangeError: + mouvements = [] self.mouvements = [] for mouvement_hash in mouvements: @@ -544,14 +553,17 @@ 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"]) + self.id = hash_.get("tradeID") + self.action = hash_.get("type") + self.fee_rate = D(hash_.get("fee", -1)) + try: + self.date = datetime.strptime(hash_.get("date", ""), '%Y-%m-%d %H:%M:%S') + except ValueError: + self.date = None + self.rate = D(hash_.get("rate", 0)) + self.total = Amount(currency, hash_.get("amount", 0)) # rate * total = total_in_base - self.total_in_base = Amount(base_currency, hash_["total"]) + self.total_in_base = Amount(base_currency, hash_.get("total", 0)) if __name__ == '__main__': # pragma: no cover from market import market