Exemplo n.º 1
0
        /// <summary>
        /// сохранить серию тиков
        /// </summary>
        /// <param name="trades">тики</param>
        /// <param name="path">путь</param>
        /// <param name="securityName">имя бумаги</param>
        /// <param name="startIndex">индекс для старта сохранения</param>
        private void SaveThisTick(List <Trade> trades, string path, string securityName, int startIndex)
        {
            if (_tradeSaveInfo == null)
            {
                _tradeSaveInfo = new List <TradeSaveInfo>();
            }

            // берём хранилище тиков

            TradeSaveInfo tradeSaveInfo =
                _tradeSaveInfo.Find(info => info.NameSecurity == securityName);

            if (tradeSaveInfo == null)
            {
                tradeSaveInfo = new TradeSaveInfo();
                tradeSaveInfo.NameSecurity       = securityName;
                tradeSaveInfo.LastSaveObjectTime = trades[startIndex].Time;
                _tradeSaveInfo.Add(tradeSaveInfo);
                if (File.Exists(path))
                {
                    File.Delete(path);
                }
            }

            int firstCandle = 0;

            if (tradeSaveInfo.LastSaveObjectTime ==
                trades[trades.Count - 1].Time)
            {
                // если у нас старые тики совпадают с новыми.
                return;
            }

            for (int i = trades.Count - 1; i > -1; i--)
            {
                if (trades[i].Time <= tradeSaveInfo.LastSaveObjectTime ||
                    startIndex >= i)
                {
                    firstCandle = i + 1;
                    break;
                }
            }

            tradeSaveInfo.LastSaveObjectTime = trades[trades.Count - 1].Time;
            // записываем

            try
            {
                using (StreamWriter writer = new StreamWriter(path, true))
                {
                    for (int i = firstCandle; i < trades.Count; i++)
                    {
                        writer.WriteLine(trades[i].GetSaveString());
                    }
                }
            }
            catch
            {
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// метод в котором работает поток сохраняющий тики в различные файлы
        /// </summary>
        private void TickSaverSpaceInFiles()
        {
            _tradeSaveInfo = new List <TradeSaveInfo>();
            try
            {
                if (!Directory.Exists(_pathName))
                {
                    Directory.CreateDirectory(_pathName);
                }
                while (true)
                {
                    Thread.Sleep(15000);

                    if (_server.ServerStatus != ServerConnectStatus.Connect)
                    {
                        continue;
                    }

                    if (NeadToSave == false)
                    {
                        continue;
                    }

                    if (_weLoadTrades == false)
                    {
                        continue;
                    }

                    List <Trade>[] allTrades = _server.AllTrades;

                    for (int i1 = 0;
                         allTrades != null && Thread.CurrentThread.Name != "deleteThread" && i1 < allTrades.Length;
                         i1++)
                    {
                        if (allTrades[i1].Count == 0)
                        {
                            continue;
                        }
                        if (MainWindow.ProccesIsWorked == false)
                        {
                            // если приложение закрывается
                            return;
                        }

                        if (_securities == null ||
                            (_securities != null &&
                             _securities.Find(security => security.Name == allTrades[i1][0].SecurityNameCode) == null))
                        {
                            continue;
                        }

                        TradeSaveInfo tradeInfo =
                            _tradeSaveInfo.Find(s => s.NameSecurity == allTrades[i1][0].SecurityNameCode);

                        if (tradeInfo == null)
                        {
                            tradeInfo = new TradeSaveInfo();
                            tradeInfo.NameSecurity = allTrades[i1][0].SecurityNameCode;
                            _tradeSaveInfo.Add(tradeInfo);
                        }

                        if (tradeInfo.LastSaveIndex == allTrades[i1].Count)
                        {
                            continue;
                        }

                        int lastSecond      = allTrades[i1][tradeInfo.LastSaveIndex].Time.Second;
                        int lastMillisecond = allTrades[i1][tradeInfo.LastSaveIndex].MicroSeconds;


                        string       _timepath = allTrades[i1][0].Time.ToString("yyyy_MM_dd");
                        StreamWriter writer    = new StreamWriter(_pathName + @"\" + allTrades[i1][0].SecurityNameCode + "_" + _timepath + ".txt", true);

                        for (int i = tradeInfo.LastSaveIndex; i < allTrades[i1].Count - 1; i++)
                        {
                            string timepath = allTrades[i1][i].Time.ToString("yyyy_MM_dd");
                            if (timepath != _timepath)
                            {
                                writer.Close();
                                writer    = new StreamWriter(_pathName + @"\" + allTrades[i1][0].SecurityNameCode + "_" + timepath + ".txt", true);
                                _timepath = timepath;
                            }
                            if (allTrades[i1][i].MicroSeconds == 0)
                            { // генерим какое-то время микросекунд, если нам коннектор их не выдал
                                if (lastSecond != allTrades[i1][i].Time.Second)
                                {
                                    lastMillisecond = 0;
                                    lastSecond      = allTrades[i1][i].Time.Second;
                                }

                                allTrades[i1][i].MicroSeconds = lastMillisecond += 10;
                            }

                            writer.WriteLine(allTrades[i1][i].GetSaveString());
                        }
                        tradeInfo.LastSaveIndex = allTrades[i1].Count - 1;
                        writer.Close();
                    }
                }
            }
            catch (Exception error)
            {
                SendNewLogMessage(error.ToString(), LogMessageType.Error);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// upload ticks
        /// загрузить тики
        /// </summary>
        /// <param name="dayCount"> number of days for uploading / количество дней которые нужно подгрузить </param>
        public void LoadTick()
        {
            try
            {
                if (!Directory.Exists(_pathName))
                {
                    _weLoadTrades = true;
                    return;
                }

                List <Trade>[] allTrades = _server.AllTrades;

                string[] saves = Directory.GetFiles(_pathName);

                for (int i = 0; i < saves.Length; i++)
                {
                    string nameSecurity;

                    try
                    {
                        string[] array = saves[i].Split('\\');
                        string[] _name = array[2].Split('_');
                        nameSecurity = _name[0];
                        DateTime _startDate = new DateTime(Convert.ToInt32(_name[1]), Convert.ToInt32(_name[2]), Convert.ToInt32(_name[3].Split('.')[0]));
                        if (_startDate < DateTime.Now.ToUniversalTime().AddDays(-DaysToLoad))
                        {
                            continue;
                        }
                    }
                    catch
                    {
                        continue;
                    }

                    // upload / загружаем
                    StreamReader reader = new StreamReader(saves[i]);

                    List <Trade> newList = new List <Trade>();

                    try
                    {
                        DateTime timeStart = DateTime.Now.AddDays(-DaysToLoad - 1);

                        if (timeStart.Month == 1 && timeStart.Day < 10)
                        {
                            timeStart = timeStart.AddDays(-10);
                        }

                        List <string> tradesInStr = new List <string>();

                        while (!reader.EndOfStream)
                        {
                            tradesInStr.Add(reader.ReadLine());
                        }

                        for (int i2 = 0; i2 < tradesInStr.Count; i2++)
                        {
                            Trade newTrade = new Trade();

                            try
                            {
                                newTrade.SetTradeFromString(tradesInStr[i2]);
                            }
                            catch
                            {
                                continue;
                            }

                            newTrade.SecurityNameCode = nameSecurity;

                            if (newTrade.Time.Date < timeStart.Date)
                            {
                                i2 += 100;
                                continue;
                            }

                            newList.Add(newTrade);
                        }
                    }
                    catch (Exception)
                    {
                        continue;
                    }

                    // save / сохраняем

                    if (newList.Count == 0)
                    {
                        continue;
                    }

                    if (_tradeSaveInfo.Find(s => s.NameSecurity == newList[0].SecurityNameCode) == null)
                    {
                        TradeSaveInfo tradeInfo = new TradeSaveInfo();
                        tradeInfo.NameSecurity  = newList[0].SecurityNameCode;
                        tradeInfo.LastSaveIndex = newList.Count;
                        _tradeSaveInfo.Add(tradeInfo);
                    }



                    if (allTrades == null)
                    {
                        allTrades = new[] { newList };
                    }
                    else
                    {
                        int            _indextradeinfo = _tradeSaveInfo.FindIndex(s => s.NameSecurity == newList[0].SecurityNameCode);
                        List <Trade>[] newListsArray   = new List <Trade> [_tradeSaveInfo.Count];
                        for (int ii = 0; ii < allTrades.Length; ii++)
                        {
                            if (newListsArray[ii] == null)
                            {
                                newListsArray[ii] = new List <Trade>();
                            }
                            newListsArray[ii] = allTrades[ii];
                        }
                        if (newListsArray[_indextradeinfo] == null)
                        {
                            newListsArray[_indextradeinfo] = new List <Trade>();
                        }
                        newListsArray[_indextradeinfo].AddRange(newList);
                        allTrades = newListsArray;
                    }

                    reader.Close();
                }

                for (int ii = 0; ii < _tradeSaveInfo.Count; ii++)
                {
                    _tradeSaveInfo[ii].LastSaveIndex = allTrades[ii].Count;
                }

                if (TickLoadedEvent != null)
                {
                    TickLoadedEvent(allTrades);
                }
            }
            catch (Exception error)
            {
                SendNewLogMessage(error.ToString(), LogMessageType.Error);
            }
            _weLoadTrades = true;
        }
Exemplo n.º 4
0
        /// <summary>
        /// загрузить тики
        /// </summary>
        /// <param name="dayCount">количество дней которые нужно подгрузить</param>
        public void LoadTick()
        {
            try
            {
                if (!Directory.Exists(_pathName))
                {
                    _weLoadTrades = true;
                    return;
                }

                List <Trade>[] allTrades = _server.AllTrades;

                string[] saves = Directory.GetFiles(_pathName);

                for (int i = 0; i < saves.Length; i++)
                {
                    // загружаем
                    StreamReader reader = new StreamReader(saves[i]);

                    List <Trade> newList = new List <Trade>();

                    string nameSecurity;

                    try
                    {
                        string[] array = saves[i].Split('\\');

                        nameSecurity = array[2].Split('.')[0];
                    }
                    catch
                    {
                        continue;
                    }

                    try
                    {
                        DateTime timeStart = DateTime.Now.AddDays(-DaysToLoad - 2);

                        if (timeStart.Month == 1 && timeStart.Day < 10)
                        {
                            timeStart = timeStart.AddDays(-10);
                        }

                        while (!reader.EndOfStream)
                        {
                            Trade newTrade = new Trade();

                            try
                            {
                                newTrade.SetTradeFromString(reader.ReadLine());
                            }
                            catch
                            {
                                continue;
                            }

                            newTrade.SecurityNameCode = nameSecurity;

                            if (newTrade.Time.Date < timeStart.Date)
                            {
                                continue;
                            }

                            newList.Add(newTrade);
                        }
                    }
                    catch (Exception)
                    {
                        continue;
                    }

                    // сохраняем

                    if (newList.Count == 0)
                    {
                        continue;
                    }

                    if (_tradeSaveInfo.Find(s => s.NameSecurity == newList[0].SecurityNameCode) == null)
                    {
                        TradeSaveInfo tradeInfo = new TradeSaveInfo();
                        tradeInfo.NameSecurity  = newList[0].SecurityNameCode;
                        tradeInfo.LastSaveIndex = newList.Count;
                        _tradeSaveInfo.Add(tradeInfo);
                    }

                    if (allTrades == null)
                    {
                        allTrades = new[] { newList };
                    }
                    else
                    {
                        List <Trade>[] newListsArray = new List <Trade> [allTrades.Length + 1];
                        for (int ii = 0; ii < allTrades.Length; ii++)
                        {
                            newListsArray[ii] = allTrades[ii];
                        }
                        newListsArray[newListsArray.Length - 1] = newList;
                        allTrades = newListsArray;
                    }

                    reader.Close();
                }

                if (TickLoadedEvent != null)
                {
                    TickLoadedEvent(allTrades);
                }
            }
            catch (Exception error)
            {
                SendNewLogMessage(error.ToString(), LogMessageType.Error);
            }
            _weLoadTrades = true;
        }
Exemplo n.º 5
0
        // сохранение во множество файлов

        /// <summary>
        /// загрузить тики из файлов
        /// </summary>
        public void LoadTick()
        {
            if (_server.ServerType == ServerType.InteractivBrokers)
            {
                LoadTickInOnFile();
                return;
            }

            if (!Directory.Exists(_pathName))
            {
                return;
            }

            if (DaysToLoad == 0)
            {
                return;
            }

            string[] saves = Directory.GetFiles(_pathName);

            List <Trade>[] allTrades = null;

            for (int i = 0; i < saves.Length; i++)
            {
// загружаем
                StreamReader reader  = new StreamReader(saves[i]);
                List <Trade> newList = new List <Trade>();

                string nameSecurity;

                try
                {
                    string[] array = saves[i].Split('\\');

                    nameSecurity = array[2].Split('.')[0];
                    nameSecurity = nameSecurity.Split('@')[0];
                }
                catch
                {
                    continue;
                }

                try
                {
                    while (!reader.EndOfStream)
                    {
                        Trade newTrade = new Trade();
                        newTrade.SetTradeFromString(reader.ReadLine());
                        newTrade.SecurityNameCode = nameSecurity;
                        newList.Add(newTrade);
                    }
                }
                catch (Exception)
                {
                    // ignore
                }

                if (newList.Count == 0)
                {
                    continue;
                }

// сохраняем в общий массив

                bool isInArray = false;

                for (int indAllTrades = 0; allTrades != null && indAllTrades < allTrades.Length; indAllTrades++)
                {
                    if (allTrades[indAllTrades][0].SecurityNameCode == newList[0].SecurityNameCode)
                    {
                        isInArray = true;
                        break;
                    }
                }

                if (allTrades == null ||
                    !isInArray)
                { // если у нас такого тикера в коллекции ещё нет.
                    if (allTrades == null)
                    {
                        allTrades = new[] { newList };
                    }
                    else
                    {
                        List <Trade>[] newListsArray = new List <Trade> [allTrades.Length + 1];
                        for (int ii = 0; ii < allTrades.Length; ii++)
                        {
                            newListsArray[ii] = allTrades[ii];
                        }
                        newListsArray[newListsArray.Length - 1] = newList;
                        allTrades = newListsArray;
                    }
                }
                else
                {// если такой тикер уже есть. И надо сортировать
                    List <Trade> listOld = allTrades.First(list => list[0].SecurityNameCode == newList[0].SecurityNameCode);

                    if (listOld.FindIndex(trade => trade.Time < newList[0].Time) == -1)
                    { // старый массив целиком больше по времени чем новый
                        newList.AddRange(listOld);

                        for (int indLists = 0; indLists < allTrades.Length; indLists++)
                        {
                            if (allTrades[indLists][0].SecurityNameCode == newList[0].SecurityNameCode)
                            {
                                allTrades[indLists] = newList;
                                break;
                            }
                        }
                    }
                    else if (listOld[listOld.Count - 1].Time < newList[0].Time)
                    { // старый массив целиком меньше по времени чем новый
                        listOld.AddRange(newList);
                    }
                    else
                    { // в старый массив нужно вставить новый в середину
                      /* for (int indexList = 0; indexList < newList.Count; indexList++)
                       * {
                       *   int index = listOld.FindIndex(trade => trade.Time < newList[0].Time);
                       *
                       *   listOld.Insert(index, newList[indexList]);
                       * }*/
                    }
                }

                reader.Close();
            }

// считаем сколько дней в архиве и обрезаем

            for (int i = 0; allTrades != null && i < allTrades.Length; i++)
            {
                List <Trade> lastList = allTrades[i];

                int dayCount = 0;
                int lastDay  = -1;
                for (int iii = 0; iii < lastList.Count; iii++)
                {
                    if (lastDay == -1 ||
                        lastDay != lastList[iii].Time.Day)
                    {
                        dayCount++;
                        lastDay = lastList[iii].Time.Day;
                    }
                }

                if (dayCount > DaysToLoad)
                { // обрезаме лишнее
                    int dayToLost = dayCount - DaysToLoad;

                    lastDay  = -1;
                    dayCount = 0;
                    List <Trade> newNewList = new List <Trade>();

                    for (int iii = 0; iii < lastList.Count; iii++)
                    {
                        if (lastDay == -1 ||
                            lastDay != lastList[iii].Time.Day)
                        {
                            dayToLost--;
                            dayCount++;
                            lastDay = lastList[iii].Time.Day;
                        }

                        if (dayToLost < 0)
                        {
                            newNewList.Add(lastList[iii]);
                        }
                    }

                    for (int indLists = 0; indLists < allTrades.Length; indLists++)
                    {
                        if (allTrades[indLists][0].SecurityNameCode == newNewList[0].SecurityNameCode)
                        {
                            allTrades[indLists] = newNewList;
                            break;
                        }
                    }
                }
            }

//собираем объекты хранящие данные для хранения тиков в файле
            for (int i = 0; allTrades != null && i < allTrades.Length; i++)
            {
                if (_tradeSaveInfo == null)
                {
                    _tradeSaveInfo = new List <TradeSaveInfo>();
                }

                TradeSaveInfo tradeSaveInfo =
                    _tradeSaveInfo.Find(info => info.NameSecurity == allTrades[i][0].SecurityNameCode);

                if (tradeSaveInfo == null)
                {
                    tradeSaveInfo = new TradeSaveInfo();
                    tradeSaveInfo.NameSecurity       = allTrades[i][0].SecurityNameCode;
                    tradeSaveInfo.LastSaveObjectTime = allTrades[i][allTrades[i].Count - 1].Time;
                    _tradeSaveInfo.Add(tradeSaveInfo);
                }
            }

// высылаем данные на верх


            if (TickLoadedEvent != null)
            {
                TickLoadedEvent(allTrades);
            }
        }
Exemplo n.º 6
0
        // для сохранения в один файл

        /// <summary>
        /// метод в котором работает поток сохраняющий тики
        /// </summary>
        private void TickSaverSpaceInOneFile()
        {
            _tradeSaveInfo = new List <TradeSaveInfo>();
            try
            {
                if (!Directory.Exists(_pathName))
                {
                    Directory.CreateDirectory(_pathName);
                }
                while (true)
                {
                    Thread.Sleep(15000);

                    if (_server.ServerStatus != ServerConnectStatus.Connect)
                    {
                        continue;
                    }

                    if (NeadToSave == false)
                    {
                        continue;
                    }

                    if (_weLoadTrades == false)
                    {
                        continue;
                    }

                    List <Trade>[] allTrades = _server.AllTrades;

                    for (int i1 = 0;
                         allTrades != null && Thread.CurrentThread.Name != "deleteThread" && i1 < allTrades.Length;
                         i1++)
                    {
                        if (allTrades[i1].Count == 0)
                        {
                            continue;
                        }
                        if (MainWindow.ProccesIsWorked == false)
                        {
                            // если приложение закрывается
                            return;
                        }

                        if (_securities == null ||
                            (_securities != null &&
                             _securities.Find(security => security.Name == allTrades[i1][0].SecurityNameCode) == null))
                        {
                            continue;
                        }

                        TradeSaveInfo tradeInfo =
                            _tradeSaveInfo.Find(s => s.NameSecurity == allTrades[i1][0].SecurityNameCode);

                        if (tradeInfo == null)
                        {
                            tradeInfo = new TradeSaveInfo();
                            tradeInfo.NameSecurity = allTrades[i1][0].SecurityNameCode;
                            _tradeSaveInfo.Add(tradeInfo);

                            StreamWriter writer =
                                new StreamWriter(_pathName + @"\" + allTrades[i1][0].SecurityNameCode + ".txt", false);

                            StringBuilder saveStr = new StringBuilder();

                            for (int i = 0; i < allTrades[i1].Count - 1; i++)
                            {
                                saveStr.Append(allTrades[i1][i].GetSaveString() + "\r\n");
                            }
                            tradeInfo.LastSaveIndex = allTrades[i1].Count - 1;
                            writer.Write(saveStr);
                            writer.Close();
                        }
                        else
                        {
                            if (tradeInfo.LastSaveIndex == allTrades[i1].Count)
                            {
                                continue;
                            }
                            StreamWriter writer =
                                new StreamWriter(_pathName + @"\" + allTrades[i1][0].SecurityNameCode + ".txt", true);

                            StringBuilder saveStr = new StringBuilder();

                            for (int i = tradeInfo.LastSaveIndex; i < allTrades[i1].Count - 1; i++)
                            {
                                saveStr.Append(allTrades[i1][i].GetSaveString() + "\r\n");
                            }
                            tradeInfo.LastSaveIndex = allTrades[i1].Count - 1;
                            writer.Write(saveStr);
                            writer.Close();
                        }
                    }
                }
            }
            catch (Exception error)
            {
                SendNewLogMessage(error.ToString(), LogMessageType.Error);
            }
        }
Exemplo n.º 7
0
        public List <Trade> LoadTrades()
        {
            List <Trade> result    = new List <Trade>();
            string       pathToSet = "Data\\Temp\\" + SetName + "\\";
            string       path      = pathToSet + SecurityName.Replace("/", "").Replace("*", "") + "\\" + "Tick\\";

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            if (_tradeSaveInfo == null)
            {
                _tradeSaveInfo = new List <TradeSaveInfo>();
            }

            TradeSaveInfo tradeSaveInfo =
                _tradeSaveInfo.Find(info => info.NameSecurity == SecurityName);

            if (tradeSaveInfo == null)
            {
                // if we save these trades for the first time, we try to pick them up from the file/если сохраняем эти тики в первый раз, пробуем поднять их из файла
                tradeSaveInfo = new TradeSaveInfo();
                tradeSaveInfo.NameSecurity = SecurityName;

                _tradeSaveInfo.Add(tradeSaveInfo);

                string[] files = Directory.GetFiles(path);
                if (files.Length != 0)
                {
                    try
                    {
                        using (StreamReader reader = new StreamReader(files[0]))
                        {
                            string str = "";
                            while (!reader.EndOfStream)
                            {
                                str = reader.ReadLine();
                                if (str != "")
                                {
                                    Trade trade = new Trade();
                                    trade.SetTradeFromString(str);
                                    trade.SecurityNameCode           = SecurityName;
                                    tradeSaveInfo.LastSaveObjectTime = trade.Time;
                                    tradeSaveInfo.LastTradeId        = trade.Id;
                                    result.Add(trade);
                                }
                            }
                        }
                    }
                    catch (Exception error)
                    {
                        if (NewLogMessageEvent != null)
                        {
                            NewLogMessageEvent(error.ToString(), LogMessageType.Error);
                        }

                        return(result);
                    }
                }
            }

            return(result);
        }
Exemplo n.º 8
0
        /// <summary>
        /// save trades series/сохранить серию тиков
        /// </summary>
        /// <param name="tradeLast">trades/тики</param>
        /// <param name="pathToFolder">path/путь</param>
        /// <param name="securityName">security Name/имя бумаги</param>
        private void SaveThisTick(Trade tradeLast, string pathToFolder, string securityName, StreamWriter writer, string pathToFile)
        {
            if (!Directory.Exists(pathToFolder))
            {
                Directory.CreateDirectory(pathToFolder);
            }

            if (_tradeSaveInfo == null)
            {
                _tradeSaveInfo = new List <TradeSaveInfo>();
            }

            // take trades storage/берём хранилище тиков

            TradeSaveInfo tradeSaveInfo =
                _tradeSaveInfo.Find(info => info.NameSecurity == securityName);

            if (tradeSaveInfo == null)
            {
                // if we save these trades for the first time, we try to pick them up from the file/если сохраняем эти тики в первый раз, пробуем поднять их из файла
                tradeSaveInfo = new TradeSaveInfo();
                tradeSaveInfo.NameSecurity = securityName;

                _tradeSaveInfo.Add(tradeSaveInfo);

                string[] files = Directory.GetFiles(pathToFolder);

                if (files.Length != 0)
                {
                    if (writer != null)
                    {
                        writer.Close();
                        writer = null;
                    }

                    try
                    {
                        using (StreamReader reader = new StreamReader(files[0]))
                        {
                            string str = "";
                            while (!reader.EndOfStream)
                            {
                                str = reader.ReadLine();
                            }
                            if (str != "")
                            {
                                Trade trade = new Trade();
                                trade.SetTradeFromString(str);
                                tradeSaveInfo.LastSaveObjectTime = trade.Time;
                                tradeSaveInfo.LastTradeId        = trade.Id;
                            }
                        }
                    }
                    catch (Exception error)
                    {
                        if (NewLogMessageEvent != null)
                        {
                            NewLogMessageEvent(error.ToString(), LogMessageType.Error);
                        }

                        return;
                    }
                }
            }

            if (tradeSaveInfo.LastSaveObjectTime >
                tradeLast.Time ||
                (tradeLast.Id != null && tradeLast.Id == tradeSaveInfo.LastTradeId)
                )
            {
                // if we have old trades coincide with new ones./если у нас старые тики совпадают с новыми.
                return;
            }


            tradeSaveInfo.LastSaveObjectTime = tradeLast.Time;
            tradeSaveInfo.LastTradeId        = tradeLast.Id;
            // write down/записываем

            try
            {
                if (writer != null)
                {
                    writer.WriteLine(tradeLast.GetSaveString());
                }
                else
                {
                    using (
                        StreamWriter writer2 =
                            new StreamWriter(pathToFile + "\\" + securityName.Replace("/", "") + ".txt", true))
                    {
                        writer2.WriteLine(tradeLast.GetSaveString());
                    }
                }
            }
            catch (Exception error)
            {
                if (NewLogMessageEvent != null)
                {
                    NewLogMessageEvent(error.ToString(), LogMessageType.Error);
                }
            }
        }