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>());
        }
Exemplo n.º 2
0
        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;
 }