Search in sources :

Example 1 with Rating

use of com.github.robozonky.api.remote.enums.Rating in project robozonky by RoboZonky.

the class InvestmentSizeRecommender method getInvestmentBounds.

private int[] getInvestmentBounds(final ParsedStrategy strategy, final Loan loan) {
    final Rating rating = loan.getRating();
    final int absoluteMinimum = Math.max(strategy.getMinimumInvestmentSizeInCzk(rating), Defaults.MINIMUM_INVESTMENT_IN_CZK);
    final int minimumRecommendation = roundToNearestIncrement(absoluteMinimum);
    final int maximumUserRecommendation = roundToNearestIncrement(strategy.getMaximumInvestmentSizeInCzk(rating));
    if (maximumUserRecommendation > maximumInvestmentAmount) {
        LOGGER.info("Maximum investment amount reduced to {} by Zonky.", maximumInvestmentAmount);
    }
    final int maximumRecommendation = Math.min(maximumUserRecommendation, maximumInvestmentAmount);
    final int loanId = loan.getId();
    LOGGER.trace("Strategy gives investment range for loan #{} of <{}; {}> CZK.", loanId, minimumRecommendation, maximumRecommendation);
    final int minimumInvestmentByShare = getPercentage(loan.getAmount(), strategy.getMinimumInvestmentShareInPercent());
    final int minimumInvestment = Math.max(minimumInvestmentByShare, strategy.getMinimumInvestmentSizeInCzk(loan.getRating()));
    final int maximumInvestmentByShare = getPercentage(loan.getAmount(), strategy.getMaximumInvestmentShareInPercent());
    final int maximumInvestment = Math.min(maximumInvestmentByShare, strategy.getMaximumInvestmentSizeInCzk(loan.getRating()));
    // minimums are guaranteed to be <= maximums due to the contract of strategy implementation
    return new int[] { minimumInvestment, maximumInvestment };
}
Also used : Rating(com.github.robozonky.api.remote.enums.Rating)

Example 2 with Rating

use of com.github.robozonky.api.remote.enums.Rating in project robozonky by RoboZonky.

the class NaturalLanguagePurchaseStrategy method getRecommendationBoundaries.

private int[] getRecommendationBoundaries(final Participation participation) {
    final Rating rating = participation.getRating();
    final int minimumInvestment = strategy.getMinimumInvestmentSizeInCzk(rating);
    final int maximumInvestment = strategy.getMaximumInvestmentSizeInCzk(rating);
    return new int[] { minimumInvestment, maximumInvestment };
}
Also used : Rating(com.github.robozonky.api.remote.enums.Rating)

Example 3 with Rating

use of com.github.robozonky.api.remote.enums.Rating in project robozonky by RoboZonky.

the class PortfolioOverviewTest method emptyPortfolio.

@Test
void emptyPortfolio() {
    final int balance = 5000;
    final PortfolioOverview o = PortfolioOverview.calculate(BigDecimal.valueOf(balance), Stream::empty);
    assertSoftly(softly -> {
        for (final Rating r : Rating.values()) {
            softly.assertThat(o.getShareOnInvestment(r)).isEqualTo(BigDecimal.ZERO);
            softly.assertThat(o.getAtRiskShareOnInvestment(r)).isEqualTo(BigDecimal.ZERO);
        }
        softly.assertThat(o.getCzkAvailable()).isEqualTo(balance);
        softly.assertThat(o.getCzkInvested()).isEqualTo(0);
    });
}
Also used : Rating(com.github.robozonky.api.remote.enums.Rating) Stream(java.util.stream.Stream) Test(org.junit.jupiter.api.Test)

Example 4 with Rating

use of com.github.robozonky.api.remote.enums.Rating in project robozonky by RoboZonky.

the class SimpleStrategyService method parseOrThrow.

