Skip to content

Commit

Permalink
Merge pull request #1383 from Drakkar-Software/dev
Browse files Browse the repository at this point in the history
Dev merge
  • Loading branch information
GuillaumeDSM authored Nov 17, 2024
2 parents 4f06bd6 + 4318329 commit aa6391b
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
9 changes: 9 additions & 0 deletions Trading/Exchange/coinbase/coinbase_exchange.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,15 @@ class Coinbase(exchanges.RestExchange):
# "User is not allowed to convert crypto","message":"User is not allowed to convert crypto"}
("user is not allowed to convert crypto", ),
]
# text content of errors due to exchange internal synch (like when portfolio is not yet up to date after a trade)
EXCHANGE_INTERNAL_SYNC_ERRORS: typing.List[typing.Iterable[str]] = [
# BadRequest coinbase {"error":"INVALID_ARGUMENT","error_details":"account is not available","message":"account is not available"}
("account is not available", )
]
# text content of errors due to missing fnuds when creating an order (when not identified as such by ccxt)
EXCHANGE_MISSING_FUNDS_ERRORS: typing.List[typing.Iterable[str]] = [
("insufficient balance in source account", )
]

@classmethod
def get_name(cls):
Expand Down
11 changes: 11 additions & 0 deletions Trading/Mode/index_trading_mode/index_trading.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,17 +64,28 @@ async def _rebalance_portfolio(self, details: dict):
orders = []
try:
# 1. make sure we can actually rebalance the portfolio
self.logger.info("Step 1/3: ensuring enough funds are available for rebalance")
await self._ensure_enough_funds_to_buy_after_selling()
# 2. sell indexed coins for reference market
self.logger.info(
f"Step 2/3: selling coins to free "
f"{self.exchange_manager.exchange_personal_data.portfolio_manager.reference_market}"
)
orders += await self._sell_indexed_coins_for_reference_market(details)
# 3. split reference market into indexed coins
self.logger.info(
f"Step 3/3: buying coins using "
f"{self.exchange_manager.exchange_personal_data.portfolio_manager.reference_market}"
)
orders += await self._split_reference_market_into_indexed_coins(details)
except trading_errors.MissingMinimalExchangeTradeVolume as err:
self.logger.warning(f"Aborting rebalance on {self.exchange_manager.exchange_name}: {err}")
self._update_producer_last_activity(
IndexActivity.REBALANCING_SKIPPED,
RebalanceSkipDetails.NOT_ENOUGH_AVAILABLE_FOUNDS.value
)
finally:
self.logger.info("Portoflio rebalance complete")
return orders

async def _sell_indexed_coins_for_reference_market(self, details: dict) -> list:
Expand Down

0 comments on commit aa6391b

Please sign in to comment.