public IEnumerable <ISecurityStaticDataModel> GetAllExistingStaticData()
        {
            _logger.Information($"PersistenceManager: retrieving All existing security static data.");

            string commandString = "select ed.Name ExchangeName, sd.Name SecurityName, sd.Symbol, sd.ExchangeId from SecurityDetails sd\n" +
                                   "join ExchangeDetails ed on ed.Id = sd.ExchangeId";

            var securityStaticDataCollection = new List <ISecurityStaticDataModel>();

            using (IMySqlCommandWrapper commandWrapper = _commandWrapperFactory.GetCommandWrapper(commandString, _connectionWrapper))
            {
                lock (_lockObject)
                {
                    using (IMySqlDataReaderWrapper dataReader = commandWrapper.ExecuteReader())
                    {
                        while (dataReader.ReadNext())
                        {
                            string exchangeName = dataReader.GetField <string>("ExchangeName");
                            var    exchangeData = new ExchangeStaticDataModel(exchangeName);

                            string securityName = dataReader.GetField <string>("SecurityName");
                            string symbol       = dataReader.GetField <string>("Symbol");
                            var    securityData = new SecurityStaticDataModel(exchangeData, symbol, securityName);

                            securityStaticDataCollection.Add(securityData);
                        }
                    }
                }
            }

            return(securityStaticDataCollection);
        }
        public DateTime GetLatestStockDateStamp(string symbol)
        {
            _logger.Information($"PersistenceManager: retrieving latest stock data timestamp for symbol: {symbol}");

            int?securityId = GetSecurityIdBySymbol(symbol);

            if (!securityId.HasValue)
            {
                throw new ArgumentException($"Security not found for symbol: {symbol}");
            }

            string commandString = "SELECT DateStamp FROM EndOfDayData WHERE SecurityId = @SecurityId ORDER BY DateStamp DESC LIMIT 1;";

            using (IMySqlCommandWrapper commandWrapper = _commandWrapperFactory.GetCommandWrapper(commandString, _connectionWrapper))
            {
                commandWrapper.AddParameter("@SecurityId", securityId.Value);

                lock (_lockObject)
                {
                    using (IMySqlDataReaderWrapper dataReader = commandWrapper.ExecuteReader())
                    {
                        if (!dataReader.HasRows || !dataReader.ReadNext())
                        {
                            return(new DateTime(1950, 01, 01));
                        }

                        return(dataReader.GetField <DateTime>("DateStamp"));
                    }
                }
            }
        }
コード例 #3
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 IStockDataModel GetStockData(IMySqlDataReaderWrapper dataReader)
        {
            string   symbol                   = dataReader.GetField <string>("symbol");
            DateTime dateStamp                = dataReader.GetField <DateTime>("DateStamp");
            decimal  open                     = (decimal)dataReader.GetField <Single>("Open");
            decimal  high                     = (decimal)dataReader.GetField <Single>("High");
            decimal  low                      = (decimal)dataReader.GetField <Single>("Low");
            decimal  close                    = (decimal)dataReader.GetField <Single>("Close");
            decimal  adjustedClose            = (decimal)dataReader.GetField <Single>("AdjustedClose");
            long     volume                   = dataReader.GetField <long>("Volume");
            decimal  dayChange                = (decimal)dataReader.GetField <Single>("DayChange");
            decimal  dayPercentageChange      = (decimal)dataReader.GetField <Single>("DayPercentageChange");
            decimal  standardChange           = (decimal)dataReader.GetField <Single>("StandardChange");
            decimal  standardPercentageChange = (decimal)dataReader.GetField <Single>("StandardPercentageChange");

            var stockData = new StockDataModel(symbol, dateStamp, open, high, low, close, volume, adjustedClose, dayChange, dayPercentageChange, standardChange, standardPercentageChange);

            return(stockData);
        }
        public bool DoesSecurityStaticDataExist(ISecurityStaticDataModel securityStaticData)
        {
            _logger.Information($"PersistenceManager: Checking for the existence of security data: {securityStaticData.Symbol}");

            string commandString = "SELECT * FROM SecurityDetails WHERE Symbol = @Symbol;";

            using (IMySqlCommandWrapper commandWrapper = _commandWrapperFactory.GetCommandWrapper(commandString, _connectionWrapper))
            {
                commandWrapper.AddParameter("@Symbol", securityStaticData.Symbol);

                lock (_lockObject)
                {
                    using (IMySqlDataReaderWrapper dataReader = commandWrapper.ExecuteReader())
                    {
                        string existenceLog = dataReader.HasRows ? "exists" : "does not exist";
                        _logger.Information($"PersistenceManager: Security static data {securityStaticData.Symbol} {existenceLog}");

                        return(dataReader.HasRows);
                    }
                }
            }
        }
        private int?GetSecurityIdBySymbol(string symbol)
        {
            string commandString = "SELECT Id FROM SecurityDetails WHERE Symbol = @Symbol;";

            using (IMySqlCommandWrapper commandWrapper = _commandWrapperFactory.GetCommandWrapper(commandString, _connectionWrapper))
            {
                commandWrapper.AddParameter("@Symbol", symbol);

                lock (_lockObject)
                {
                    using (IMySqlDataReaderWrapper dataReader = commandWrapper.ExecuteReader())
                    {
                        if (!dataReader.HasRows || !dataReader.ReadNext())
                        {
                            return(null);
                        }

                        return(dataReader.GetField <int?>("Id"));
                    }
                }
            }
        }
        private int?GetExchangeIdByName(string name)
        {
            string commandString = "SELECT Id FROM ExchangeDetails WHERE Name = @ExchangeName;";

            using (IMySqlCommandWrapper commandWrapper = _commandWrapperFactory.GetCommandWrapper(commandString, _connectionWrapper))
            {
                commandWrapper.AddParameter("@ExchangeName", name);

                lock (_lockObject)
                {
                    using (IMySqlDataReaderWrapper dataReader = commandWrapper.ExecuteReader())
                    {
                        if (!dataReader.HasRows || !dataReader.ReadNext())
                        {
                            return(null);
                        }

                        return(dataReader.GetField <int?>("Id"));
                    }
                }
            }
        }