コード例 #1
0
ファイル: OsMinerServer.cs プロジェクト: ziv2015/OsEngine
        /// <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);
            }

        }
コード例 #2
0
        /// <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);
            }
        }
コード例 #3
0
        /// <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();
                }
            }
        }