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); } } }
/// <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"); } }
/// <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(); })); }
/// <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); }