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(); } } }
/*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(); } }
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(); } }
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(); } } }
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; }
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); }