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)); }
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); }
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); }
public async Task <decimal> CalculateBetValueByBankAsync(CalculateBetValueOptions options) { return(await Task.Run(() => CalculateBetValue(options))); }