private static InvestmentStrategy parseOrThrow(final String strategy) {
    final ImmutableConfiguration config = ImmutableConfiguration.from(strategy);
    // set default values
    final DefaultValues d = new DefaultValues(DefaultPortfolio.EMPTY);
    d.setMinimumBalance(SimpleStrategyService.getMinimumBalance(config));
    d.setTargetPortfolioSize(SimpleStrategyService.getTargetPortfolioSize(config));
    d.setInvestmentShare(new DefaultInvestmentShare(SimpleStrategyService.getInvestmentShare(config)));
    final LoanRatingEnumeratedCondition c = new LoanRatingEnumeratedCondition();
    Stream.of(Rating.values()).filter(r -> StrategyFileProperty.REQUIRE_CONFIRMATION.getValue(r, config::getBoolean)).forEach(c::add);
    d.setConfirmationCondition(c);
    // assemble strategy
    final Map<Rating, InvestmentSize> investmentSizes = Stream.of(Rating.values()).collect(Collectors.toMap(Function.identity(), r -> {
        final int min = StrategyFileProperty.MINIMUM_LOAN_AMOUNT.getValue(r, config::getInt);
        final int max = StrategyFileProperty.MAXIMUM_LOAN_AMOUNT.getValue(r, config::getInt);
        return new InvestmentSize(min, max);
    }));
    final Collection<PortfolioShare> portfolio = Stream.of(Rating.values()).map(r -> {
        final int min = SimpleStrategyService.getShare(config, StrategyFileProperty.TARGET_SHARE, r);
        final int max = SimpleStrategyService.getShare(config, StrategyFileProperty.MAXIMUM_SHARE, r);
        return new PortfolioShare(r, min, max);
    }).collect(Collectors.toList());
    // filter loans with less than minimum term
    final Stream<Optional<MarketplaceFilter>> s1 = Stream.of(Rating.values()).map(r -> {
        final int min = StrategyFileProperty.MINIMUM_TERM.getValue(r, config::getInt);
        if (min < 2) {
            // there will be no loan with term smaller than 1
            return Optional.empty();
        }
        final MarketplaceFilterCondition f = new LoanTermCondition(0, min - 1);
        return Optional.of(getRatingFilter(r, f));
    });
    // filter loans with more than maximum term
    final Stream<Optional<MarketplaceFilter>> s2 = Stream.of(Rating.values()).map(r -> {
        final int max = StrategyFileProperty.MAXIMUM_TERM.getValue(r, config::getInt);
        if (max < 1) {
            return Optional.empty();
        }
        final MarketplaceFilterCondition f = new LoanTermCondition(max + 1);
        return Optional.of(getRatingFilter(r, f));
    });
    // filter loans with ask for less than minimum
    final Stream<Optional<MarketplaceFilter>> s3 = Stream.of(Rating.values()).map(r -> {
        final int min = StrategyFileProperty.MINIMUM_ASK.getValue(r, config::getInt);
        if (min < 2) {
            // amount smaller than 1 is 0, no need to have that filter
            return Optional.empty();
        }
        final MarketplaceFilterCondition f = new LoanAmountCondition(0, min - 1);
        return Optional.of(getRatingFilter(r, f));
    });
    // filter loans with ask more than maximum
    final Stream<Optional<MarketplaceFilter>> s4 = Stream.of(Rating.values()).map(r -> {
        final int max = StrategyFileProperty.MAXIMUM_ASK.getValue(r, config::getInt);
        if (max < 1) {
            return Optional.empty();
        }
        final MarketplaceFilterCondition f = new LoanAmountCondition(max + 1);
        return Optional.of(getRatingFilter(r, f));
    });
    // put all filters together
    final Collection<MarketplaceFilter> filters = Stream.of(s1, s2, s3, s4).flatMap(Function.identity()).flatMap(s -> s.map(Stream::of).orElse(Stream.empty())).collect(Collectors.toList());
    // and create the strategy
    final ParsedStrategy p = new ParsedStrategy(d, portfolio, investmentSizes, new FilterSupplier(d, filters));
    LOGGER.debug("Converted strategy: {}.", p);
    final InvestmentStrategy result = new NaturalLanguageInvestmentStrategy(p);
    return new SimpleStrategyService.ExclusivelyPrimaryMarketplaceInvestmentStrategy(result);
}
Also used : RecommendedLoan(com.github.robozonky.api.strategies.RecommendedLoan) Arrays(java.util.Arrays) InvestmentStrategy(com.github.robozonky.api.strategies.InvestmentStrategy) LoggerFactory(org.slf4j.LoggerFactory) PurchaseStrategy(com.github.robozonky.api.strategies.PurchaseStrategy) ParsedStrategy(com.github.robozonky.strategy.natural.ParsedStrategy) Function(java.util.function.Function) DefaultValues(com.github.robozonky.strategy.natural.DefaultValues) BigDecimal(java.math.BigDecimal) LoanAmountCondition(com.github.robozonky.strategy.natural.conditions.LoanAmountCondition) LoanTermCondition(com.github.robozonky.strategy.natural.conditions.LoanTermCondition) MarketplaceFilter(com.github.robozonky.strategy.natural.conditions.MarketplaceFilter) LoanRatingEnumeratedCondition(com.github.robozonky.strategy.natural.conditions.LoanRatingEnumeratedCondition) Map(java.util.Map) DefaultPortfolio(com.github.robozonky.strategy.natural.DefaultPortfolio) FilterSupplier(com.github.robozonky.strategy.natural.FilterSupplier) Rating(com.github.robozonky.api.remote.enums.Rating) NaturalLanguageInvestmentStrategy(com.github.robozonky.strategy.natural.NaturalLanguageInvestmentStrategy) DefaultInvestmentShare(com.github.robozonky.strategy.natural.DefaultInvestmentShare) LoanDescriptor(com.github.robozonky.api.strategies.LoanDescriptor) Logger(org.slf4j.Logger) Collection(java.util.Collection) Collectors(java.util.stream.Collectors) InvestmentSize(com.github.robozonky.strategy.natural.InvestmentSize) Restrictions(com.github.robozonky.api.remote.entities.Restrictions) StrategyService(com.github.robozonky.api.strategies.StrategyService) Stream(java.util.stream.Stream) PortfolioOverview(com.github.robozonky.api.strategies.PortfolioOverview) Optional(java.util.Optional) MarketplaceFilterCondition(com.github.robozonky.strategy.natural.conditions.MarketplaceFilterCondition) PortfolioShare(com.github.robozonky.strategy.natural.PortfolioShare) Collections(java.util.Collections) SellStrategy(com.github.robozonky.api.strategies.SellStrategy) MarketplaceFilter(com.github.robozonky.strategy.natural.conditions.MarketplaceFilter) Rating(com.github.robozonky.api.remote.enums.Rating) InvestmentSize(com.github.robozonky.strategy.natural.InvestmentSize) DefaultValues(com.github.robozonky.strategy.natural.DefaultValues) FilterSupplier(com.github.robozonky.strategy.natural.FilterSupplier) LoanAmountCondition(com.github.robozonky.strategy.natural.conditions.LoanAmountCondition) Optional(java.util.Optional) LoanRatingEnumeratedCondition(com.github.robozonky.strategy.natural.conditions.LoanRatingEnumeratedCondition) ParsedStrategy(com.github.robozonky.strategy.natural.ParsedStrategy) PortfolioShare(com.github.robozonky.strategy.natural.PortfolioShare) LoanTermCondition(com.github.robozonky.strategy.natural.conditions.LoanTermCondition) DefaultInvestmentShare(com.github.robozonky.strategy.natural.DefaultInvestmentShare) MarketplaceFilterCondition(com.github.robozonky.strategy.natural.conditions.MarketplaceFilterCondition) InvestmentStrategy(com.github.robozonky.api.strategies.InvestmentStrategy) NaturalLanguageInvestmentStrategy(com.github.robozonky.strategy.natural.NaturalLanguageInvestmentStrategy) NaturalLanguageInvestmentStrategy(com.github.robozonky.strategy.natural.NaturalLanguageInvestmentStrategy)

