private async void CheckWatchedEvents() { if (WatchedEvents.Count == 0) { return; } BettingData FortunaEvents = await GetNewFeedData(); if (FortunaEvents == null) { return; } foreach (var EventsToWatch in WatchedEvents) { Match FortunaMatch = FortunaEventHelper.GetMatchByID(EventsToWatch.Item2, FortunaEvents); var FortunaUnflattenedOdds = FortunaMatch.Bets.Bet.Select(x => x.Odds.Select(y => Convert.ToDouble(y.Text, CultureInfo.InvariantCulture)).ToList()).ToList(); List <double> FortunaOdds = FortunaUnflattenedOdds.SelectMany(x => x).ToList(); // 0 - home, 1 - tie, 2 - away int ScrapedEventsCount = Model.MarketSnapshots[EventsToWatch.Item1].Count(); List <MarketSnapshot> MatchbookOffers = Model.MarketSnapshots[EventsToWatch.Item1].Skip(Math.Max(0, ScrapedEventsCount - 3)).ToList(); foreach (var offer in MatchbookOffers) { if (offer.Lay.Count == 0) { return; // no lay offers } } List <double> MatchbookOdds = MatchbookOffers.Select(x => x.Lay.First()).Select(x => x.Odds).ToList(); for (int i = 0; i < MatchbookOdds.Count; i++) { if (FortunaOdds[i] > MatchbookOdds[i]) { switch (i) { case 0: GUIHelper.ThrowWarning("Arbitrage", $"Arbitrage detected at Home wins market! Home Matchbook odds: {MatchbookOdds[i]}, Fortuna odds: {FortunaOdds[i]}"); break; case 1: GUIHelper.ThrowWarning("Arbitrage", $"Arbitrage detected at Tie wins market! Home Matchbook odds: {MatchbookOdds[i]}, Fortuna odds: {FortunaOdds[i]}"); break; case 2: GUIHelper.ThrowWarning("Arbitrage", $"Arbitrage detected at Away wins market! Home Matchbook odds: {MatchbookOdds[i]}, Fortuna odds: {FortunaOdds[i]}"); break; default: GUIHelper.ThrowWarning("Arbitrage", $"Some kind of arbitrage found! Home Matchbook odds: {MatchbookOdds[i]}, Fortuna odds: {FortunaOdds[i]}"); break; } } } } }
private async void FindFortunaEventsByName() { BindingSource Events = new BindingSource(); BettingData FortunaEvents = await GetNewFeedData(); if (FortunaEvents == null) { return; } foreach (var Category in FortunaEvents.Category) { foreach (var Tournament in Category.Tournament) { foreach (var Match in Tournament.Match) { foreach (var Event in GetMatchPrices(Match)) { Event.EventName = Match.Name; Event.TournamentName = Tournament.Name; Event.ID = Convert.ToInt64(Match.Id); Events.Add(Event); } } } } SearchResultsView.Columns.Clear(); SearchResultsView.AutoGenerateColumns = false; foreach (var Column in FortunaEventHelper.GenerateColumns()) { SearchResultsView.Columns.Add(Column); } SearchResultsView.Columns[4].Visible = false; // don't show match ID SearchResultsView.DataSource = Events; }