Esempio n. 1
0
        private List <ForecastJson> GetForecastsLoseSeries(List <ForecastJson> forecasts, long?checkPointForecastId, int threadNumbers)
        {
            ForecastJson forecast = forecasts.FirstOrDefault(x => x.Id == checkPointForecastId);

            if (forecast == null)
            {
                return(forecasts);
            }

            var dates = new List <DateTimeOffset>();

            for (var i = 0; i < threadNumbers; i++)
            {
                int index = i;

                dates.Add(forecasts.LastOrDefault(x =>
                                                  x.ThreadNumber == index && x.GameResultType == GameResultType.Win &&
                                                  x.GameAt < forecast.GameAt.AddDays(-3))?.GameAt ?? forecast.GameAt);
                dates.Add(forecasts.FirstOrDefault(x =>
                                                   x.ThreadNumber == index && x.GameResultType == GameResultType.Win &&
                                                   x.GameAt > forecast.GameAt.AddDays(3))?.GameAt ?? forecast.GameAt);
            }

            DateTimeOffset minDate = dates.Min().AddDays(-3);
            DateTimeOffset maxDate = dates.Max().AddDays(3);

            return(forecasts.Where(x => x.GameAt < maxDate && x.GameAt > minDate).ToList());
        }
        public async Task SynchronizeForecastsAsync()
        {
            List <ForecastJson> existingData = _dataService.GetForecasts();
            List <ForecastJson> forecasts    = await _gamblingSupportService.GetForecastsAsync(1);

            forecasts = forecasts.Where(x => x.ForecastType == ForecastType.Paid && x.Coefficient > 1.7).ToList();

            _dataService.InitializeThreadNumbers(forecasts);

            foreach (ForecastJson forecast in forecasts)
            {
                ForecastJson existsForecast = existingData.FirstOrDefault(x => x.Id == forecast.Id);

                if (existsForecast != null)
                {
                    forecast.Coefficient       = existsForecast.Coefficient;
                    forecast.GameResultType    = GetGameResultType(existsForecast.GameResultType, forecast.GameResultType);
                    forecast.ShowAt            = existsForecast.ShowAt;
                    forecast.BetValue          = existsForecast.BetValue;
                    forecast.AllowModification = existsForecast.AllowModification;
                    forecast.ThreadNumber      = existsForecast.ThreadNumber;
                }
            }

            forecasts = forecasts.AsEnumerable().Reverse().ToList();

            SetModificationRestrictions(forecasts);

            await _dataService.SaveForecastsAsync(forecasts, false);
        }
Esempio n. 3
0
        public async Task <StateJson> CalculateNextStateAsync(long forecastId, decimal?betValue = null,
                                                              bool?allowIncreaseBet             = null, StateJson lastState = null)
        {
            return(await Task.Run(() =>
            {
                ForecastJson forecast = _dataService.GetForecastBy(forecastId);
                ForecastJson previousForecast = _dataService.GetLastCalculatedForecastByIndex(forecast.ThreadNumber);
                SettingsJson settings = _dataService.GetSettings();

                return CalculateNextAlgorithmState(forecast, previousForecast, lastState: lastState, settings: settings,
                                                   allowIncreaseBet: allowIncreaseBet ?? settings.AllowIncreaseBetValue, betValue: betValue);
            }));
        }
Esempio n. 4
0
        private StateJson CalculateNextAlgorithmState(ForecastJson currentForecast, ForecastJson previousForecast,
                                                      StateJson lastState = null, SettingsJson settings = null, bool allowIncreaseBet = false, decimal?betValue = null)
        {
            if (currentForecast == null)
            {
                return(null);
            }

            if (lastState == null)
            {
                lastState = _dataService.GetLastState();
            }

            StateJson state = lastState.Copy();

            state.ForecastId = currentForecast.Id;

            if (previousForecast?.GameResultType == GameResultType.Expectation)
            {
                return(state);
            }

            int index = currentForecast.ThreadNumber;

            if (allowIncreaseBet)
            {
                SetNewInitialBetValue(state, settings);
            }

            int numberOfLoses = CalculateNumberOfLoses(settings?.IncreaseBetValueWhenDefeat,
                                                       previousForecast?.GameResultType, state.LoseNumbers[index]);

            if (previousForecast == null)
            {
                state.Bets[index] = betValue ?? GetBetValue(state.InitialBet, state.LoseValues[index], currentForecast.Coefficient,
                                                            settings?.BetValueRoundDecimals ?? 2, numberOfLoses);

                state.Bank -= state.Bets[index];

                return(state);
            }

            decimal result =
                CalculateResult(lastState.Bets[index], previousForecast.GameResultType, previousForecast.Coefficient);

            if (result < 0)
            {
                state.LoseValues[index]  += lastState.Bets[index];
                state.LoseNumbers[index] += 1;
            }
            else
            {
                if (previousForecast.GameResultType == GameResultType.Expectation)
                {
                    state.Bank += lastState.Bets[index];
                }
                else
                {
                    state.Bank += result;
                }

                if (previousForecast.GameResultType == GameResultType.Win)
                {
                    state.LoseValues[index]  = 0;
                    state.LoseNumbers[index] = 0;
                }
            }

            state.Bets[index] = betValue ?? GetBetValue(state.InitialBet, state.LoseValues[index], currentForecast.Coefficient,
                                                        settings?.BetValueRoundDecimals ?? 2, numberOfLoses);

            state.Bank -= state.Bets[index];

            return(state);
        }