Example #1
0
        public void LoadFromMetaSaverFile(string fileName)
        {
            string[] tokens = Path.GetFileNameWithoutExtension(fileName).Split(new char[1] {
                '-'
            });
            this.Symbol = tokens[0];
            int currencyPrecision = Int32.Parse(tokens[1]);

            using (StreamReader str = new StreamReader(fileName))
            {
                string buf;
                int    koef = (int)Math.Pow(10, currencyPrecision);
                while ((buf = str.ReadLine()) != null)
                {
                    try
                    {
                        if (buf.Length != 0)
                        {
                            GroupTick gr = ParseMetaSaverGroupTick(buf, koef);
                            Data.Add(gr);
                            TickHistory.AddTick(gr.Tick);
                        }
                    }
                    catch (Exception exc)
                    {
                        System.Diagnostics.Trace.WriteLine(string.Format("Cannot Parse string {0}. Exception:{1}.", buf, exc.Message));
                        System.Diagnostics.Trace.Flush();
                        throw;
                    }
                }
            }
        }
Example #2
0
        public void TickTack(GroupTick tick)
        {
            if (dayForTickTack != tick.DateTime.Day)
            {
                if (balanceLogger != null)
                {
                    balanceLogger.AddMessage("{0}, {1}", tick.DateTime.ToLongDateString(), GetEquity());
                }
                dayForTickTack = tick.DateTime.Day;

                this.Account.Statistics.AddEquityMarginStatistics(tick.DateTime, GetEquity(), Math.Max(TestAccount.MarginBuy, TestAccount.MarginSell));
            }

            //if (filterMinuteDateTime.Ticks / TickHistory.tickInOneMinute != tick.DateTime.Ticks / TickHistory.tickInOneMinute)
            //{
            //    this.Account.Statistics.AddEquityMarginStatistics(tick.DateTime, GetEquity(), Math.Max(TestAccount.MarginBuy, TestAccount.MarginSell));
            //    filterMinuteDateTime = tick.DateTime;
            //}
            if (tick.DateTime.Hour == 23 && currentTick.DateTime.Hour == 22)
            {
                RunRollover();
            }

            currentTick = tick;
            ActivateMarketOrders(marketBuyOrders);
            ActivateMarketOrders(marketSellOrders);
            ActivateLimitOrders(limitBuyOrders);
            ActivateLimitOrders(limitSellOrders);

            strategy.TesterTick(tick.Tick);
        }
        private void ButtonBuildMirror_Click(object sender, RoutedEventArgs e)
        {
            foreach (SymbolChooser.SymbolViewItem svi in symbolChooser.SymbolViewItems)
            {
                InputData inDataAll = new InputData();
                inDataAll.LoadFromDirectory(svi.FullPath, null);

                GroupTick        baseTick = inDataAll.Data.First();
                List <GroupTick> newTicks = new List <GroupTick>();
                foreach (GroupTick grTick in inDataAll.Data)
                {
                    GroupTick newTick = new GroupTick();
                    newTick.DateTime = baseTick.DateTime.Add(baseTick.DateTime - grTick.DateTime);
                    newTick.OpenBid  = grTick.OpenBid;
                    newTick.OpenAsk  = grTick.OpenAsk;
                    newTick.CloseAsk = grTick.CloseAsk;
                    newTick.CloseBid = grTick.CloseBid;
                    newTick.MaxBid   = grTick.MaxBid;
                    newTick.MaxAsk   = grTick.MaxAsk;
                    newTick.MinBid   = grTick.MinBid;
                    newTick.MinAsk   = grTick.MinAsk;
                    newTick.volume   = grTick.volume;
                    newTicks.Add(newTick);
                }
                newTicks.Reverse();
                newTicks.AddRange(inDataAll.Data);
                inDataAll.Data = newTicks;
                inDataAll.SaveToDirectory(Path.Combine(TextBoxDestinationPath.Text, svi.Symbol),
                                          inDataAll.Data.First().DateTime, inDataAll.Data.Last().DateTime);
            }
        }
