X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=portfolio.py;h=0f2c011fb4063e2a5f50fb4afb878d2f7573d40e;hb=a18ce2f16973155c81f983643aba675f62dea7af;hp=f27e84f0953200bf64606734f827ec30a2a25de6;hpb=17598517c544a3dda8b9f773dfeb669c886ea92b;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FCryptoportfolio%2FTrader.git diff --git a/portfolio.py b/portfolio.py index f27e84f..0f2c011 100644 --- a/portfolio.py +++ b/portfolio.py @@ -3,7 +3,7 @@ from datetime import datetime, timedelta from decimal import Decimal as D, ROUND_DOWN from json import JSONDecodeError from simplejson.errors import JSONDecodeError as SimpleJSONDecodeError -from ccxt import ExchangeError, InsufficientFunds, ExchangeNotAvailable, InvalidOrder, OrderNotCached +from ccxt import ExchangeError, InsufficientFunds, ExchangeNotAvailable, InvalidOrder, OrderNotCached, OrderNotFound from retry import retry import requests @@ -333,6 +333,8 @@ class Trade: return not (self.is_fullfiled or self.closed) def close(self): + for order in self.orders: + order.cancel() self.closed = True @property @@ -467,11 +469,19 @@ class Trade: } def __repr__(self): - return "Trade({} -> {} in {}, {})".format( + if self.closed and not self.is_fullfiled: + closed = " ❌" + elif self.is_fullfiled: + closed = " ✔" + else: + closed = "" + + return "Trade({} -> {} in {}, {}{})".format( self.value_from, self.value_to, self.currency, - self.action) + self.action, + closed) def print_with_order(self, ind=""): self.market.report.print_log("{}{}".format(ind, self)) @@ -600,7 +610,7 @@ class Order: self.market.report.log_debug_action("Fetching {}".format(self)) return try: - result = self.market.ccxt.fetch_order(self.id, symbol=self.amount.currency) + result = self.market.ccxt.fetch_order(self.id) self.results.append(result) self.status = result["status"] # Time at which the order started @@ -645,8 +655,12 @@ class Order: self.market.report.log_debug_action("Mark {} as cancelled".format(self)) self.status = "canceled" return - self.market.ccxt.cancel_order(self.id) - self.fetch() + if self.open and self.id is not None: + try: + self.market.ccxt.cancel_order(self.id) + except OrderNotFound as e: # Closed inbetween + self.market.report.log_error("cancel_order", message="Already cancelled order", exception=e) + self.fetch() class Mouvement: def __init__(self, currency, base_currency, hash_):