Example 5 with Rating

use of com.github.robozonky.api.remote.enums.Rating in project robozonky by RoboZonky.

the class UtilTest method assertOrder.

private static void assertOrder(final List<Rating> result, final Rating... ratingsOrderedDown) {
    final Rating first = result.get(0);
    final Rating last = result.get(ratingsOrderedDown.length - 1);
    assertSoftly(softly -> {
        softly.assertThat(first).isGreaterThan(last);
        softly.assertThat(first).isEqualTo(ratingsOrderedDown[0]);
        softly.assertThat(last).isEqualTo(ratingsOrderedDown[ratingsOrderedDown.length - 1]);
    });
}
Also used : Rating(com.github.robozonky.api.remote.enums.Rating)

Aggregations

Rating (com.github.robozonky.api.remote.enums.Rating)5 Stream (java.util.stream.Stream)2 Restrictions (com.github.robozonky.api.remote.entities.Restrictions)1 InvestmentStrategy (com.github.robozonky.api.strategies.InvestmentStrategy)1 LoanDescriptor (com.github.robozonky.api.strategies.LoanDescriptor)1 PortfolioOverview (com.github.robozonky.api.strategies.PortfolioOverview)1 PurchaseStrategy (com.github.robozonky.api.strategies.PurchaseStrategy)1 RecommendedLoan (com.github.robozonky.api.strategies.RecommendedLoan)1 SellStrategy (com.github.robozonky.api.strategies.SellStrategy)1 StrategyService (com.github.robozonky.api.strategies.StrategyService)1 DefaultInvestmentShare (com.github.robozonky.strategy.natural.DefaultInvestmentShare)1 DefaultPortfolio (com.github.robozonky.strategy.natural.DefaultPortfolio)1 DefaultValues (com.github.robozonky.strategy.natural.DefaultValues)1 FilterSupplier (com.github.robozonky.strategy.natural.FilterSupplier)1 InvestmentSize (com.github.robozonky.strategy.natural.InvestmentSize)1 NaturalLanguageInvestmentStrategy (com.github.robozonky.strategy.natural.NaturalLanguageInvestmentStrategy)1 ParsedStrategy (com.github.robozonky.strategy.natural.ParsedStrategy)1 PortfolioShare (com.github.robozonky.strategy.natural.PortfolioShare)1 LoanAmountCondition (com.github.robozonky.strategy.natural.conditions.LoanAmountCondition)1 LoanRatingEnumeratedCondition (com.github.robozonky.strategy.natural.conditions.LoanRatingEnumeratedCondition)1