Example #4
0
 public void Orders(Order order, GroupTick tick, OrderModificationType type)
 {
     if (logger != null)
     {
         logger.AddMessage(string.Format("{0}, {1}, {2}, {3}", tick.DateTime.ToString("yyyyMMdd HH:mm:ss"), tick.OpenAsk, OrderModificationTypeConvertor.ToString(type), order.ToString()));
     }
 }
Example #5
0
        private void Run(bool isCloseAtTheEnd)
        {
            try
            {
                if (!strategy.TesterStart(inputData.Data.Count, this, this, this, this, this, inputData.Symbol))
                {
                    return;
                }

                if (inputData.Data.Count > 0)
                {
                    currentTick = inputData.Data[0];
                }
                else
                {
                    isTestSuccessfull = true;
                    return;
                }

                DateTime filterMinuteDateTime = DateTime.MinValue;

                foreach (GroupTick tick in inputData.Data)
                {
                    TickTack(tick);
                }
                if (inputData.Data.Count > 0)
                {
                    this.Account.Statistics.AddEquityMarginStatistics(inputData.Data.Last().DateTime, GetEquity(), Math.Max(TestAccount.MarginBuy, TestAccount.MarginSell));
                }
                if (isCloseAtTheEnd)
                {
                    CloseAllOrders();
                    strategy.TesterEnd();

                    if (onEndStrategy != null)
                    {
                        onEndStrategy(this, new EventArgs());
                    }
                }

                isTestSuccessfull = true;
            }
            catch (ApplicationException exc)
            {
                if (orderLogger != null)
                {
                    orderLogger.AddMessage(exc.ToString());
                }
            }
            catch (Exception exc)
            {
                if (orderLogger != null)
                {
                    orderLogger.AddMessage(exc.ToString());
                }
            }
        }
Example #6
0
 public bool AddGroupTick(GroupTick gt)
 {
     if (this.Data == null || this.Data.Count == 0 || this.Data.Last().DateTime < gt.DateTime)
     {
         this.Data.Add(gt);
         this.TickHistory.AddGroupTick(gt);
         return(true);
     }
     return(false);
 }
Example #7
0
        internal void AddGroupTick(GroupTick groupTick)
        {
            int index = 0;

            if (!timeToIndexDictionary.TryGetValue(groupTick.DateTime.Ticks / tickInOneMinute, out index))
            {
                historyTicks.Add(groupTick);
                timeToIndexDictionary[groupTick.DateTime.Ticks / tickInOneMinute] = historyTicks.Count - 1;
                return;
            }
            historyTicks[index] = groupTick;
        }
Example #8
0
        private void Run(bool debugMode)
        {
            if (inputData.Data.Count > 0)
            {
                currentTick = inputData.Data[0];
            }

            ordersCollection.ActivatingLimitOrder    += new EventHandler <OrdersExecutor.OrderEventArgs>(ordersCollection_ActivatingLimitOrder);
            ordersCollection.ActivatingMarketSLOrder += new EventHandler <OrdersExecutor.OrderEventArgs>(ordersCollection_ActivatingMarketSLOrder);
            ordersCollection.ActivatingMarketTPOrder += new EventHandler <OrdersExecutor.OrderEventArgs>(ordersCollection_ActivatingMarketTPOrder);

            if (!strategy.TesterStart(inputData.Data.Count, this, this, this, this, this, inputData.Symbol))
            {
                return;
            }

            int  nextInterrupt       = 0;
            bool isReadOnlyActivated = false;

            for (currentTickIndex = 0; currentTickIndex < inputData.Data.Count;)
            {
                if (!isReadOnlyActivated && currentTickIndex >= this.ReadOnlyPoint)
                {
                    isReadOnlyActivated = true;
                    strategy.SetReadOnly(true);
                }

                IsBlankTick = true;

                currentTick = inputData.Data[currentTickIndex];
                ordersCollection.Proccess(currentTick);
                strategy.TesterTick(currentTick.Tick);
                if (IsBlankTick == false && nextInterrupt != currentTickIndex)
                {
                    throw new ApplicationException("Wrong fast logic");
                }

                nextInterrupt = fPredictor.CalculateNextInterruption(currentTickIndex);
                if (debugMode)
                {
                    currentTickIndex++;
                }
                else
                {
                    currentTickIndex = nextInterrupt;
                }
            }
            CloseAllOrders();
            strategy.TesterEnd();
        }
