Пример #1
0
        public void LoadFromFiles(string quoteDir)
        {
            foreach (var fileName in Directory.GetFiles(quoteDir, "*.quote"))
            {
                // получить название торгуемого актива
                var symbol = Path.GetFileNameWithoutExtension(fileName);
                if (string.IsNullOrEmpty(symbol))
                {
                    continue;
                }
                symbol = symbol.ToUpper();

                // прочитать файл
                List <CandleData> fileCandles;
                try
                {
                    fileCandles = CandleData.LoadFromFile(fileName, symbol);
                }
                catch (Exception ex)
                {
                    Logger.ErrorFormat("Ошибка в AtomCandleStorage.LoadFromFiles({0}): {1}",
                                       symbol, ex);
                    continue;
                }
                if (fileCandles == null || fileCandles.Count == 0)
                {
                    continue;
                }

                if (!locker.TryEnterWriteLock(LockTimeout))
                {
                    Logger.ErrorFormat("Ошибка в AtomCandleStorage.LoadFromFiles({0}): невозможно получить доступ на запись",
                                       symbol);
                    continue;
                }

                // записать в словарь
                try
                {
                    if (candles.ContainsKey(symbol))
                    {
                        candles [symbol] = new ThreadSafeCandleList(fileCandles);
                    }
                    else
                    {
                        candles.Add(symbol, new ThreadSafeCandleList(fileCandles));
                    }
                }
                finally
                {
                    locker.ExitWriteLock();
                }
            }
        }
Пример #2
0
        /*public DateTime? GetFirstGapTimeStart(string symbol, int candlesFromEnd = 1440 * 5)
         * {
         *  if (!locker.TryEnterReadLock(LockTimeout)) return null;
         *  try
         *  {
         *      ThreadSafeCandleList list;
         *      candles.TryGetValue(symbol, out list);
         *      if (list == null) return null;
         *      return list.GetFirstGapStartTime(candlesFromEnd);
         *  }
         *  finally
         *  {
         *      locker.ExitReadLock();
         *  }
         * }*/

        #endregion

        #region Закрытые методы

        private ThreadSafeCandleList EnsureList(string symbol)
        {
            if (!locker.TryEnterUpgradeableReadLock(LockTimeout))
            {
                logNoFlood.LogMessageFormatCheckFlood(LogEntryType.Error, LogMsgEnsureListReadTimout, 1000 * 60 * 15,
                                                      "AtomCandleStorage - EnsureList() read timeout");
                return(null);
            }
            try
            {
                ThreadSafeCandleList list;
                if (candles.TryGetValue(symbol, out list))
                {
                    return(list);
                }

                if (!locker.TryEnterWriteLock(LockTimeout))
                {
                    logNoFlood.LogMessageFormatCheckFlood(LogEntryType.Error, LogMsgEnsureListWriteTimout, 1000 * 60 * 15,
                                                          "AtomCandleStorage - EnsureList() write timeout");
                    return(null);
                }
                try
                {
                    list = new ThreadSafeCandleList();
                    candles.Add(symbol, list);
                    return(list);
                }
                finally
                {
                    locker.ExitWriteLock();
                }
            }
            finally
            {
                locker.ExitUpgradeableReadLock();
            }
        }
Пример #3
0
        private ThreadSafeCandleList EnsureList(string symbol)
        {
            if (!locker.TryEnterUpgradeableReadLock(LockTimeout))
            {
                logNoFlood.LogMessageFormatCheckFlood(LogEntryType.Error, LogMsgEnsureListReadTimout, 1000 * 60 * 15,
                    "AtomCandleStorage - EnsureList() read timeout");
                return null;
            }
            try
            {
                ThreadSafeCandleList list;
                if (candles.TryGetValue(symbol, out list)) return list;

                if (!locker.TryEnterWriteLock(LockTimeout))
                {
                    logNoFlood.LogMessageFormatCheckFlood(LogEntryType.Error, LogMsgEnsureListWriteTimout, 1000 * 60 * 15,
                        "AtomCandleStorage - EnsureList() write timeout");
                    return null;
                }
                try
                {
                    list = new ThreadSafeCandleList();
                    candles.Add(symbol, list);
                    return list;
                }
                finally
                {
                    locker.ExitWriteLock();
                }
            }
            finally
            {
                locker.ExitUpgradeableReadLock();
            }
        }
