diff --git a/catalyst/exchange/exchange.py b/catalyst/exchange/exchange.py index 20cbe967..310d12fc 100644 --- a/catalyst/exchange/exchange.py +++ b/catalyst/exchange/exchange.py @@ -662,20 +662,16 @@ class Exchange: return df - def _check_low_balance(self, currency, balances, amount, open_orders=None): + def _check_low_balance(self, currency, balances, amount): free = balances[currency]['free'] if currency in balances else 0.0 - if open_orders: - # TODO: make sure that this works - free += sum([order.amount for order in open_orders]) - if free < amount: return free, True else: return free, False - def sync_positions(self, positions, open_orders=None, cash=None, + def sync_positions(self, positions, cash=None, check_balances=False): """ Update the portfolio cash and position balances based on the diff --git a/catalyst/exchange/exchange_algorithm.py b/catalyst/exchange/exchange_algorithm.py index 5bf103fa..98966a82 100644 --- a/catalyst/exchange/exchange_algorithm.py +++ b/catalyst/exchange/exchange_algorithm.py @@ -638,6 +638,15 @@ class ExchangeTradingAlgorithmLive(ExchangeTradingAlgorithmBase): if asset_orders: orders += asset_orders + required_cash = self.portfolio.cash if not orders else None + cash, positions_value = exchange.sync_positions( + positions=exchange_positions, + check_balances=check_balances, + cash=required_cash, + ) + total_cash += cash + total_positions_value += positions_value + # Applying modifications to the original positions for position in exchange_positions: tracker.update_position( @@ -647,16 +656,6 @@ class ExchangeTradingAlgorithmLive(ExchangeTradingAlgorithmBase): last_sale_price=position.last_sale_price, ) - required_cash = self.portfolio.cash if not orders else None - cash, positions_value = exchange.sync_positions( - positions=exchange_positions, - open_orders=orders, - check_balances=check_balances, - cash=required_cash, - ) - total_cash += cash - total_positions_value += positions_value - if not check_balances: total_cash = self.portfolio.cash