Example #9
0
        internal InputDataShift NormalizeInputData(DateTime startTime, DateTime endTime, long tickInPeriod, InputData inputData)
        {
            startTime = new DateTime((startTime.Ticks / tickInPeriod) * tickInPeriod).AddTicks(tickInPeriod);
            DateTime       currTime = startTime;
            InputDataShift ids      = new InputDataShift();

            ids.Symbol = inputData.Symbol;
            int iterator = 0;

            if (inputData.Data[iterator].DateTime > currTime)
            {
                throw new ArgumentException("InputData contains less information than requested startTime");
            }

            GroupTick firstTick    = null;
            int       shiftCounter = 0;

            do
            {
                while (inputData.Data[iterator + 1].DateTime < currTime)
                {
                    if (iterator + 1 >= inputData.Data.Count)
                    {
                        throw new ArgumentException("InputData contains less information than requested endTime");
                    }
                    iterator++;
                }
                if (firstTick == null)
                {
                    firstTick = inputData.Data[iterator];
                }
                InputDataShift.GroupTickShift tickShift = new InputDataShift.GroupTickShift();
                tickShift.GroupTick.CloseAsk = inputData.Data[iterator].CloseAsk - firstTick.CloseAsk;
                tickShift.GroupTick.CloseBid = inputData.Data[iterator].CloseBid - firstTick.CloseBid;
                tickShift.GroupTick.DateTime = currTime;
                tickShift.GroupTick.MaxAsk   = inputData.Data[iterator].MaxAsk - firstTick.MaxAsk;
                tickShift.GroupTick.MaxBid   = inputData.Data[iterator].MaxBid - firstTick.MaxBid;
                tickShift.GroupTick.MinAsk   = inputData.Data[iterator].MinAsk - firstTick.MinAsk;
                tickShift.GroupTick.MinBid   = inputData.Data[iterator].MinBid - firstTick.MinBid;
                tickShift.GroupTick.OpenAsk  = inputData.Data[iterator].OpenAsk - firstTick.OpenAsk;
                tickShift.GroupTick.OpenBid  = inputData.Data[iterator].OpenBid - firstTick.OpenBid;
                tickShift.TimeShift          = shiftCounter++;
                ids.tickShift.Add(tickShift);

                currTime = currTime.AddTicks(tickInPeriod);
            } while (currTime <= endTime);

            return(ids);
        }
