diff options
Diffstat (limited to 'portfolio.py')
-rw-r--r-- | portfolio.py | 26 |
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): |