public static void AddPosition(QuikConnectionManager.Position obj) { if (!Positions.Any(k => k.AccountName == obj.AccountName && k.Instrument.Code == obj.SecurityCode)) { Entities.Instrument instr; if (obj.AccountName == "FOUXK_001") { Console.Write("fnfyng"); } try { instr = Instruments.First(k => k.Code == obj.SecurityCode); var pos = new Entities.Position(obj.AccountName, instr, obj.TotalNet, obj.BuyQty, obj.SellQty, obj.VarMargin); Positions.Add(pos); log.Info("New position added. SecCode={0} Account={1}", obj.SecurityCode, obj.AccountName); if (pos.Instrument.Type == Entities.InstrumentType.Futures) { if (Portfolios.Any(k => k.BaseCode == pos.Instrument.Code && k.Account == pos.AccountName)) { Portfolios.First(k => k.BaseCode == pos.Instrument.Code && k.Account == pos.AccountName).Positions.Add(pos); log.Info("Futures Position added to existing portfolio."); } else { // create new portfolio Entities.Portfolio port = new Entities.Portfolio(pos.Instrument.Code, pos.AccountName); port.Positions.Add(pos); Portfolios.Add(port); log.Info("New portfolio created. Name={0} Base={1} Account={2}", port.Name, port.BaseCode, port.Account); } } else if (pos.Instrument.Type == Entities.InstrumentType.Option) { if (Portfolios.Any(k => k.BaseCode == pos.Instrument.BaseContract && k.Account == pos.AccountName)) { Portfolios.First(k => k.BaseCode == pos.Instrument.BaseContract && k.Account == pos.AccountName).Positions.Add(pos); log.Info("Option Position added to existing portfolio."); } else { // create new portfolio Entities.Portfolio port = new Entities.Portfolio(pos.Instrument.BaseContract, pos.AccountName); port.Positions.Add(pos); Portfolios.Add(port); log.Info("New portfolio created. Name={0} Base={1} Account={2}", port.Name, port.BaseCode, port.Account); } } } catch (SystemException exep) { log.Error("Try to add position for unknown instrument {0} {1} {2}", obj.SecurityCode, obj.AccountName, obj.TotalNet); log.Error(exep.Message); } } else { log.Warn("Try to add existing position. {0} {1}", obj.AccountName, obj.SecurityCode); } }
public static void UpdateInstrument(QuikConnectionManager.DynamicInstrument obj) { try { var i = Instruments.First(k => k.Id == obj.Id); i.Update(obj.LastPrice, obj.Volatility, obj.TheorPrice, 0, obj.Ask, obj.AskVol, obj.Bid, obj.BidVol); if (i.Type == Entities.InstrumentType.Futures) { foreach (Entities.Instrument ins in Instruments) { if (ins.BaseContract == i.Code) { ins.SettlePrice = i.LastPrice; } } } if (Portfolios.Any(k => k.BaseCode == i.Code)) { foreach (Entities.Portfolio p in Portfolios.Where(k => k.BaseCode == i.Code)) { p.Refresh(); } } //i.LastPrice = obj.LastPrice; //i.Volatility = obj.Volatility; //i.TheorPrice = obj.TheorPrice; //i.BestAsk = obj.Ask; //i.BestAskVolume = obj.AskVol; //i.BestBid = obj.Bid; //i.BestBidVolume = obj.BidVol; } catch (SystemException e) { log.Error("Update for unknown instrument Id={0}", obj.Id); } }
// Do this check on CRUD operations. Do not allow portfolioId modification if the current user does not have it. public bool HasPortfolio(int portfolioId) { return(Portfolios.Any(x => x.PortfolioId == portfolioId)); }