Example #10
0
 public void Proccess(GroupTick groupTick)
 {
     while (BuyLimits.Count > 0 && groupTick.MinAsk <= BuyLimits.Keys[0])
     {
         BuyLimits.Values[0].RemoveAll(p => p == null);
         if (BuyLimits.Values[0].Count == 0)
         {
             BuyLimits.RemoveAt(0);
             continue;
         }
         Order[] orders = BuyLimits.Values[0].ToArray();
         Array.ForEach(orders, p => Activate(p, groupTick));
     }
     while (SellLimits.Count > 0 && groupTick.MaxBid >= SellLimits.Keys[0])
     {
         SellLimits.Values[0].RemoveAll(p => p == null);
         if (SellLimits.Values[0].Count == 0)
         {
             SellLimits.RemoveAt(0);
             continue;
         }
         Order[] orders = SellLimits.Values[0].ToArray();
         Array.ForEach(orders, p => Activate(p, groupTick));
     }
     while (BuyStops.Count > 0 && groupTick.MaxAsk >= BuyStops.Keys[0])
     {
         BuyStops.Values[0].RemoveAll(p => p == null);
         if (BuyStops.Values[0].Count == 0)
         {
             BuyStops.RemoveAt(0);
             continue;
         }
         Order[] orders = BuyStops.Values[0].ToArray();
         Array.ForEach(orders, p => Activate(p, groupTick));
     }
     while (SellStops.Count > 0 && groupTick.MinBid >= SellStops.Keys[0])
     {
         SellStops.Values[0].RemoveAll(p => p == null);
         if (SellStops.Values[0].Count == 0)
         {
             SellStops.RemoveAt(0);
             continue;
         }
         Order[] orders = SellStops.Values[0].ToArray();
         Array.ForEach(orders, p => Activate(p, groupTick));
     }
 }
Example #11
0
        public void LoadFromUniversalFile(string filePath, int currencyPrecision, DateTime start, DateTime end)
        {
            MemoryStream mem = new MemoryStream();

            using (ZipFile zip = ZipFile.Read(filePath))
            {
                foreach (ZipEntry ze in zip)
                {
                    ze.Extract(mem);
                }
            }
            mem.Position = 0;

            using (StreamReader str = new StreamReader(mem))
            {
                string buf;
                int    koef = (int)Math.Pow(10, currencyPrecision);
                while ((buf = str.ReadLine()) != null)
                {
                    try
                    {
                        if (buf.Length != 0)
                        {
                            GroupTick gr = ParseMetaSaverGroupTick(buf, koef);
                            if (gr.DateTime < start)
                            {
                                continue;
                            }
                            if (gr.DateTime > end)
                            {
                                return;
                            }
                            Data.Add(gr);
                            TickHistory.AddTick(gr.Tick);
                        }
                    }
                    catch (Exception exc)
                    {
                        System.Diagnostics.Trace.WriteLine(string.Format("Cannot Parse string {0}. Exception:{1}.", buf, exc.Message));
                        System.Diagnostics.Trace.Flush();
                        throw;
                    }
                }
            }
        }
