Пример #1
0
 public CargoRun(ref MarketData data, double capital,  double minVolume, double maxVolume, bool safeOnly)
 {
     TypeVolume = data.TypeVolume;
     Calculate(ref data, capital, minVolume, maxVolume, safeOnly);
 }
Пример #2
0
        MarketDataOrder GetSellOrder(ref MarketData data, double minVolume = 1, bool safeOnly = false)
        {
            var trueMin = minVolume * data.TypeVolume;

                try {
                    var sellOrders = from o in data.Orders
                                     from s in StaticDB.Instance.SolarSystems
                                     where o.Bid == false
                                     && s.solarSystemID == o.SolarSystemID
                                     && s.security >= (safeOnly ? 0.5 : -100.0)
                                     && o.VolumeRemaining >= trueMin
                                     select o;
                    if (sellOrders.Count() == 0)
                        return null;
                    var sellOrder = sellOrders.FirstOrDefault();
                    foreach (var order in sellOrders)
                    {
                        if (order.Price < sellOrder.Price)
                            sellOrder = order;
                    }
                    return sellOrder;
                }
                finally
                {

                }
        }
Пример #3
0
        void Calculate(ref MarketData data, double capital, double minVolume, double maxVolume, bool safeOnly)
        {
            var trueMax = maxVolume / TypeVolume;
            var trueMin = minVolume / TypeVolume;

            var sellOrders = (from o in data.Orders
                             from s in StaticDB.Instance.SolarSystems
                             where o.Bid == false
                             && s.solarSystemID == o.SolarSystemID
                             && s.security >= (safeOnly ? 0.5 : -100.0)
                             && o.VolumeRemaining >= trueMin
                             select o);

            var buyOrders = from o in data.Orders
                            from s in StaticDB.Instance.SolarSystems
                            where o.Bid == true
                            && s.solarSystemID == o.SolarSystemID
                            && s.security >= (safeOnly ? 0.5 : -100.0)
                            && o.VolumeRemaining >= trueMin
                            select o;

            var profitable = (from s in sellOrders
                              from b in buyOrders
                              where s.Price < b.Price
                              let sellVolume = s.VolumeRemaining >= trueMax ? trueMax : s.VolumeRemaining
                              let buyVolume = sellVolume > b.VolumeRemaining ? b.VolumeRemaining : sellVolume
                              let volume = buyVolume > trueMax ? trueMax : buyVolume
                              let buyPrice = s.Price * volume
                              let sellPrice = b.Price * volume
                              let p = sellPrice - buyPrice
                              select new { sell = s, buy = b, profit = p })
                              .OrderByDescending(p => p.profit);

            var best = profitable.FirstOrDefault();
            if(best != null)
            {
                var v = (best.sell.VolumeRemaining > trueMax) ? trueMax : best.sell.VolumeRemaining;
                v = (v <= (capital / best.sell.Price)) ? v : (capital / best.sell.Price);
                Volume = (int)v;
                Cost = Volume * best.sell.Price;
                SellOrder = best.sell;
                BuyOrder = best.buy;
                var jumps = GetJumps(safeOnly);
                if (!HighRisk)
                {
                    foreach (var jump in jumps)
                    {
                        if (jump.security < 0.5)
                            HighRisk = true;
                    }
                }

                Jumps = jumps.Count();
                Waypoints = jumps;

                Volume = (int)((best.buy.VolumeRemaining > Volume) ? Volume : best.buy.VolumeRemaining);
                Profit = (best.buy.Price - best.sell.Price) * Volume;
                Profit = Profit - (Profit * 0.015);
                TypeName = data.TypeName;
                TypeID = data.TypeID;
            }
        }
Пример #4
0
        MarketDataOrder GetBuyOrder(ref MarketData data, double volume = 1, bool safeOnly = false)
        {
            try {
                    var buyOrders = from o in data.Orders
                                    from s in StaticDB.Instance.SolarSystems
                                    where o.Bid == true
                                    && s.solarSystemID == o.SolarSystemID
                                    && s.security >= (safeOnly ? 0.5 : -100.0)
                                    && o.VolumeRemaining >= volume
                                    select o;
                    if (buyOrders.Count() == 0)
                        return null;
                    var buyOrder = buyOrders.FirstOrDefault();
                    foreach (var order in buyOrders)
                    {
                        if (order.Price > buyOrder.Price)
                            buyOrder = order;
                    }
                    return buyOrder;
                }
                finally
                {

                }
        }
Пример #5
0
        private void Watcher_Created(object sender, FileSystemEventArgs e)
        {
            Thread.Sleep(100);
            MarketData data = new MarketData();

                data.Parse(e.FullPath);

            var path = e.FullPath;

            List<MarketData> markedForRemoval = new List<MarketData>();
            lock (mutex)
            {
                foreach (var md in Market)
                {
                    if (md.RegionName == data.RegionName && md.TypeName == data.TypeName && md.Date < data.Date)
                    {
                        markedForRemoval.Add(md);
                    }
                }
                foreach(var m in markedForRemoval)
                {
                    Market.Remove(m);
                }
                Market.Add(data);
                cache = null;
            }
            File.Delete(path);
        }