/// <summary> /// load security data from folder /// загрузить данные о бумагах из директории /// </summary> private void LoadSecurities() { if ((_sourceDataType == TesterSourceDataType.Set && (string.IsNullOrWhiteSpace(_activSet) || !Directory.Exists(_activSet))) || (_sourceDataType == TesterSourceDataType.Folder && (string.IsNullOrWhiteSpace(_pathToFolder) || !Directory.Exists(_pathToFolder)))) { return; } SecuritiesTester.Clear(); if (_sourceDataType == TesterSourceDataType.Set) { // Hercules data sets / сеты данных Геркулеса string[] directories = Directory.GetDirectories(_activSet); if (directories.Length == 0) { SendLogMessage(OsLocalization.Market.Message28, LogMessageType.System); return; } for (int i = 0; i < directories.Length; i++) { LoadSeciruty(directories[i]); } } else // if (_sourceDataType == TesterSourceDataType.Folder) { // simple files from directory / простые файлы из папки string[] files = Directory.GetFiles(_pathToFolder); if (files.Length == 0) { SendLogMessage(OsLocalization.Market.Message49, LogMessageType.Error); } LoadCandleFromFolder(_pathToFolder); } if (CandleSeriesChangeEvent != null) { CandleSeriesChangeEvent(SecuritiesTester); } }
/// <summary> /// загрузить данные о бумагах из директории /// </summary> private void LoadSecurities() { if ((_sourceDataType == TesterSourceDataType.Set && (string.IsNullOrWhiteSpace(_activSet) || !Directory.Exists(_activSet))) || (_sourceDataType == TesterSourceDataType.Folder && (string.IsNullOrWhiteSpace(_pathToFolder) || !Directory.Exists(_pathToFolder)))) { return; } SecuritiesTester.Clear(); if (_sourceDataType == TesterSourceDataType.Set) { // сеты данных Геркулеса string[] directories = Directory.GetDirectories(_activSet); if (directories.Length == 0) { SendLogMessage("Загрузка бумаг прервана. В указанном сете нет загруженных инструментов.", LogMessageType.System); return; } for (int i = 0; i < directories.Length; i++) { LoadSeciruty(directories[i]); } } else // if (_sourceDataType == TesterSourceDataType.Folder) { // простые файлы из папки string[] files = Directory.GetFiles(_pathToFolder); if (files.Length == 0) { SendLogMessage("Загрузка бумаг прервана. В указанной папке не содержиться ни одного файла.", LogMessageType.Error); } LoadCandleFromFolder(_pathToFolder); } if (CandleSeriesChangeEvent != null) { CandleSeriesChangeEvent(SecuritiesTester); } }
/// <summary> /// загрузить данные из папки /// </summary> private void LoadCandleFromFolder(string folderName) { string[] files = Directory.GetFiles(folderName); if (files.Length == 0) { return; } List <MinerCandleSeries> security = new List <MinerCandleSeries>(); for (int i = 0; i < files.Length; i++) { security.Add(new MinerCandleSeries()); security[security.Count - 1].FileAdress = files[i]; security[security.Count - 1].LogMessageEvent += TesterServer_LogMessageEvent; string name = files[i].Split('\\')[files[i].Split('\\').Length - 1]; security[security.Count - 1].Security = new Security(); security[security.Count - 1].Security.Name = name; security[security.Count - 1].Security.Lot = 1; security[security.Count - 1].Security.NameClass = "TestClass"; security[security.Count - 1].Security.Go = 1; security[security.Count - 1].Security.PriceStepCost = 1; security[security.Count - 1].Security.PriceStep = 1; // тф // шаг цены // начало // конец StreamReader reader = new StreamReader(files[i]); // свечи: 20110111,100000,19577.00000,19655.00000,19533.00000,19585.00000,2752 // тики 1 вар: 20150401,100000,86160.000000000,2 // тики 2 вар: 20151006,040529,3010,5,Buy/Sell/Unknown string str = reader.ReadLine(); try { // смотрим свечи ли в файле Candle candle = new Candle(); candle.SetCandleFromString(str); // в файле свечи. Смотрим какие именно security[security.Count - 1].TimeStart = candle.TimeStart; Candle candle2 = new Candle(); candle2.SetCandleFromString(reader.ReadLine()); security[security.Count - 1].TimeFrameSpan = candle2.TimeStart - candle.TimeStart; security[security.Count - 1].TimeFrame = GetTimeFrame(security[security.Count - 1].TimeFrameSpan); // шаг цены decimal minPriceStep = decimal.MaxValue; int countFive = 0; CultureInfo culture = new CultureInfo("ru-RU"); for (int i2 = 0; i2 < 20; i2++) { Candle candleN = new Candle(); candleN.SetCandleFromString(reader.ReadLine()); decimal open = (decimal)Convert.ToDouble(candleN.Open); decimal high = (decimal)Convert.ToDouble(candleN.High); decimal low = (decimal)Convert.ToDouble(candleN.Low); decimal close = (decimal)Convert.ToDouble(candleN.Close); if (open.ToString(culture).Split(',').Length > 1 || high.ToString(culture).Split(',').Length > 1 || low.ToString(culture).Split(',').Length > 1 || close.ToString(culture).Split(',').Length > 1) { // если имеет место вещественная часть int lenght = 1; if (open.ToString(culture).Split(',').Length > 1 && open.ToString(culture).Split(',')[1].Length > lenght) { lenght = open.ToString(culture).Split(',')[1].Length; } if (high.ToString(culture).Split(',').Length > 1 && high.ToString(culture).Split(',')[1].Length > lenght) { lenght = high.ToString(culture).Split(',')[1].Length; } if (low.ToString(culture).Split(',').Length > 1 && low.ToString(culture).Split(',')[1].Length > lenght) { lenght = low.ToString(culture).Split(',')[1].Length; } if (close.ToString(culture).Split(',').Length > 1 && close.ToString(culture).Split(',')[1].Length > lenght) { lenght = close.ToString(culture).Split(',')[1].Length; } if (lenght == 1 && minPriceStep > 0.1m) { minPriceStep = 0.1m; } if (lenght == 2 && minPriceStep > 0.01m) { minPriceStep = 0.01m; } if (lenght == 3 && minPriceStep > 0.001m) { minPriceStep = 0.001m; } if (lenght == 4 && minPriceStep > 0.0001m) { minPriceStep = 0.0001m; } if (lenght == 5 && minPriceStep > 0.00001m) { minPriceStep = 0.00001m; } if (lenght == 6 && minPriceStep > 0.000001m) { minPriceStep = 0.000001m; } if (lenght == 7 && minPriceStep > 0.0000001m) { minPriceStep = 0.0000001m; } } else { // если вещественной части нет int lenght = 1; for (int i3 = open.ToString(culture).Length - 1; open.ToString(culture)[i3] == '0'; i3--) { lenght = lenght * 10; } int lengthLow = 1; for (int i3 = low.ToString(culture).Length - 1; low.ToString(culture)[i3] == '0'; i3--) { lengthLow = lengthLow * 10; if (lenght > lengthLow) { lenght = lengthLow; } } int lengthHigh = 1; for (int i3 = high.ToString(culture).Length - 1; high.ToString(culture)[i3] == '0'; i3--) { lengthHigh = lengthHigh * 10; if (lenght > lengthHigh) { lenght = lengthHigh; } } int lengthClose = 1; for (int i3 = close.ToString(culture).Length - 1; close.ToString(culture)[i3] == '0'; i3--) { lengthClose = lengthClose * 10; if (lenght > lengthClose) { lenght = lengthClose; } } if (minPriceStep > lenght) { minPriceStep = lenght; } if (minPriceStep == 1 && open % 5 == 0 && high % 5 == 0 && close % 5 == 0 && low % 5 == 0) { countFive++; } } } if (minPriceStep == 1 && countFive == 20) { minPriceStep = 5; } security[security.Count - 1].Security.PriceStep = minPriceStep; security[security.Count - 1].Security.PriceStepCost = minPriceStep; // последняя дата string lastString = null; while (!reader.EndOfStream) { lastString = reader.ReadLine(); } Candle candle3 = new Candle(); candle3.SetCandleFromString(lastString); security[security.Count - 1].TimeEnd = candle3.TimeStart; reader.Close(); } catch (Exception) { security.Remove(security[security.Count - 1]); } finally { reader.Close(); } } // сохраняем бумаги if (security == null || security.Count == 0) { return; } if (_securities == null) { _securities = new List <Security>(); } for (int i = 0; i < security.Count; i++) { if (_securities.Find(security1 => security1.Name == security[i].Security.Name) == null) { _securities.Add(security[i].Security); } } // считаем время SecuritiesTester.AddRange(security); if (SecuritiesTester.Count != 0) { for (int i = 0; i < SecuritiesTester.Count; i++) { if ((TimeMin == DateTime.MinValue && SecuritiesTester[i].TimeStart != DateTime.MinValue) || (SecuritiesTester[i].TimeStart != DateTime.MinValue && SecuritiesTester[i].TimeStart < TimeMin)) { TimeMin = SecuritiesTester[i].TimeStart; TimeStart = SecuritiesTester[i].TimeStart; TimeNow = SecuritiesTester[i].TimeStart; } if (SecuritiesTester[i].TimeEnd != DateTime.MinValue && SecuritiesTester[i].TimeEnd > TimeMax) { TimeMax = SecuritiesTester[i].TimeEnd; TimeEnd = SecuritiesTester[i].TimeEnd; } SecuritiesTester[i].LoadCandles(); } } }