Search in sources :

Example 1 with CassandreStrategyInterface

use of tech.cassandre.trading.bot.strategy.CassandreStrategyInterface in project cassandre-trading-bot by cassandre-tech.

the class UserServiceDryModeAOP method addToBalance.

/**
 * Update balance of trade account (method called by trade service).
 *
 * @param strategy strategy
 * @param currency currency
 * @param amount   amount
 */
public void addToBalance(final GenericCassandreStrategy strategy, final Currency currency, final BigDecimal amount) {
    final Optional<AccountDTO> tradeAccount = strategy.getTradeAccount();
    if (tradeAccount.isEmpty()) {
        logger.error("Trading account not found!");
    } else {
        // We build a new account information from what we saved.
        Collection<Wallet> wallets = new LinkedHashSet<>();
        // We retreat all the wallets we have.
        accountInfo.getWallets().forEach((name, wallet) -> {
            HashMap<Currency, Balance> balances = new LinkedHashMap<>();
            // For each balance, we add it if nothing changed or, if on trading account, and we need to change the amount,
            // Then we do it.
            wallet.getBalances().forEach((balanceCurrency, balance) -> {
                if (name.equals(tradeAccount.get().getName()) && balanceCurrency.equals(currency)) {
                    // If we are on the account and currency to update, we calculate the new value.
                    balances.put(balanceCurrency, new Balance(balanceCurrency, balance.getTotal().add(amount)));
                } else {
                    // Else we keep the same value.
                    balances.put(balanceCurrency, balance);
                }
            });
            // amounts, then we create a new balance.
            if (name.equals(tradeAccount.get().getName()) && balances.get(currency) == null) {
                balances.put(currency, new Balance(currency, amount));
            }
            // We add the wallet.
            wallets.add(new Wallet(name, name, balances.values(), Collections.emptySet(), ZERO, ZERO));
        });
        // Creates the account info.
        accountInfo = new AccountInfo(USER_ID, wallets);
        // Updates all strategies.
        final UserDTO userDTO = ACCOUNT_MAPPER.mapToUserDTO(accountInfo);
        applicationContext.getBeansWithAnnotation(CassandreStrategy.class).values().stream().map(o -> (CassandreStrategyInterface) o).forEach(cassandreStrategyInterface -> cassandreStrategyInterface.initializeAccounts(userDTO.getAccounts()));
    }
}
Also used : LinkedHashSet(java.util.LinkedHashSet) Arrays(java.util.Arrays) Scanner(java.util.Scanner) HashMap(java.util.HashMap) Balance(org.knowm.xchange.dto.account.Balance) PathMatchingResourcePatternResolver(org.springframework.core.io.support.PathMatchingResourcePatternResolver) LinkedHashMap(java.util.LinkedHashMap) BigDecimal(java.math.BigDecimal) ConditionalOnExpression(org.springframework.boot.autoconfigure.condition.ConditionalOnExpression) Aspect(org.aspectj.lang.annotation.Aspect) LinkedHashSet(java.util.LinkedHashSet) Resource(org.springframework.core.io.Resource) AccountInfo(org.knowm.xchange.dto.account.AccountInfo) Wallet(org.knowm.xchange.dto.account.Wallet) AccountDTO(tech.cassandre.trading.bot.dto.user.AccountDTO) Collection(java.util.Collection) ZERO(java.math.BigDecimal.ZERO) IOException(java.io.IOException) ApplicationContext(org.springframework.context.ApplicationContext) Around(org.aspectj.lang.annotation.Around) FileNotFoundException(java.io.FileNotFoundException) UserDTO(tech.cassandre.trading.bot.dto.user.UserDTO) Currency(org.knowm.xchange.currency.Currency) Component(org.springframework.stereotype.Component) List(java.util.List) GenericCassandreStrategy(tech.cassandre.trading.bot.strategy.GenericCassandreStrategy) BaseService(tech.cassandre.trading.bot.util.base.service.BaseService) CassandreStrategy(tech.cassandre.trading.bot.strategy.CassandreStrategy) Optional(java.util.Optional) CassandreStrategyInterface(tech.cassandre.trading.bot.strategy.CassandreStrategyInterface) Collections(java.util.Collections) ProceedingJoinPoint(org.aspectj.lang.ProceedingJoinPoint) Wallet(org.knowm.xchange.dto.account.Wallet) UserDTO(tech.cassandre.trading.bot.dto.user.UserDTO) CassandreStrategyInterface(tech.cassandre.trading.bot.strategy.CassandreStrategyInterface) LinkedHashMap(java.util.LinkedHashMap) Currency(org.knowm.xchange.currency.Currency) AccountDTO(tech.cassandre.trading.bot.dto.user.AccountDTO) Balance(org.knowm.xchange.dto.account.Balance) AccountInfo(org.knowm.xchange.dto.account.AccountInfo)

Aggregations

FileNotFoundException (java.io.FileNotFoundException)1 IOException (java.io.IOException)1 BigDecimal (java.math.BigDecimal)1 ZERO (java.math.BigDecimal.ZERO)1 Arrays (java.util.Arrays)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 LinkedHashMap (java.util.LinkedHashMap)1 LinkedHashSet (java.util.LinkedHashSet)1 List (java.util.List)1 Optional (java.util.Optional)1 Scanner (java.util.Scanner)1 ProceedingJoinPoint (org.aspectj.lang.ProceedingJoinPoint)1 Around (org.aspectj.lang.annotation.Around)1 Aspect (org.aspectj.lang.annotation.Aspect)1 Currency (org.knowm.xchange.currency.Currency)1 AccountInfo (org.knowm.xchange.dto.account.AccountInfo)1 Balance (org.knowm.xchange.dto.account.Balance)1 Wallet (org.knowm.xchange.dto.account.Wallet)1