aboutsummaryrefslogtreecommitdiff
path: root/portfolio.py
diff options
context:
space:
mode:
authorIsmaël Bouya <ismael.bouya@normalesup.org>2018-03-12 02:10:08 +0100
committerIsmaël Bouya <ismael.bouya@normalesup.org>2018-03-12 02:10:08 +0100
commit83c698c925db9dcb2d347c2a625de88d85cfeb21 (patch)
tree3d1d321c068c16551502469fbc31566620b16c6c /portfolio.py
parent34eb08f759a440af0376727664d9422041dfbd18 (diff)
parentd8deb0e9a6b7b2805e61dc19a287d5474c271cc5 (diff)
downloadTrader-83c698c925db9dcb2d347c2a625de88d85cfeb21.tar.gz
Trader-83c698c925db9dcb2d347c2a625de88d85cfeb21.tar.zst
Trader-83c698c925db9dcb2d347c2a625de88d85cfeb21.zip
Merge branch 'night_fixes' into dev
Diffstat (limited to 'portfolio.py')
-rw-r--r--portfolio.py26
1 files changed, 13 insertions, 13 deletions
diff --git a/portfolio.py b/portfolio.py
index 554b34f..69e3755 100644
--- a/portfolio.py
+++ b/portfolio.py
@@ -214,6 +214,7 @@ class Trade:
214 self.orders = [] 214 self.orders = []
215 self.market = market 215 self.market = market
216 self.closed = False 216 self.closed = False
217 self.inverted = None
217 assert self.value_from.value * self.value_to.value >= 0 218 assert self.value_from.value * self.value_to.value >= 0
218 assert self.value_from.currency == self.value_to.currency 219 assert self.value_from.currency == self.value_to.currency
219 if self.value_from != 0: 220 if self.value_from != 0:
@@ -238,8 +239,8 @@ class Trade:
238 else: 239 else:
239 return "dispose" 240 return "dispose"
240 241
241 def order_action(self, inverted): 242 def order_action(self):
242 if (self.value_from < self.value_to) != inverted: 243 if (self.value_from < self.value_to) != self.inverted:
243 return "buy" 244 return "buy"
244 else: 245 else:
245 return "sell" 246 return "sell"
@@ -262,7 +263,7 @@ class Trade:
262 263
263 @property 264 @property
264 def is_fullfiled(self): 265 def is_fullfiled(self):
265 return abs(self.filled_amount(in_base_currency=True)) >= abs(self.delta) 266 return abs(self.filled_amount(in_base_currency=(not self.inverted))) >= abs(self.delta)
266 267
267 def filled_amount(self, in_base_currency=False): 268 def filled_amount(self, in_base_currency=False):
268 filled_amount = 0 269 filled_amount = 0
@@ -308,17 +309,17 @@ class Trade:
308 if self.action is None: 309 if self.action is None:
309 return None 310 return None
310 ticker = self.market.get_ticker(self.currency, self.base_currency) 311 ticker = self.market.get_ticker(self.currency, self.base_currency)
311 inverted = ticker["inverted"] 312 self.inverted = ticker["inverted"]
312 if inverted: 313 if self.inverted:
313 ticker = ticker["original"] 314 ticker = ticker["original"]
314 rate = Computation.compute_value(ticker, self.order_action(inverted), compute_value=compute_value) 315 rate = Computation.compute_value(ticker, self.order_action(), compute_value=compute_value)
315 316
316 # FIXME: Dust amount should be removed from there if they werent 317 # FIXME: Dust amount should be removed from there if they werent
317 # honored in other sales 318 # honored in other sales
318 delta_in_base = abs(self.delta) 319 delta_in_base = abs(self.delta)
319 # 9 BTC's worth of move (10 - 1 or 1 - 10 depending on case) 320 # 9 BTC's worth of move (10 - 1 or 1 - 10 depending on case)
320 321
321 if not inverted: 322 if not self.inverted:
322 base_currency = self.base_currency 323 base_currency = self.base_currency
323 # BTC 324 # BTC
324 if self.action == "dispose": 325 if self.action == "dispose":
@@ -376,7 +377,7 @@ class Trade:
376 self.market.report.log_error("prepare_order", message="Less to do than already filled: {}".format(delta)) 377 self.market.report.log_error("prepare_order", message="Less to do than already filled: {}".format(delta))
377 return None 378 return None
378 379
379 order = Order(self.order_action(inverted), 380 order = Order(self.order_action(),
380 delta, rate, base_currency, self.trade_type, 381 delta, rate, base_currency, self.trade_type,
381 self.market, self, close_if_possible=close_if_possible) 382 self.market, self, close_if_possible=close_if_possible)
382 self.orders.append(order) 383 self.orders.append(order)
@@ -472,7 +473,7 @@ class Order:
472 473
473 @property 474 @property
474 def finished(self): 475 def finished(self):
475 return self.status == "closed" or self.status == "canceled" or self.status == "error" 476 return self.status.startswith("closed") or self.status == "canceled" or self.status == "error"
476 477
477 @retry(InsufficientFunds) 478 @retry(InsufficientFunds)
478 def run(self): 479 def run(self):
@@ -516,15 +517,13 @@ class Order:
516 # other states are "closed" and "canceled" 517 # other states are "closed" and "canceled"
517 if not self.finished: 518 if not self.finished:
518 self.fetch() 519 self.fetch()
519 if self.finished:
520 self.mark_finished_order()
521 return self.status 520 return self.status
522 521
523 def mark_finished_order(self): 522 def mark_finished_order(self):
524 if self.market.debug: 523 if self.status.startswith("closed") and self.market.debug:
525 self.market.report.log_debug_action("Mark {} as finished".format(self)) 524 self.market.report.log_debug_action("Mark {} as finished".format(self))
526 return 525 return
527 if self.status == "closed": 526 if self.status.startswith("closed"):
528 if self.trade_type == "short" and self.action == "buy" and self.close_if_possible: 527 if self.trade_type == "short" and self.action == "buy" and self.close_if_possible:
529 self.market.ccxt.close_margin_position(self.amount.currency, self.base_currency) 528 self.market.ccxt.close_margin_position(self.amount.currency, self.base_currency)
530 529
@@ -543,6 +542,7 @@ class Order:
543 542
544 self.fetch_mouvements() 543 self.fetch_mouvements()
545 544
545 self.mark_finished_order()
546 # FIXME: consider open order with dust remaining as closed 546 # FIXME: consider open order with dust remaining as closed
547 547
548 def dust_amount_remaining(self): 548 def dust_amount_remaining(self):