public async Task <IActionResult> CalculateBetValueAsync(SettingsViewModel model)
        {
            CalculateBetValueOptions options = _mapper.Map <SettingsViewModel, CalculateBetValueOptions>(model);

            options.InitialBet = 0;

            decimal betValue = await _algorithmService.CalculateBetValueByBankAsync(options);

            return(Json(betValue));
        }
Beispiel #2
0
        private void SetNewInitialBetValue(StateJson state, SettingsJson settings)
        {
            var options = new CalculateBetValueOptions
            {
                InitialBet             = state.InitialBet,
                LowerBound             = settings?.LowerBound,
                UpperBound             = settings?.UpperBound,
                ThreadNumbers          = settings?.ThreadNumbers ?? 4,
                IncreaseBetStep        = settings?.BetValueIncreaseStep ?? 0.01M,
                CoefficientBankReserve = settings?.CoefficientBankReserve ?? 0,
                Bank = state.Bank,
                CalculationMethod = settings?.CalculationMethod ?? CalculationMethod.Max
            };

            state.InitialBet = CalculateBetValue(options);
        }
Beispiel #3
0
        private decimal CalculateBetValue(CalculateBetValueOptions options)
        {
            List <ForecastJson> forecasts = _dataService.GetResults(new FilterParameters
            {
                LowerBound = options.LowerBound,
                UpperBound = options.UpperBound
            }, false);

            if (forecasts == null || !forecasts.Any())
            {
                return(options.InitialBet);
            }

            var bankOptions = new CalculateBankValuesOptions
            {
                ThreadNumbers          = options.ThreadNumbers,
                Bet                    = options.InitialBet + options.IncreaseBetStep,
                CoefficientBankReserve = options.CoefficientBankReserve
            };

            decimal bank = GetBankValueByMethod(forecasts, bankOptions,
                                                options.CalculationMethod, out long?forecastId);

            if (bank > options.Bank)
            {
                return(options.InitialBet);
            }

            forecasts = GetForecastsLoseSeries(forecasts, forecastId, bankOptions.ThreadNumbers);

            do
            {
                options.InitialBet += options.IncreaseBetStep;

                bankOptions.Bet += options.IncreaseBetStep;
                bank             = CalculateBankValue(forecasts, bankOptions.Bet, bankOptions.CoefficientBankReserve,
                                                      bankOptions.ThreadNumbers).Bank;
            } while (bank <= options.Bank);

            return(options.InitialBet);
        }
Beispiel #4
0
 public async Task <decimal> CalculateBetValueByBankAsync(CalculateBetValueOptions options)
 {
     return(await Task.Run(() => CalculateBetValue(options)));
 }