Example #12
0
        //internal TickHistory Select( fromDate, DateTime toDate)
        //{
        //    TickHistory newTickHistory = new TickHistory();

        //        var a = from currGT in historyTicks
        //                where currGT.Key > fromDate.Ticks / tickInOneMinute && currGT.Key < toDate.Ticks / tickInOneMinute
        //                select currGT;
        //        foreach (KeyValuePair<long, GroupTick> curr in a)
        //            newTickHistory.historyTicks.Add(curr.Key, curr.Value);
        //    return newTickHistory;

        //}

        internal void AddTick(Tick <int> tick)
        {
            GroupTick gt    = null;
            int       index = 0;

            if (!timeToIndexDictionary.TryGetValue(tick.DateTime.Ticks / tickInOneMinute, out index))
            {
                gt          = new GroupTick();
                gt.DateTime = tick.DateTime;
                gt.CloseAsk = tick.Ask;
                gt.CloseBid = tick.Bid;
                gt.MaxAsk   = tick.Ask;
                gt.MaxBid   = tick.Bid;
                gt.MinAsk   = tick.Ask;
                gt.MinBid   = tick.Bid;
                gt.OpenAsk  = tick.Ask;
                gt.OpenBid  = tick.Bid;

                historyTicks.Add(gt);
                timeToIndexDictionary[tick.DateTime.Ticks / tickInOneMinute] = historyTicks.Count - 1;
                return;
            }
            gt = historyTicks[index];

            gt.CloseAsk = tick.Ask;
            gt.CloseBid = tick.Bid;
            if (gt.MaxAsk < tick.Ask)
            {
                gt.MaxAsk = tick.Ask;
            }
            if (gt.MaxBid < tick.Bid)
            {
                gt.MaxBid = tick.Bid;
            }
            if (gt.MinAsk > tick.Ask)
            {
                gt.MinAsk = tick.Ask;
            }
            if (gt.MinBid > tick.Bid)
            {
                gt.MinBid = tick.Bid;
            }
        }
        private void ButtonBuildToUSD_Click(object sender, RoutedEventArgs e)
        {
            foreach (SymbolChooser.SymbolViewItem svi in symbolChooser.SymbolViewItems)
            {
                if (!svi.Symbol.ToUpper().Contains("USD"))
                {
                    continue;
                }

                InputData inDataAll = new InputData();
                inDataAll.LoadFromDirectory(svi.FullPath, null);

                if (svi.Symbol.ToUpper().EndsWith("USD"))
                {
                    inDataAll.SaveToDirectory(Path.Combine(TextBoxDestinationPath.Text, svi.Symbol),
                                              inDataAll.Data.First().DateTime, inDataAll.Data.Last().DateTime);
                    continue;
                }

                double           coef     = 10000000000;
                List <GroupTick> newTicks = new List <GroupTick>();
                GroupTick        baseTick = inDataAll.Data.First();
                foreach (GroupTick grTick in inDataAll.Data)
                {
                    GroupTick newTick = new GroupTick();
                    newTick.DateTime = grTick.DateTime;
                    newTick.OpenBid  = (int)(coef / grTick.OpenBid);
                    newTick.OpenAsk  = (int)(coef / grTick.OpenAsk);
                    newTick.CloseAsk = (int)(coef / grTick.CloseAsk);
                    newTick.CloseBid = (int)(coef / grTick.CloseBid);
                    newTick.MaxBid   = (int)(coef / grTick.MaxBid);
                    newTick.MaxAsk   = (int)(coef / grTick.MaxAsk);
                    newTick.MinBid   = (int)(coef / grTick.MinBid);
                    newTick.MinAsk   = (int)(coef / grTick.MinAsk);
                    newTick.volume   = grTick.volume;
                    newTicks.Add(newTick);
                }
                inDataAll.Data = newTicks;
                inDataAll.SaveToDirectory(Path.Combine(TextBoxDestinationPath.Text, svi.Symbol.Remove(0, 3) + "USD"),
                                          inDataAll.Data.First().DateTime, inDataAll.Data.Last().DateTime);
            }
        }
Example #14
0
        private GroupTick ParseMetaExportStandardGroupTick(string str, int fixedSpread, int koef)
        {
            try
            {
                string[]  arrString = str.Split(',');
                GroupTick tick      = new GroupTick();
                tick.DateTime = DateTime.ParseExact(arrString[0] + " " + arrString[1], "yyyy.MM.dd H:mm", CultureInfo.InvariantCulture);
                tick.OpenBid  = (int)(Decimal.Parse(arrString[2]) * koef);
                tick.OpenAsk  = tick.OpenBid + fixedSpread;
                tick.MaxBid   = (int)(Decimal.Parse(arrString[3]) * koef);
                tick.MinBid   = (int)(Decimal.Parse(arrString[4]) * koef);
                tick.MinAsk   = tick.MinBid + fixedSpread;
                tick.MaxAsk   = tick.MaxBid + fixedSpread;
                tick.CloseBid = (int)(Decimal.Parse(arrString[5]) * koef);
                tick.CloseAsk = tick.CloseBid + fixedSpread;

                return(tick);
            }
            catch (Exception exc)
            {
                throw;
            }
        }
