public static BetToAssociateGvVM ToBetToAssociateGvVM(BetToDisplayGvVM betToDisplayGvVM) { return(new BetToAssociateGvVM { Id = betToDisplayGvVM.Id, LocalTimestamp = betToDisplayGvVM.LocalTimestamp, TipsterName = betToDisplayGvVM.TipsterName, LeagueName = betToDisplayGvVM.LeagueName, MatchHomeName = betToDisplayGvVM.MatchHomeName, MatchAwayName = betToDisplayGvVM.MatchAwayName, MatchId = betToDisplayGvVM.MatchId }); }
public static BetRequest ToBetRequest(BetToDisplayGvVM betToDisplayGvVm) { return(new BetRequest { Date = betToDisplayGvVm.LocalTimestamp.ToUTC(), Discipline = betToDisplayGvVm.Discipline, LeagueName = betToDisplayGvVm.LeagueName, MatchHomeName = betToDisplayGvVm.MatchHomeName, MatchAwayName = betToDisplayGvVm.MatchAwayName, PickChoice = betToDisplayGvVm.PickChoice, PickValue = betToDisplayGvVm.PickValue, Stake = betToDisplayGvVm.Stake, MatchId = betToDisplayGvVm.MatchId }); }
public static BetToDisplayGvVM ToBetToDisplayGvVM(DbBet dbBet) { var betToDisplayVM = new BetToDisplayGvVM(); var matchResult = MatchConverter.ToMatchResultResponse(dbBet.OriginalMatchResultString); betToDisplayVM.IsAssociatedWithArbitraryData = dbBet.MatchId != null; betToDisplayVM.Id = dbBet.Id; betToDisplayVM.BetResult = (dbBet.BetResult ?? dbBet.OriginalBetResult).ToEnum <BetResult>(); betToDisplayVM.IsBetResultOriginal = dbBet.BetResult == null; betToDisplayVM.Odds = dbBet.Odds; betToDisplayVM.TipsterName = dbBet.Tipster?.Name; betToDisplayVM.TipsterWebsite = dbBet.Tipster?.Link?.UrlToDomain(); betToDisplayVM.MatchHomeName = dbBet.Match?.Home?.Name ?? dbBet.OriginalHomeName; betToDisplayVM.IsMatchHomeNameOriginal = dbBet.Match?.Home?.Name == null; betToDisplayVM.MatchAwayName = dbBet.Match?.Away?.Name ?? dbBet.OriginalAwayName; betToDisplayVM.IsMatchAwayNameOriginal = dbBet.Match?.Away?.Name == null; betToDisplayVM.SetUnparsedMatchString(dbBet.OriginalHomeName, dbBet.OriginalAwayName); betToDisplayVM.MatchHomeScore = dbBet.Match?.HomeScore ?? matchResult.HomeScore; betToDisplayVM.IsMatchHomeScoreOriginal = dbBet.Match?.HomeScore == null; betToDisplayVM.MatchAwayScore = dbBet.Match?.AwayScore ?? matchResult.AwayScore; betToDisplayVM.IsMatchAwayScoreOriginal = dbBet.Match?.AwayScore == null; betToDisplayVM.LocalTimestamp = (dbBet.Match?.Date ?? dbBet.OriginalDate).ToExtendedTime().ToLocal(); betToDisplayVM.IsLocalTimestampOriginal = dbBet.Match?.Date == null; betToDisplayVM.Discipline = dbBet.Match?.League?.Discipline?.Name.ToEnum <DisciplineType>() ?? dbBet.OriginalDiscipline?.ToEnum <DisciplineType>(); betToDisplayVM.IsDisciplineOriginal = dbBet.Match?.League?.Discipline == null; betToDisplayVM.LeagueName = dbBet.Match?.League?.Name ?? dbBet.OriginalLeagueName; betToDisplayVM.IsLeagueNameOriginal = dbBet.Match?.League == null; betToDisplayVM.PickChoice = dbBet.Pick.Choice.ToEnum <PickChoice>(); betToDisplayVM.PickValue = dbBet.Pick.Value; betToDisplayVM.SetUnparsedPickString(dbBet.OriginalPickString); betToDisplayVM.MatchId = dbBet.MatchId; betToDisplayVM.TriedAssociateWithMatch = dbBet.TriedAssociateWithMatch != null && dbBet.TriedAssociateWithMatch >= 1; return(betToDisplayVM); }
public static BetToDisplayGvVM CopyBetToDisplayGvVM(BetToDisplayGvVM oldBetToDisplayGvVM) { var betToDisplayVM = new BetToDisplayGvVM(); betToDisplayVM.IsAssociatedWithArbitraryData = oldBetToDisplayGvVM.IsAssociatedWithArbitraryData; betToDisplayVM.Id = oldBetToDisplayGvVM.Id; betToDisplayVM.BetResult = oldBetToDisplayGvVM.BetResult; betToDisplayVM.IsBetResultOriginal = oldBetToDisplayGvVM.IsBetResultOriginal; betToDisplayVM.Odds = oldBetToDisplayGvVM.Odds; betToDisplayVM.TipsterName = oldBetToDisplayGvVM.TipsterName; betToDisplayVM.TipsterWebsite = oldBetToDisplayGvVM.TipsterWebsite; betToDisplayVM.MatchHomeName = oldBetToDisplayGvVM.MatchHomeName; betToDisplayVM.IsMatchHomeNameOriginal = oldBetToDisplayGvVM.IsMatchHomeNameOriginal; betToDisplayVM.MatchAwayName = oldBetToDisplayGvVM.MatchAwayName; betToDisplayVM.IsMatchAwayNameOriginal = oldBetToDisplayGvVM.IsMatchAwayNameOriginal; var teamSeparator = " - "; var unparsedMatchString = oldBetToDisplayGvVM.GetUnparsedMatchString(); betToDisplayVM.SetUnparsedMatchString(unparsedMatchString.BeforeFirst(teamSeparator), unparsedMatchString.AfterFirst(teamSeparator)); betToDisplayVM.MatchHomeScore = oldBetToDisplayGvVM.MatchHomeScore; betToDisplayVM.IsMatchHomeScoreOriginal = oldBetToDisplayGvVM.IsMatchHomeScoreOriginal; betToDisplayVM.MatchAwayScore = oldBetToDisplayGvVM.MatchAwayScore; betToDisplayVM.IsMatchAwayScoreOriginal = oldBetToDisplayGvVM.IsMatchAwayScoreOriginal; betToDisplayVM.LocalTimestamp = oldBetToDisplayGvVM.LocalTimestamp; betToDisplayVM.IsLocalTimestampOriginal = oldBetToDisplayGvVM.IsLocalTimestampOriginal; betToDisplayVM.Discipline = oldBetToDisplayGvVM.Discipline; betToDisplayVM.IsDisciplineOriginal = oldBetToDisplayGvVM.IsDisciplineOriginal; betToDisplayVM.LeagueName = oldBetToDisplayGvVM.LeagueName; betToDisplayVM.IsLeagueNameOriginal = oldBetToDisplayGvVM.IsLeagueNameOriginal; betToDisplayVM.PickChoice = oldBetToDisplayGvVM.PickChoice; betToDisplayVM.PickValue = oldBetToDisplayGvVM.PickValue; betToDisplayVM.SetUnparsedPickString(oldBetToDisplayGvVM.GetUnparsedPickString()); betToDisplayVM.MatchId = oldBetToDisplayGvVM.MatchId; betToDisplayVM.TriedAssociateWithMatch = oldBetToDisplayGvVM.TriedAssociateWithMatch; return(betToDisplayVM); }
private void ApplyStakingForIndividual() { var betsVM = new List <BetToDisplayGvVM>(); var currNr = 1; var currentBudget = Budget; var previousBudget = Budget; var maxBudget = Budget; var areLost = new List <bool>(); BetToDisplayGvVM previousBet = null; foreach (var bet in FilteredBets) { var betVM = bet.Copy(); var currStake = CalculateStakeChangedWithBudget(currentBudget, previousBudget, maxBudget); if (previousBet != null) { var isPrevLost = IsLost(currentBudget, previousBudget, maxBudget); areLost.Add(isPrevLost); var maxOrPrevBudget = GetBudgetForRef(previousBudget, maxBudget); var lostInARow = areLost.AsEnumerable().Reverse().TakeWhile(b => b).Count(); var wonInARow = areLost.AsEnumerable().Reverse().TakeWhile(b => !b).Count(); var lostMoney = maxOrPrevBudget - currentBudget; currStake = CalculateStake(currStake, isPrevLost, betsVM.LastOrNull(), lostInARow, wonInARow, lostMoney, betVM.Odds, 1, currentBudget); } previousBudget = currentBudget; // przed uzyskaniem profitu lub straty maxBudget = Math.Max(currentBudget, maxBudget); previousBet = betVM; betVM.Stake = currStake; betVM.Nr = currNr++; betVM.CalculateProfit(currStake, ref currentBudget); betsVM.Add(betVM); } LosesCounter = GetLosesCounter(areLost); WinsCounter = GetWinsCounter(areLost); Bets = betsVM; }
private double CalculateStake(double currStake, bool isLost, BetToDisplayGvVM previousBet, int lostInARow, int wonInARow, double lostMoney, double totalOdds, int groupSize, double budget) { if (previousBet == null) { return(currStake); } if (StakingTypeOnLose == StakingTypeOnLose.Flat && StakingTypeOnWin == StakingTypeOnWin.Flat) { currStake = new FlatFlatStaking(isLost, currStake, previousBet.Stake, ResetStake).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Add && StakingTypeOnWin == StakingTypeOnWin.Flat) { currStake = new AddFlatStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, lostInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Subtract && StakingTypeOnWin == StakingTypeOnWin.Flat) { currStake = new SubtractFlatStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, lostInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Multiply && StakingTypeOnWin == StakingTypeOnWin.Flat) { currStake = new MultiplyFlatStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, lostInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Divide && StakingTypeOnWin == StakingTypeOnWin.Flat) { currStake = new DivideFlatStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, lostInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.CoverPercentOfLoses && StakingTypeOnWin == StakingTypeOnWin.Flat) { currStake = new CoverPercentOfLosesFlatStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, lostMoney, totalOdds, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.UsePercentOfBudget && StakingTypeOnWin == StakingTypeOnWin.Flat) { currStake = new PercentOfBudgetFlatStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, budget, totalOdds, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Flat && StakingTypeOnWin == StakingTypeOnWin.Add) { currStake = new FlatAddStaking(isLost, currStake, previousBet.Stake, ResetStake, WinCoefficient, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Add && StakingTypeOnWin == StakingTypeOnWin.Add) { currStake = new AddAddStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Subtract && StakingTypeOnWin == StakingTypeOnWin.Add) { currStake = new SubtractAddStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Multiply && StakingTypeOnWin == StakingTypeOnWin.Add) { currStake = new MultiplyAddStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Divide && StakingTypeOnWin == StakingTypeOnWin.Add) { currStake = new DivideAddStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.CoverPercentOfLoses && StakingTypeOnWin == StakingTypeOnWin.Add) { currStake = new CoverPercentOfLosesAddStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, lostMoney, totalOdds, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.UsePercentOfBudget && StakingTypeOnWin == StakingTypeOnWin.Add) { currStake = new PercentOfBudgetAddStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, budget, totalOdds, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Flat && StakingTypeOnWin == StakingTypeOnWin.Subtract) { currStake = new FlatSubtractStaking(isLost, currStake, previousBet.Stake, ResetStake, WinCoefficient, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Add && StakingTypeOnWin == StakingTypeOnWin.Subtract) { currStake = new AddSubtractStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Subtract && StakingTypeOnWin == StakingTypeOnWin.Subtract) { currStake = new SubtractSubtractStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Multiply && StakingTypeOnWin == StakingTypeOnWin.Subtract) { currStake = new MultiplySubtractStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Divide && StakingTypeOnWin == StakingTypeOnWin.Subtract) { currStake = new DivideSubtractStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.CoverPercentOfLoses && StakingTypeOnWin == StakingTypeOnWin.Subtract) { currStake = new CoverPercentOfLosesSubtractStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, lostMoney, totalOdds, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.UsePercentOfBudget && StakingTypeOnWin == StakingTypeOnWin.Subtract) { currStake = new PercentOfBudgetSubtractStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, budget, totalOdds, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Flat && StakingTypeOnWin == StakingTypeOnWin.Multiply) { currStake = new FlatMultiplyStaking(isLost, currStake, previousBet.Stake, ResetStake, WinCoefficient, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Add && StakingTypeOnWin == StakingTypeOnWin.Multiply) { currStake = new AddMultiplyStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Subtract && StakingTypeOnWin == StakingTypeOnWin.Multiply) { currStake = new SubtractMultiplyStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Multiply && StakingTypeOnWin == StakingTypeOnWin.Multiply) { currStake = new MultiplyMultiplyStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Divide && StakingTypeOnWin == StakingTypeOnWin.Multiply) { currStake = new DivideMultiplyStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.CoverPercentOfLoses && StakingTypeOnWin == StakingTypeOnWin.Multiply) { currStake = new CoverPercentOfLosesMultiplyStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, lostMoney, totalOdds, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.UsePercentOfBudget && StakingTypeOnWin == StakingTypeOnWin.Multiply) { currStake = new PercentOfBudgetMultiplyStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, budget, totalOdds, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Flat && StakingTypeOnWin == StakingTypeOnWin.Divide) { currStake = new FlatDivideStaking(isLost, currStake, previousBet.Stake, ResetStake, WinCoefficient, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Add && StakingTypeOnWin == StakingTypeOnWin.Divide) { currStake = new AddDivideStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Subtract && StakingTypeOnWin == StakingTypeOnWin.Divide) { currStake = new SubtractDivideStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Multiply && StakingTypeOnWin == StakingTypeOnWin.Divide) { currStake = new MultiplyDivideStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Divide && StakingTypeOnWin == StakingTypeOnWin.Divide) { currStake = new DivideDivideStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.CoverPercentOfLoses && StakingTypeOnWin == StakingTypeOnWin.Divide) { currStake = new CoverPercentOfLosesDivideStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, lostMoney, totalOdds, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.UsePercentOfBudget && StakingTypeOnWin == StakingTypeOnWin.Divide) { currStake = new PercentOfBudgetDivideStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, budget, totalOdds, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Flat && StakingTypeOnWin == StakingTypeOnWin.UsePercentOfBudget) { currStake = new FlatPercentOfBudgetStaking(isLost, currStake, previousBet.Stake, ResetStake, WinCoefficient, budget, totalOdds, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Add && StakingTypeOnWin == StakingTypeOnWin.UsePercentOfBudget) { currStake = new AddPercentOfBudgetStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, budget, totalOdds, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Subtract && StakingTypeOnWin == StakingTypeOnWin.UsePercentOfBudget) { currStake = new SubtractPercentOfBudgetStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, budget, totalOdds, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Multiply && StakingTypeOnWin == StakingTypeOnWin.UsePercentOfBudget) { currStake = new MultiplyPercentOfBudgetStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, budget, totalOdds, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.Divide && StakingTypeOnWin == StakingTypeOnWin.UsePercentOfBudget) { currStake = new DividePercentOfBudgetStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, lostInARow, wonInARow, budget, totalOdds, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.CoverPercentOfLoses && StakingTypeOnWin == StakingTypeOnWin.UsePercentOfBudget) { currStake = new CoverPercentOfLosesPercentOfBudgetStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, budget, totalOdds, groupSize).Apply(); } else if (StakingTypeOnLose == StakingTypeOnLose.UsePercentOfBudget && StakingTypeOnWin == StakingTypeOnWin.UsePercentOfBudget) { currStake = new PercentOfBudgetPercentOfBudgetStaking(isLost, currStake, previousBet.Stake, ResetStake, LoseCoefficient, WinCoefficient, budget, totalOdds, groupSize).Apply(); } else { throw new Exception("Niezaimplementowane"); } return(MaxStake.Eq(0.0) ? currStake : Math.Min(currStake, MaxStake)); }