Exemplo n.º 1
0
        public static MultiBuilder Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log, ExecutionContext context)
        {
            log.LogInformation("BFBuildMulti BetFair API accessed, Date:" + new DateTime().ToString());
            ICacheManager <MultiBuilder> cacheManager = new CacheManager <MultiBuilder>();
            var apiConfig          = new ApiConfig(context);
            var muiltBuilderEngine = new MuiltBuilderEngine(apiConfig);
            var marketfilter       = new CustomMarketFilter()
            {
                EventTypes = new HashSet <string> {
                    "1"
                },
                MarketTypes = new HashSet <string> {
                    "MATCH_ODDS", "OVER_UNDER_25", "OVER_UNDER_15"
                },
                Count    = 20,
                DateFrom = DateTime.Now.AddHours(.5),
                DateTo   = DateTime.Now.AddHours(10)
            };

            var multi = muiltBuilderEngine.Execute(marketfilter, true);

            multi.Execute();
            return(multi);
        }
Exemplo n.º 2
0
        public static List <SingleMarket> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log, ExecutionContext context)
        {
            log.LogInformation("BFBuildMulti BetFair API accessed, Date:" + new DateTime().ToString());
            ICacheManager <MultiBuilder> cacheManager = new CacheManager <MultiBuilder>();
            var marketEngine = new MarketEngine();
            var eventId      = req.Query["eventId"].ToString();

            //check if already saved
            var markets = marketEngine.GeAllForEvent(eventId);

            if (markets != null && markets.Count > 0)
            {
                return(markets);
            }
            else
            {
                var apiConfig          = new ApiConfig(context);
                var muiltBuilderEngine = new MuiltBuilderEngine(apiConfig);
                var marketfilter       = new CustomMarketFilter()
                {
                    EventIds = new HashSet <string> {
                        eventId
                    },
                    MarketTypes = new HashSet <string> {
                        "MATCH_ODDS", "OVER_UNDER_25", "OVER_UNDER_15"
                    },
                    Count = 5
                };
                return(muiltBuilderEngine.Execute(marketfilter, false).Markets.ToList());
            }
        }