Example #15
0
        private GroupTick ParseMetaSaverGroupTick(string str, int koef)
        {
            try
            {
                string[]  arrString = str.Split(',');
                GroupTick tick      = new GroupTick();
                tick.DateTime = DateTime.ParseExact(arrString[0], "yyyy.MM.dd H:mm:ss", CultureInfo.InvariantCulture);
                tick.OpenBid  = (int)(Decimal.Parse(arrString[2]) * koef);
                tick.OpenAsk  = (int)(Decimal.Parse(arrString[1]) * koef);
                tick.MaxBid   = tick.OpenBid;
                tick.MinBid   = tick.OpenBid;
                tick.MinAsk   = tick.OpenAsk;
                tick.MaxAsk   = tick.OpenAsk;
                tick.CloseBid = tick.OpenBid;
                tick.CloseAsk = tick.OpenAsk;

                return(tick);
            }
            catch (Exception exc)
            {
                throw;
            }
        }
Example #16
0
 private void Activate(Order order, GroupTick groupTick)
 {
     if (order.Type == OrderType.Limit)
     {
         RemoveLimitOrder(order);
         OnActivatingLimitOrder(order);
         return;
     }
     if (order.Side == OrderSide.Buy && order.TP <= groupTick.MaxBid && order.TP != 0 ||
         order.Side == OrderSide.Sell && order.TP >= groupTick.MinAsk)
     {
         RemoveMarketOrder(order);
         onActivatingMarketTPOrder(order);
         return;
     }
     if (order.Side == OrderSide.Buy && order.SL >= groupTick.MinBid ||
         order.Side == OrderSide.Sell && order.SL <= groupTick.MaxAsk && order.SL != 0)
     {
         RemoveMarketOrder(order);
         onActivatingMarketSLOrder(order);
         return;
     }
 }
Example #17
0
        public IEnumerable <Order> Init(DateTime currentDateTime, DateTime startSimulate, out List <string> logRecords)
        {
            logRecords = new List <string>();
            string swapFilePath = Path.Combine(rootPath, "swap.txt");
            string symbolPath   = Path.Combine(rootPath, Symbol);

            InputData inData = new InputData();

            inData.LoadFromDirectory(symbolPath, new SwapCollection().LoadSwap(swapFilePath),
                                     /*currentDateTime.AddMinutes( - CustomParam.InitHistoryMinutes)*/
                                     startSimulate, currentDateTime);
            DateTime dateTemp = inData.Data.Count == 0 ? startSimulate : inData.Data.Last().DateTime;
            int      shift    = Meta.iBarShift(Symbol, CurrentGraphPeriod, dateTemp, false);

            for (int i = shift; i > 0; i--)
            {
                GroupTick gt = new GroupTick();
                gt.DateTime = currentDateTime.AddMinutes(-i);
                gt.OpenBid  = gt.OpenAsk = Meta.iOpen(CustomParam.Symbol, CurrentGraphPeriod, i);
                gt.MaxBid   = gt.MaxAsk = Meta.iHigh(CustomParam.Symbol, CurrentGraphPeriod, i);
                gt.MinBid   = gt.MinAsk = Meta.iLow(CustomParam.Symbol, CurrentGraphPeriod, i);
                if (gt.OpenBid == 0 || gt.MaxBid == 0 || gt.MinBid == 0)
                {
                    continue;
                }

                inData.AddGroupTick(gt);
            }
            logRecords.Add(string.Format("{0} {1} were loaded.", Symbol, inData.Data.Count));

            CustomParam.InitHistoryMinutes = 0;

            InputData inputData = inData;

            Logger = new Log4Smart.Logger(false);
            Engine = new Engine(Logger, Logger);

            //save state of CurrentStrategyParam
            int temp = CurrentStrategyParam["InitHistoryMinutes"];

            CurrentStrategyParam["InitHistoryMinutes"] = 0;
            string firstRawParam = CurrentStrategyParam.GetStringParameter("P1String");

            CurrentStrategyParam.SetStringParameter("P1String", CustomParam.RawStrategyParam);


            Advisor.TesterInit(CurrentStrategyParam, Logger);
            Account acc = new Account(10000000, 4);

            Engine.StartTest(inputData, Advisor, acc, false);

            //restor state of CurrentStrategyParam
            CurrentStrategyParam["InitHistoryMinutes"] = temp;
            CurrentStrategyParam.SetStringParameter("P1String", firstRawParam);

            IsSuccessful = Engine.IsTestSuccessfull;
            if (!Engine.IsTestSuccessfull)
            {
                string directory = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
                string fullDir   = directory + string.Format("/errors/{0}/{1}/{2}/", inputData.Symbol, Guid.NewGuid().ToString(), inputData.Data.First().DateTime.ToString("yyyyMMdd"));
                Logger.SaveLogToFile(fullDir, "error");
            }
            return(Engine.GetLimitOrders().Union(Engine.GetMarketOrders()));
        }
