예제 #1
0
        public override IEnumerable <AlertDTO> Compute(IEnumerable <BidEntry> orders, ApiConfiguration config)
        {
            var foundOrders          = new List <AlertDTO>();
            var aliveOrders          = orders.Where(o => o.Alive).ToList();
            var threshold            = aliveOrders.Sum(o => o.AcceptedSpeed) * config.AcceptedPercentThreshold;
            var orderedOrders        = aliveOrders.OrderByDescending(o => o.Price).ToList();
            var currentAcceptedSpeed = 0d;

            BidEntry benchmarkOrder = null;

            foreach (var order in orderedOrders)
            {
                if (currentAcceptedSpeed + order.AcceptedSpeed >= threshold)
                {
                    benchmarkOrder = order;
                    break;
                }

                currentAcceptedSpeed += order.AcceptedSpeed;
            }

            if (benchmarkOrder == null)
            {
                return(foundOrders);
            }

            foreach (var order in aliveOrders)
            {
                if (order.Price >= benchmarkOrder.Price &&
                    (order.LimitSpeed == 0 || order.LimitSpeed >= config.LimitSpeed) &&
                    order.AcceptedSpeed >= config.MinimalAcceptedSpeed
                    )
                {
                    var    sig = CreateSignSignature(order);
                    string conditon;
                    string message;

                    if (!PercentageTrack.Contains(sig))
                    {
                        PercentageTrack.ConditionEnqueue(sig);

                        conditon = $"Condition: " +
                                   $"Order Alive ({order.Alive}) AND " +
                                   $"Order Price ({order.Price}) above '{benchmarkOrder.Price}' benchmark Order Price (ID: {benchmarkOrder.NiceHashId}) AND " +
                                   $"(Order Speed Limit ({order.LimitSpeed}) = 0 OR Order Speed Limit ({order.LimitSpeed}) >= '{config.LimitSpeed}') AND " +
                                   $"Order Accepted Speed ({order.AcceptedSpeed}) >= {config.MinimalAcceptedSpeed}. ";
                        message = $"SUSPICIOUS BID Percentage ALERT - an attack may be about to begin. {CreateMessage(order)}. ";
                    }
                    else
                    {
                        conditon = string.Empty;
                        message  = $"SUSPICIOUS BID Progress - {CreateMessageForProgress(order)}. ";
                    }

                    foundOrders.Add(new AlertDTO()
                    {
                        BidEntry  = order,
                        Condition = conditon,
                        Message   = message
                    });
                }
            }

            return(foundOrders);
        }
예제 #2
0
        protected string CreateMessage(BidEntry order)
        {
            var speedLimit = order.LimitSpeed == 0 ? "NO" : order.LimitSpeed.ToString(CultureInfo.InvariantCulture);

            return($"{CreateShortIsProfitableMessage(order.Price)} {order.AcceptedSpeed} MSol DELIVERED AT {order.RecordDate:G} WITH {speedLimit} LIMIT, PAYING {order.Price} ON ORDER ID {order.NiceHashId} AT {_locationDict[order.NiceHashDataCenter]} SERVER");
        }
예제 #3
0
 protected string CreateMessageForProgress(BidEntry order)
 {
     return($"{order.AcceptedSpeed} MSol DELIVERED, ID {order.NiceHashId} AT {_locationDict[order.NiceHashDataCenter]} SERVER");
 }
예제 #4
0
 protected string CreateSignSignature(BidEntry entry)
 {
     return($"{entry.NiceHashId}{entry.NiceHashDataCenter}");
 }