Example #1
0
        private void FlippFound(FlipInstance flip)
        {
            MessageData message = CreateDataFromFlip(flip);

            NotifyAll(message, Subs);
            SlowFlips.Enqueue(flip);

            Flipps.Enqueue(flip);
            FlipIdLookup[flip.UId] = true;
            if (Flipps.Count > 1200)
            {
                if (Flipps.TryDequeue(out FlipInstance result))
                {
                    FlipIdLookup.Remove(result.UId, out bool value);
                }
            }
        }
Example #2
0
 private static MessageData CreateDataFromFlip(FlipInstance flip)
 {
     return(new MessageData("flip", JSON.Stringify(flip), 60));
 }
Example #3
0
        public async System.Threading.Tasks.Task NewAuction(SaveAuction auction, HypixelContext context)
        {
            if (!Program.Migrated)
            {
                if (auction.UId % 20 == 0) // don't spam the log
                {
                    Console.WriteLine("not yet migrated skiping flip");
                }
                return;
            }
            if (diabled && auction.UId % 5 != 0)
            {
                return; // don't run on full cap on my dev machine :D
            }
            var price = (auction.HighestBidAmount == 0 ? auction.StartingBid : (auction.HighestBidAmount * 1.1)) / auction.Count;

            // if(auction.Enchantments.Count == 0 && auction.Reforge == ItemReferences.Reforge.None)
            //    Console.WriteLine("easy item");

            var(relevantAuctions, oldest) = await GetRelevantAuctions(auction, context);

            long medianPrice = 0;

            if (relevantAuctions.Count < 2)
            {
                Console.WriteLine($"Could not find enough relevant auctions for {auction.ItemName} {auction.Uuid} ({auction.Enchantments.Count} {relevantAuctions.Count})");
                var itemId = ItemDetails.Instance.GetItemIdForName(auction.Tag, false);
                medianPrice = (long)(await ItemPrices.GetLookupForToday(itemId)).Prices.Average(p => p.Avg * 0.8 + p.Min * 0.2);
            }
            else
            {
                medianPrice = relevantAuctions
                              .OrderByDescending(a => a.HighestBidAmount)
                              .Select(a => a.HighestBidAmount / a.Count)
                              .Skip(relevantAuctions.Count / 2)
                              .FirstOrDefault();
            }



            var recomendedBuyUnder = medianPrice * 0.8;

            if (price > recomendedBuyUnder) // at least 20% profit
            {
                return;                     // not a good flip
            }

            relevantAuctionIds[auction.UId] = relevantAuctions.Select(a => a.UId == 0 ? AuctionService.Instance.GetId(a.Uuid) : a.UId).ToList();
            if (relevantAuctionIds.Count > 10000)
            {
                relevantAuctionIds.Clear();
            }
            var query = new ActiveItemSearchQuery()
            {
                Order  = SortOrder.LOWEST_PRICE,
                Limit  = 1,
                Filter = new Dictionary <string, string>()
                {
                    { "Bin", "true" }
                },
                name = auction.Tag
            };
            var lowestBin = Server.ExecuteCommandWithCache <ActiveItemSearchQuery, List <ItemPrices.AuctionPreview> >("activeAuctions", query);

            var flip = new FlipInstance()
            {
                MedianPrice   = (int)medianPrice,
                Name          = auction.ItemName,
                Uuid          = auction.Uuid,
                LastKnownCost = (int)price,
                Volume        = (float)(relevantAuctions.Count / (DateTime.Now - oldest).TotalDays),
                Tag           = auction.Tag,
                Bin           = auction.Bin,
                UId           = auction.UId,
                SellerName    = await PlayerSearch.Instance.GetNameWithCacheAsync(auction.AuctioneerId),
                LowestBin     = (await lowestBin).FirstOrDefault()?.Price
            };

            FlippFound(flip);
            if (auction.Uuid[0] == 'a') // reduce saves
            {
                await CacheService.Instance.SaveInRedis(FoundFlippsKey, Flipps);
            }
        }