Example #1
0
 public FirmData(IDataContext dataContext, IMarketDataProvider marketDataProvider, ITradeFactory tradeFactory)
 {
     this._marketDataProvider = marketDataProvider;
     this._tradeFactory       = tradeFactory;
     this._summary            = new DataTable
     {
         TableName = nameof(FirmData),
         Columns   =
         {
             { "PortfolioId",   typeof(string)  },
             { "PortfolioName", typeof(string)  },
             { "Pnl",           typeof(decimal) }
         }
     };
     this._summary.PrimaryKey = new[] { this._summary.Columns[0] };
     this._tickers            = dataContext.Securities.Select(security => security.Ticker).OrderBy(ticker => ticker).ToArray();
     foreach (Portfolio portfolio in dataContext.Portfolios.OrderBy(portfolio => portfolio.Id))
     {
         PortfolioData portfolioData = new PortfolioData(portfolio, dataContext);
         decimal       portfolioPnl  = 0m;
         decimal[]     pnl           = new decimal[this._tickers.Length];
         DataTable     dataTable     = portfolioData.GetData();
         for (int index = 0; index < this._tickers.Length; index++)
         {
             string  ticker  = this._tickers[index];
             DataRow dataRow = dataTable.Rows.Find(ticker);
             if (dataRow == null)
             {
                 continue;
             }
             portfolioPnl += (pnl[index] = dataRow.Field <decimal>("Pnl"));
         }
         DataRow summaryRow = this._summary.NewRow();
         summaryRow.SetField("PortfolioId", portfolio.Id);
         summaryRow.SetField("PortfolioName", portfolio.Name);
         summaryRow.SetField("Pnl", portfolioPnl);
         this._summary.Rows.Add(summaryRow);
         this._pnls.Add(portfolio.Id, pnl);
         portfolioData.DataChanged += this.PortfolioData_DataChanged;
         this._portfolios.Add(portfolioData);
     }
     this._tradeFactory.TradesCreated       += this.TradeFactory_TradesCreated;
     this._marketDataProvider.PricesChanged += this.MarketDataProvider_PricesChanged;
     this._timer = new Timer(this.Timer_Elapsed, null, 5000, 4000);
 }