protected List <Stake> MaxOddsStakes(string gameName, GameType gameType, OddsType oddsType) { switch (oddsType) { case OddsType.ThreeWay: Stake [] maxOddsStakes = new Stake[3]; foreach (BetItem item in CurrentBets) { if (item.GameName.Equals(gameName, StringComparison.InvariantCultureIgnoreCase) && item.GameType == gameType && oddsType == OddsType.ThreeWay) { ThreeWayOdds itemOdds = (ThreeWayOdds)(item.Odds); if (null == maxOddsStakes[0] || itemOdds.Win > ((ThreeWayOdds)maxOddsStakes[0].BetItem.Odds).Win) { maxOddsStakes[0] = new Stake(item, "Win"); } if (null == maxOddsStakes[1] || itemOdds.Lose > ((ThreeWayOdds)maxOddsStakes[1].BetItem.Odds).Lose) { maxOddsStakes[1] = new Stake(item, "Lose"); } if (null == maxOddsStakes[2] || itemOdds.Draw > ((ThreeWayOdds)maxOddsStakes[2].BetItem.Odds).Draw) { maxOddsStakes[2] = new Stake(item, "Draw"); } } } return(maxOddsStakes.ToList()); default: break; } return(null); }
public static bool Deserialize <T>(out T result, string fileName, OddsType oddsType) { result = default(T); try { JsonSerializer serializer = new JsonSerializer(); if (oddsType == OddsType.ThreeWay) { serializer.Converters.Add(new ThreeWayOddsTypeConverter()); } using (StreamReader streamReader = new StreamReader(fileName)) { using (JsonReader jsonReader = new JsonTextReader(streamReader)) { result = serializer.Deserialize <T>(jsonReader); } } return(true); } catch (IOException e) { Console.WriteLine(e.Source); Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); } return(false); }
public override Stake BestStake(string gameName, GameType gameType, OddsType oddsType) { try { IOdds avgOdds = AverageOdds(gameName, gameType, oddsType); IOdds trueOdds = TrueOdds(avgOdds); var maxOddsStakes = MaxOddsStakes(gameName, gameType, oddsType); Stake bestBet = null; switch (oddsType) { case OddsType.ThreeWay: foreach (Stake stake in maxOddsStakes) { double curRoi = 0; if (stake.Decision.Equals("Win", StringComparison.InvariantCultureIgnoreCase)) { curRoi = (((ThreeWayOdds)stake.BetItem.Odds).Win - ((ThreeWayOdds)trueOdds).Win) / ((ThreeWayOdds)trueOdds).Win; } else if (stake.Decision.Equals("Lose", StringComparison.InvariantCultureIgnoreCase)) { curRoi = (((ThreeWayOdds)stake.BetItem.Odds).Lose - ((ThreeWayOdds)trueOdds).Lose) / ((ThreeWayOdds)trueOdds).Lose; } if (stake.Decision.Equals("Draw", StringComparison.InvariantCultureIgnoreCase)) { curRoi = (((ThreeWayOdds)stake.BetItem.Odds).Draw - ((ThreeWayOdds)trueOdds).Draw) / ((ThreeWayOdds)trueOdds).Draw; } if (null == bestBet || curRoi > bestBet.ROI) { stake.ROI = curRoi; bestBet = stake; } } break; default: break; } return(bestBet); } catch (Exception e) { Console.WriteLine(e.Source); Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); } return(null); }
public IOdds AverageOdds(string gameName, GameType gameType, OddsType oddsType) { try { switch (oddsType) { case OddsType.ThreeWay: ThreeWayOdds avgOdds = new ThreeWayOdds(); int count = 0; foreach (BetItem item in CurrentBets) { if (item.GameName.Equals(gameName, StringComparison.InvariantCultureIgnoreCase) && item.GameType == gameType && oddsType == OddsType.ThreeWay) { avgOdds.Win += ((ThreeWayOdds)(item.Odds)).Win; avgOdds.Lose += ((ThreeWayOdds)(item.Odds)).Lose; avgOdds.Draw += ((ThreeWayOdds)(item.Odds)).Draw; count++; } } avgOdds.Win /= count; avgOdds.Lose /= count; avgOdds.Draw /= count; return(avgOdds); default: break; } } catch (DivideByZeroException) { Console.WriteLine("Not enough sample size during average odds calculation"); Console.WriteLine("GameName:{0}, GameType:{1}, OddesType:{2}", gameName, gameType, oddsType.ToString()); } return(null); }
public bool Deserialize(string fileName, OddsType oddsType) { return(GBCommon.Deserialize(out this.CurrentBets, fileName, oddsType)); }
public abstract Stake BestStake(string gameName, GameType gameType, OddsType oddsType);