public void InsertEndOfDayData(IEnumerable <IStockDataModel> stockDataCollection, VendorDetails vendorDetails) { IStockDataModel stockData = stockDataCollection.First(); _logger.Information($"PersistenceManager: Inserting stock data for {stockData.Symbol}"); int?securityId = GetSecurityIdBySymbol(stockData.Symbol); if (!securityId.HasValue) { throw new ArgumentException($"Attempting to insert stock data for {stockData.Symbol} which doesn't exist."); } var commandStringBuilder = new StringBuilder("INSERT INTO EndOfDayData(SecurityId, VendorId, Open, High, Low, Close, AdjustedClose, Volume, DayChange, DayPercentageChange, StandardChange, StandardPercentageChange, DateStamp) Values"); foreach (IStockDataModel data in stockDataCollection) { string standardChange = data.StandardChange.HasValue ? data.StandardChange.ToString() : "NULL"; string standardChangePercentage = data.StandardPercentageChange.HasValue ? data.StandardPercentageChange.ToString() : "NULL"; commandStringBuilder.Append($"({securityId.Value}, {(int)vendorDetails}, {data.Open}, {data.High}, {data.Low}, {data.Close}, {data.AdjustedClose}, {data.Volume}, {data.DayChange}, {data.DayPercentageChange}, {standardChange}, {standardChangePercentage}, '{data.TimeStamp.Date.ToString("yyyy-MM-dd")}'),\n"); } int rowCount = stockDataCollection.Count(); _logger.Information($"PersistenceManager: Persisting {rowCount} rows for {stockData.Symbol}"); commandStringBuilder.Length -= 2; ExecuteNoReadQuery(commandStringBuilder.ToString(), rowCount, new Dictionary <string, object>()); }
public IEnumerable <IStockDataModel> GetSecurityData(IEnumerable <string> symbolCollection, DateTime startDateStamp, DateTime endDateStamp) { StringBuilder stringBuilder = new StringBuilder("WHERE sd.symbol IN ("); foreach (string symbol in symbolCollection) { stringBuilder.Append($"'{symbol}',"); } stringBuilder.Length--; stringBuilder.Append(")"); string symolFilter = stringBuilder.ToString(); string command = @"select sd.symbol, eod.Open, eod.High, eod.Low, eod.Close, eod.AdjustedClose, eod.Volume, eod.DayChange, eod.DayPercentageChange, eod.StandardChange, eod.StandardPercentageChange, eod.DateStamp from endofdaydata eod join securitydetails sd on sd.Id = eod.SecurityId " + symolFilter + Environment.NewLine + $"and eod.DateStamp >= '{startDateStamp.ToString("yyyy-MM-dd")}' and eod.DateStamp <= '{endDateStamp.ToString("yyyy-MM-dd")}'" + Environment.NewLine + "order by eod.DateStamp ASC;"; var stockDataCollection = new List <IStockDataModel>(); using (IMySqlCommandWrapper commandWrapper = _commandWrapperFactory.GetCommandWrapper(command, _connectionWrapper)) { lock (_lockObject) { using (IMySqlDataReaderWrapper dataReader = commandWrapper.ExecuteReader()) { if (!dataReader.HasRows) { return(stockDataCollection); } while (dataReader.ReadNext()) { IStockDataModel stockData = _securityDataSqlFactory.GetStockData(dataReader); stockDataCollection.Add(stockData); } } } } return(stockDataCollection); }
public void UpdateHolding(IStockDataModel stockData) { AccountHoldings[stockData.Symbol].CurrentPrice = stockData.Open; }