X-Git-Url: https://git.immae.eu/?p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FCryptoportfolio%2FTrader.git;a=blobdiff_plain;f=portfolio.py;h=535aaa843c22789dacc50d9eaf3a2371e6766297;hp=9e98c43ab3e3b656eed3db87208d5a626370a228;hb=7ba831c52bc08032a37b576e3fa1098fed0b7635;hpb=5542e9e31a0074f4ed3b91cadce643ad60083cde diff --git a/portfolio.py b/portfolio.py index 9e98c43..535aaa8 100644 --- a/portfolio.py +++ b/portfolio.py @@ -269,20 +269,24 @@ class Trade: filled_amount += order.filled_amount(in_base_currency=in_base_currency) return filled_amount - def update_order(self, order, tick): - actions = { - 0: ["waiting", None], - 1: ["waiting", None], - 2: ["adjusting", lambda x, y: (x[y] + x["average"]) / 2], - 3: ["waiting", None], - 4: ["waiting", None], - 5: ["adjusting", lambda x, y: (x[y]*2 + x["average"]) / 3], - 6: ["waiting", None], - 7: ["market_fallback", "default"], - } + tick_actions = { + 0: ["waiting", None], + 1: ["waiting", None], + 2: ["adjusting", lambda x, y: (x[y] + x["average"]) / 2], + 3: ["waiting", None], + 4: ["waiting", None], + 5: ["adjusting", lambda x, y: (x[y]*2 + x["average"]) / 3], + 6: ["waiting", None], + 7: ["market_fallback", "default"], + } - if tick in actions: - update, compute_value = actions[tick] + def tick_actions_recreate(self, tick, default="average"): + return ([default] + \ + [ y[1] for x, y in self.tick_actions.items() if x <= tick and y[1] is not None ])[-1] + + def update_order(self, order, tick): + if tick in self.tick_actions: + update, compute_value = self.tick_actions[tick] elif tick % 3 == 1: update = "market_adjust" compute_value = "default" @@ -381,14 +385,6 @@ class Trade: self.orders.append(order) return order - def reopen_same_order(self, order): - new_order = Order(order.action, order.amount, order.rate, - order.base_currency, order.trade_type, self.market, - self, close_if_possible=order.close_if_possible) - self.orders.append(new_order) - new_order.run() - return new_order - def as_json(self): return { "action": self.action, @@ -550,14 +546,11 @@ class Order: self.fetch() return self.status - def fix_disappeared_order(self): + def mark_disappeared_order(self): if self.status.startswith("closed") and \ - len(self.mouvements) == 1 and \ - self.mouvements[0].total_in_base == 0: + len(self.mouvements) > 0 and \ + self.mouvements[-1].total_in_base == 0: self.status = "error_disappeared" - new_order = self.trade.reopen_same_order(self) - self.market.report.log_error("fetch", - message="Order {} disappeared, recreating it as {}".format(self, new_order)) def mark_finished_order(self): if self.status.startswith("closed") and self.market.debug: @@ -582,7 +575,7 @@ class Order: self.fetch_mouvements() - self.fix_disappeared_order() + self.mark_disappeared_order() self.mark_finished_order() # FIXME: consider open order with dust remaining as closed @@ -614,6 +607,7 @@ class Order: for mouvement_hash in mouvements: self.mouvements.append(Mouvement(self.amount.currency, self.base_currency, mouvement_hash)) + self.mouvements.sort(key= lambda x: x.date) def cancel(self): if self.market.debug: