public void DeleteMarket(string marketNameOrId)
        {
            var manager = EconomyPlugin.GetManager <MarketManager>();

            manager.GetMarkets()
            .Then(markets =>
            {
                MarketDataObject market = null;
                if (long.TryParse(marketNameOrId, out var marketId))
                {
                    market = markets.FirstOrDefault(m => m.Id == marketId);
                }
                else
                {
                    market = markets.FirstOrDefault(m =>
                                                    m.Name.Equals(marketNameOrId, StringComparison.InvariantCultureIgnoreCase));
                }

                if (market == null)
                {
                    Context.Respond($"Unable to find market by name or id of '{marketNameOrId}'.");
                    return;
                }

                manager.DeleteMarket(market.Id)
                .Then(() => { Context.Respond($"Successfully deleted Mrkt#{market.Id}."); });
            }).Catch(HandleError);
        }
        private void UpdateOrderPrice(BuyOrderType orderType, string marketNameOrId, string itemName, decimal newPrice)
        {
            var character = Context.Player.Character;

            if (character == null)
            {
                Context.Respond("You cannot do this while dead.");
                return;
            }

            if (!DefinitionResolver.TryGetDefinitionByName(itemName, out var itemDefinition))
            {
                Context.Respond($"Unable to find an item by the name of {itemName}");
                return;
            }

            if (newPrice < new decimal(0.01))
            {
                Context.Respond($"{newPrice} is too small. Please use a higher value.");
                return;
            }

            var manager      = EconomyPlugin.GetManager <MarketManager>();
            var orderManager = EconomyPlugin.GetManager <MarketOrderManager>();

            manager.GetMarkets()
            .Then(markets =>
            {
                MarketDataObject market = null;
                if (long.TryParse(marketNameOrId, out var marketId))
                {
                    market = markets.FirstOrDefault(m => m.Id == marketId);
                }
                else
                {
                    market = markets.FirstOrDefault(m =>
                                                    m.Name.Equals(marketNameOrId, StringComparison.InvariantCultureIgnoreCase));
                }

                if (market == null)
                {
                    Context.Respond($"Unable to find market by name or id of '{marketNameOrId}'.");
                    return;
                }

                orderManager.GetMarketOrder(orderType, market.Id, itemDefinition.Id)
                .Then(order =>
                {
                    orderManager.UpdateOrderPrice(order.Id, newPrice)
                    .Then(() => Context.Respond(
                              $"Successfully updated Order#{order.Id}'s price to {Utilities.FriendlyFormatCurrency(newPrice)}."))
                    .Catch(HandleError);
                })
                .Catch(HandleError);
            })
            .Catch(HandleError);
        }
        private MyGps CreateGPS(MarketDataObject market, Vector3D position)
        {
            var gps = new MyGps();

            gps.Coords         = position;
            gps.Name           = $"(Market) {market.Name}";
            gps.DisplayName    = $"(Market) {market.Name}";
            gps.GPSColor       = new Color(0, 275, 275);
            gps.IsContainerGPS = true;
            gps.ShowOnHud      = true;
            gps.DiscardAt      = new TimeSpan?();
            gps.UpdateHash();

            return(gps);
        }
 /// <summary>
 /// Called when a publisher has committed an event to the <see cref="T:Disruptor.RingBuffer`1"/>
 /// </summary>
 /// <param name="data">Data committed to the <see cref="T:Disruptor.RingBuffer`1"/></param><param name="sequence">Sequence number committed to the <see cref="T:Disruptor.RingBuffer`1"/></param><param name="endOfBatch">flag to indicate if this is the last event in a batch from the <see cref="T:Disruptor.RingBuffer`1"/></param>
 public void OnNext(MarketDataObject data, long sequence, bool endOfBatch)
 {
     if (data.IsTick)
     {
         // Publish Tick if the subscription request is received
         if (TickSubscriptionList.Contains(data.Tick.Security.Symbol))
         {
             TickArrived(data.Tick);
         }
     }
     else
     {
         // Publish Bar if the subscription request is received
         if (BarSubscriptionList.Contains(data.Bar.Security.Symbol))
         {
             BarArrived(data.Bar);
         }
     }
 }
Beispiel #5
0
        /// <summary>
        /// Reading Data From ReadMarketData class.
        /// </summary>
        /// <param name="request"></param>
        public virtual void ReadData(BarDataRequest request)
        {
            try
            {
                IEnumerable <Bar> barlist = _readMarketData.ReadBars(_startDate, _endDate, _providerName, request);

                #region Send Required Info

                foreach (var bar in barlist)
                {
                    // Update time
                    DateTime time = bar.DateTime.AddMinutes(-1);

                    for (int i = 0; i < 4; i++)
                    {
                        //Create Object to be disptched
                        MarketDataObject marketDataObjectTick = new MarketDataObject();

                        // Create a new tick object
                        Tick tick = new Tick(bar.Security, MarketDataProvider.SimulatedExchange)
                        {
                            // Add Last Price to new Tick instance
                            LastPrice = GetRequiredPrice(i, bar),
                            // Add Size
                            LastSize = 100,
                            // Set updated time
                            DateTime = time.AddSeconds((i + 1) * 14)
                        };

                        // Add Values to the object to be dispatched
                        marketDataObjectTick.IsTick = true;
                        marketDataObjectTick.Tick   = tick;

                        // Raise event to notify listeners
                        _publisher.PublishEvent((entry, sequenceNo) =>
                        {
                            entry.IsTick = marketDataObjectTick.IsTick;
                            entry.Tick   = marketDataObjectTick.Tick;
                            return(entry);
                        });

                        //if (TickFired != null)
                        //{
                        //    TickFired.Invoke(tick);
                        //}
                    }

                    //Create Object to be disptched
                    MarketDataObject marketDataObjectBar = new MarketDataObject();
                    marketDataObjectBar.Bar = bar;

                    _publisher.PublishEvent((entry, sequenceNo) =>
                    {
                        entry.Bar = marketDataObjectBar.Bar;
                        return(entry);
                    });

                    //if (BarFired != null)
                    //{
                    //    BarFired.Invoke(bar, request.Id);
                    //}
                }

                #endregion

                //EventSystem.Publish<string>("DataCompleted," + request.Security.Symbol);
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _type.FullName, "ReadData");
            }
        }
Beispiel #6
0
        /// <summary>
        /// Reads data for required symbol from stored files
        /// </summary>
        /// <param name="subscribe">Contains Symbol info</param>
        public virtual void ReadData(Subscribe subscribe)
        {
            try
            {
                // Get all available Bars
                var barlist = _readMarketData.ReadBars(_startDate, _endDate, _providerName, subscribe);

                #region Send Required Info

                foreach (var bar in barlist)
                {
                    // Update time
                    DateTime time = bar.DateTime.AddMinutes(-1);

                    for (int i = 0; i < 4; i++)
                    {
                        //Create Object to be disptched
                        MarketDataObject marketDataObjectTick = new MarketDataObject();

                        // Create a new tick object
                        Tick tick = new Tick(bar.Security, MarketDataProvider.SimulatedExchange)
                        {
                            // Add Last Price to new Tick instance
                            LastPrice = GetRequiredPrice(i, bar),
                            // Add Size
                            LastSize = 100,
                            // Set updated time
                            DateTime = time.AddSeconds((i + 1) * 14)
                        };

                        // Add Values to the object to be dispatched
                        marketDataObjectTick.IsTick = true;
                        marketDataObjectTick.Tick   = tick;

                        // Raise event to notify listeners
                        _publisher.PublishEvent((entry, sequenceNo) =>
                        {
                            entry.IsTick = marketDataObjectTick.IsTick;
                            entry.Tick   = marketDataObjectTick.Tick;
                            return(entry);
                        });
                    }

                    //Create Object to be disptched
                    MarketDataObject marketDataObjectBar = new MarketDataObject();
                    marketDataObjectBar.Bar = bar;
                    //TODO: Valid request ID needs to be added
                    marketDataObjectBar.Bar.RequestId = "";

                    _publisher.PublishEvent((entry, sequenceNo) =>
                    {
                        entry.Bar = marketDataObjectBar.Bar;
                        return(entry);
                    });
                }

                #endregion
            }
            catch (Exception exception)
            {
                _classLogger.Error(exception, _type.FullName, "ReadData - Subscribe");
            }
        }
        public Promise GenerateNPCOrders(NPCDataObject npc, MarketDataObject market)
        {
            return(new Promise((resolve, reject) =>
            {
                decimal marginFlux = 0;
                var items = _simulationProvider.GetUniversalItems(npc.IndustryType);

                switch (npc.IndustryType)
                {
                case IndustryTypeEnum.Industrial:
                    // Industrial buys industrial trade goods at a high price.
                    // Industrial buys ore at a moderate price.
                    // Industrial sells ingots at a low price.
                    marginFlux = new decimal(0.04);
                    break;

                case IndustryTypeEnum.Consumer:
                    // Consumer buys ingots at a high price.
                    // Consumer sells components at a low price.
                    marginFlux = new decimal(0.08);
                    break;

                case IndustryTypeEnum.Research:
                    // Research buys components at a high price.
                    // Research sells research trade goods at a low price.
                    marginFlux = new decimal(0.12);
                    break;

                case IndustryTypeEnum.Military:
                    // Military buys research trade goods at a high price.
                    // Military sells industrial trade goods & ammo at a low price.
                    marginFlux = new decimal(0.16);
                    break;
                }

                var orderManager = EconomyPlugin.GetManager <MarketOrderManager>();
                var npcOrders = new List <NPCMarketOrder>();
                var random = new Random();
                foreach (var item in items)
                {
                    if (MarketConfig.Blacklist.Any(b => b.Value == item.Definition.Id.ToString()))
                    {
                        continue; // This entry is blacklisted.
                    }
                    var affinity = item.IndustryAffinities[npc.IndustryType];
                    var minMarginFlux = (double)((marginFlux / 2m) * -1m);
                    var maxMarginFlux = (double)marginFlux;
                    var orderMarginFlux = random.NextRange(minMarginFlux, maxMarginFlux);

                    var order = new NPCMarketOrder
                    {
                        DesiredStock = 10000,
                        Definition = item.Definition,
                        MarketId = market.Id,
                        MarginFlux = new decimal(orderMarginFlux),
                        DemandMultiplier = 1
                    };

                    var orderType = affinity == MarketAffinity.AmbivalentBuy ||
                                    affinity == MarketAffinity.ExtremeBuy ||
                                    affinity == MarketAffinity.Buy
                        ? BuyOrderType.Buy
                        : BuyOrderType.Sell;

                    var basePrice = _simulationProvider.GetUniversalItemValue(item.Definition.Id);
                    var price = basePrice;
                    if (orderType == BuyOrderType.Buy)
                    {
                        price = price * (1m + order.MarginFlux);
                    }
                    else
                    {
                        price = price * (1m - order.MarginFlux);
                    }

                    orderManager.UpdateOrAddMarketOrder(orderType, market.Id, item.Definition.Id,
                                                        price, -1)
                    .Then(newOrder => { order.OrderId = newOrder.Id; });
                    npcOrders.Add(order);
                }

                _npcMarketOrders[market.Id] = npcOrders;
                resolve();
            }));
        }
Beispiel #8
0
        /// <summary>
        /// Reading Data From ReadMarketData class.
        /// </summary>
        /// <param name="request"></param>
        public virtual List <MarketDataObject> ReadData(BarDataRequest request, bool result)
        {
            List <MarketDataObject> marketDataObjects = new List <MarketDataObject>();

            try
            {
                IEnumerable <Bar> barlist = _readMarketData.ReadBars(_startDate, _endDate, _providerName, request);
                #region Send Required Info

                foreach (var bar in barlist)
                {
                    // Update time
                    DateTime time = bar.DateTime.AddMinutes(-1);

                    for (int i = 0; i < 4; i++)
                    {
                        MarketDataObject obj = new MarketDataObject();
                        // Update Security value
                        obj.Tick.Security = new Security()
                        {
                            Symbol = bar.Security.Symbol
                        };
                        // Update Market Data Provider value
                        obj.Tick.MarketDataProvider = MarketDataProvider.SimulatedExchange;
                        // Update Last Price Value
                        obj.Tick.LastPrice = GetRequiredPrice(i, bar);
                        // Update Size
                        obj.Tick.LastSize = 100;
                        // Set updated time
                        obj.Tick.DateTime = time.AddSeconds((i + 1) * 14);
                        obj.IsTick        = true;
                        marketDataObjects.Add(obj);
                    }
                    MarketDataObject obj1 = new MarketDataObject();
                    obj1.Bar    = bar;
                    obj1.IsTick = false;
                    marketDataObjects.Add(obj1);
                }

                Bar entry = new Bar(request.Id);
                entry.Open  = -1;
                entry.High  = -1;
                entry.Low   = -1;
                entry.Close = -1;

                entry.RequestId = request.Id;
                //entry.Bar.DateTime = bar.DateTime;
                entry.MarketDataProvider = MarketDataProvider.SimulatedExchange;
                entry.Security           = new Security()
                {
                    Symbol = request.Security.Symbol
                };
                MarketDataObject endbar = new MarketDataObject();
                endbar.Bar    = entry;
                endbar.IsTick = false;
                marketDataObjects.Add(endbar);
                #endregion
            }
            catch (Exception exception)
            {
                _classLogger.Error(exception, _type.FullName, "ReadData - BarDataRequest");
            }
            return(marketDataObjects);
        }