Exemplo n.º 3
0
        public MultiBuilder Execute(CustomMarketFilter filter, bool addToMulti)
        {
            MultiBuilder multiBuilder = new MultiBuilder();

            var marketCatalogueFilter = new MarketFilter();

            if (filter.EventTypes != null && filter.EventTypes.Count > 0)
            {
                marketCatalogueFilter.EventTypeIds = filter.EventTypes;
            }
            if (filter.MarketTypes != null && filter.MarketTypes.Count > 0)
            {
                marketCatalogueFilter.MarketTypeCodes = filter.MarketTypes;
            }
            if (filter.EventIds != null && filter.EventIds.Count > 0)
            {
                marketCatalogueFilter.EventIds = filter.EventIds;
            }

            var  timeRange     = new TimeRange();
            bool hasTimeFilter = false;

            if (filter.DateFrom.HasValue)
            {
                hasTimeFilter  = true;
                timeRange.From = filter.DateFrom.Value;
            }
            if (filter.DateTo.HasValue)
            {
                hasTimeFilter = true;
                timeRange.To  = filter.DateTo.Value;
            }
            if (hasTimeFilter)
            {
                marketCatalogueFilter.MarketStartTime = timeRange;
            }

            List <MarketCatalogue> marketCatalogues = _apiConfig.BetfairClient.ListMarketCatalogue(
                marketCatalogueFilter, new HashSet <MarketProjection>()
            {
                MarketProjection.EVENT, MarketProjection.EVENT_TYPE, MarketProjection.COMPETITION, MarketProjection.RUNNER_DESCRIPTION
            },
                null, filter.Count).Result.Response;

            List <SingleMarket> marketList = new List <SingleMarket>();

            foreach (MarketCatalogue marketCatalogue in marketCatalogues)
            {
                List <MarketBook> marketBook = _apiConfig.BetfairClient.ListMarketBook(
                    new HashSet <string>()
                {
                    marketCatalogue.MarketId.ToString()
                },
                    new PriceProjection()
                {
                    Virtualise = true, PriceData = new HashSet <PriceData>()
                    {
                        PriceData.SP_AVAILABLE, PriceData.SP_TRADED, PriceData.EX_TRADED, PriceData.EX_BEST_OFFERS, PriceData.EX_ALL_OFFERS
                    }
                })
                                               .Result.Response;

                if (marketBook != null && marketBook.Count > 0)
                {
                    int order = 0;
                    foreach (BetfairNG.Data.Runner runner in marketBook.First().Runners.Take(marketBook.First().Runners.Count > 1 ? 5 : 1))
                    {
                        SingleMarket market = new SingleMarket();
                        market.EventName   = marketCatalogue.Event.IsNull().Name;
                        market.MarketName  = marketCatalogue.MarketName;
                        market.EventId     = marketCatalogue.Event.Id;
                        market.MarketId    = marketCatalogue.MarketId;
                        market.EventType   = marketCatalogue.EventType.IsNull().Name;
                        market.Competition = marketCatalogue.Competition.IsNull().Name;
                        market.Date        = marketCatalogue.Event.IsNull().OpenDate;
                        double layPrice = 0, backPrice = 0, avlToBack = 0, avlToLay = 0;
                        if (runner.ExchangePrices.AvailableToBack.Count > 0)
                        {
                            backPrice = runner.ExchangePrices.AvailableToBack.First().Price;
                            avlToBack = runner.ExchangePrices.AvailableToBack.First().Size;

                            //not available until I get a paid apikey (non-delayed)
                            var volumePrice = "";
                            if (runner.ExchangePrices.TradedVolume.Count > 0)
                            {
                                volumePrice = runner.ExchangePrices.TradedVolume.First().Price.ToString();
                            }
                        }
                        if (runner.ExchangePrices.AvailableToLay.Count > 0)
                        {
                            layPrice = runner.ExchangePrices.AvailableToLay.First().Price;
                            avlToLay = runner.ExchangePrices.AvailableToLay.First().Size;
                        }

                        if (runner.LastPriceTraded != null)
                        {
                            market.LastPriceTraded = runner.LastPriceTraded;
                        }

                        market.SelectionId  = runner.SelectionId;
                        market.Handicap     = runner.Handicap;
                        market.BackLayRatio = avlToBack == 0 ? 0 : (avlToBack / avlToLay);
                        market.Price        = backPrice;
                        market.Order        = order;
                        market.Status       = "OPEN";
                        market.LayPrice     = layPrice;
                        market.BackPrice    = backPrice;
                        market.AvlToBack    = avlToBack;
                        market.AvlToLay     = avlToLay;
                        market.DateAdded    = DateTime.Now;
                        order++;

                        if (addToMulti) //less money available to back (more lay) so more people backing = good bet
                        {
                            if (backPrice > 0 && avlToBack > 0 && avlToBack < avlToLay)
                            {
                                marketList.Add(market);
                            }
                        }
                        else
                        {
                            marketList.Add(market);
                        }
                    }
                }
            }

            if (addToMulti)
            {
                multiBuilder.Markets   = marketList;
                multiBuilder.MultiName = DateTime.Now.ToString();
                multiBuilder.DateAdded = DateTime.Now;

                //log.LogInformation("");
                using (var db = new DataContext())
                {
                    db.Entry(multiBuilder).State = EntityState.Modified;
                    db.MultiBuilders.Add(multiBuilder);
                    db.SaveChanges();
                }
            }
            else
            {
                using (var db = new DataContext())
                {
                    multiBuilder.Markets = marketList;//for return TODO refactor
                    db.Markets.AddRange(marketList);
                    db.SaveChanges();
                }
            }

            return(multiBuilder);
        }