Example #18
0
        public InputData BuildForPeriod(IEnumerable <PartialQuote> partQuotes)
        {
            foreach (PartialQuote pq in partQuotes)
            {
                pq.Verify();
            }

            if (partQuotes.Sum(p => p.Coefficient) - 1 > Double.Epsilon)
            {
                throw new ArgumentException("Sum of coef is not equal 1");
            }

            List <GroupTick> listGroupTick = new List <GroupTick>();

            for (int i = 0; i < dictDataShifts.Values.First().tickShift.Count; i++)
            {
                GroupTick newTick  = new GroupTick();
                double    CloseAsk = StartValue;
                double    CloseBid = StartValue;
                double    MaxAsk   = StartValue;
                double    MaxBid   = StartValue;
                double    MinAsk   = StartValue;
                double    MinBid   = StartValue;
                double    OpenAsk  = StartValue;
                double    OpenBid  = StartValue;

                bool isFirstTime = true;
                foreach (PartialQuote pq in partQuotes)
                {
                    InputDataShift currIDS = dictDataShifts[pq.Symbol];
                    if (isFirstTime)
                    {
                        newTick.DateTime = currIDS.tickShift[i].GroupTick.DateTime;
                        isFirstTime      = false;
                    }
                    else
                    if (newTick.DateTime != currIDS.tickShift[i].GroupTick.DateTime)
                    {
                        throw new ApplicationException("newTick.DateTime != pq.inputDataShift.tickShift[i].GroupTick.DateTime");
                    }

                    CloseAsk += (pq.Coefficient * currIDS.tickShift[i].GroupTick.CloseAsk);
                    CloseBid += (pq.Coefficient * currIDS.tickShift[i].GroupTick.CloseBid);
                    MaxAsk   += (pq.Coefficient * currIDS.tickShift[i].GroupTick.MaxAsk);
                    MaxBid   += (pq.Coefficient * currIDS.tickShift[i].GroupTick.MaxBid);
                    MinAsk   += (pq.Coefficient * currIDS.tickShift[i].GroupTick.MinAsk);
                    MinBid   += (pq.Coefficient * currIDS.tickShift[i].GroupTick.MinBid);
                    OpenAsk  += (pq.Coefficient * currIDS.tickShift[i].GroupTick.OpenAsk);
                    OpenBid  += (pq.Coefficient * currIDS.tickShift[i].GroupTick.OpenBid);
                }
                newTick.CloseAsk = (int)CloseAsk;
                newTick.CloseBid = (int)CloseBid;
                newTick.MaxAsk   = (int)MaxAsk;
                newTick.MaxBid   = (int)MaxBid;
                newTick.MinAsk   = (int)MinAsk;
                newTick.MinBid   = (int)MinBid;
                newTick.OpenAsk  = (int)OpenAsk;
                newTick.OpenBid  = (int)OpenBid;
                listGroupTick.Add(newTick);
            }
            InputData resultPeriod = new InputData(listGroupTick);

            resultPeriod.Symbol = partQuotes.Select(p => p.Name).ToString();
            return(resultPeriod);
        }