Пример #4
0
        public void LoadFromFiles(string quoteDir)
        {
            foreach (var fileName in Directory.GetFiles(quoteDir, "*.quote"))
            {
                // получить название торгуемого актива
                var symbol = Path.GetFileNameWithoutExtension(fileName);
                if (string.IsNullOrEmpty(symbol))
                    continue;
                symbol = symbol.ToUpper();

                // прочитать файл
                List<CandleData> fileCandles;
                try
                {
                    fileCandles = CandleData.LoadFromFile(fileName, symbol);
                }
                catch (Exception ex)
                {
                    Logger.ErrorFormat("Ошибка в AtomCandleStorage.LoadFromFiles({0}): {1}",
                        symbol, ex);
                    continue;
                }
                if (fileCandles == null || fileCandles.Count == 0) continue;

                if (!locker.TryEnterWriteLock(LockTimeout))
                {
                    Logger.ErrorFormat("Ошибка в AtomCandleStorage.LoadFromFiles({0}): невозможно получить доступ на запись",
                        symbol);
                    continue;
                }

                // записать в словарь
                try
                {
                    if (candles.ContainsKey(symbol))
                        candles [symbol] = new ThreadSafeCandleList(fileCandles);
                    else
                        candles.Add(symbol, new ThreadSafeCandleList(fileCandles));
                }
                finally
                {
                    locker.ExitWriteLock();
                }
            }
        }
Пример #5
0
        public Cortege2<DateTime, DateTime>? LoadFromFile(string quoteDir, string symbol)
        {
            if (string.IsNullOrEmpty(quoteDir))
                throw new ArgumentException("LoadFromFile - директория пуста", "quoteDir");
            if (string.IsNullOrEmpty(symbol))
                throw new ArgumentException("LoadFromFile - котировка не указана", "symbol");

            var fileName = quoteDir + "\\" + symbol + ".quote";
            if (!File.Exists(fileName)) return null;
            // прочитать файл
            List<CandleData> fileCandles;
            try
            {
                fileCandles = CandleData.LoadFromFile(fileName, symbol);
            }
            catch (Exception ex)
            {
                Logger.ErrorFormat("Ошибка в AtomCandleStorage.LoadFromFile({0}): {1}",
                    symbol, ex);
                return null;
            }

            if (fileCandles == null || fileCandles.Count == 0) return null;

            if (!locker.TryEnterWriteLock(LockTimeout))
            {
                Logger.ErrorFormat("Ошибка в AtomCandleStorage.LoadFromFile({0}): невозможно получить доступ на запись",
                    symbol);
                return null;
            }

            // записать в словарь
            var dates = new Cortege2<DateTime, DateTime>(fileCandles[0].timeOpen, fileCandles[fileCandles.Count - 1].timeOpen);
            try
            {
                if (candles.ContainsKey(symbol))
                    candles[symbol] = new ThreadSafeCandleList(fileCandles);
                else
                    candles.Add(symbol, new ThreadSafeCandleList(fileCandles));
            }
            finally
            {
                locker.ExitWriteLock();
            }
            return dates;
        }
Пример #6
0
        public Cortege2 <DateTime, DateTime>?LoadFromFile(string quoteDir, string symbol)
        {
            if (string.IsNullOrEmpty(quoteDir))
            {
                throw new ArgumentException("LoadFromFile - директория пуста", "quoteDir");
            }
            if (string.IsNullOrEmpty(symbol))
            {
                throw new ArgumentException("LoadFromFile - котировка не указана", "symbol");
            }

            var fileName = quoteDir + "\\" + symbol + ".quote";

            if (!File.Exists(fileName))
            {
                return(null);
            }
            // прочитать файл
            List <CandleData> fileCandles;

            try
            {
                fileCandles = CandleData.LoadFromFile(fileName, symbol);
            }
            catch (Exception ex)
            {
                Logger.ErrorFormat("Ошибка в AtomCandleStorage.LoadFromFile({0}): {1}",
                                   symbol, ex);
                return(null);
            }

            if (fileCandles == null || fileCandles.Count == 0)
            {
                return(null);
            }

            if (!locker.TryEnterWriteLock(LockTimeout))
            {
                Logger.ErrorFormat("Ошибка в AtomCandleStorage.LoadFromFile({0}): невозможно получить доступ на запись",
                                   symbol);
                return(null);
            }

            // записать в словарь
            var dates = new Cortege2 <DateTime, DateTime>(fileCandles[0].timeOpen, fileCandles[fileCandles.Count - 1].timeOpen);

            try
            {
                if (candles.ContainsKey(symbol))
                {
                    candles[symbol] = new ThreadSafeCandleList(fileCandles);
                }
                else
                {
                    candles.Add(symbol, new ThreadSafeCandleList(fileCandles));
                }
            }
            finally
            {
                locker.ExitWriteLock();
            }
            return(dates);
        }