コード例 #1
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);
        }
コード例 #2
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);
        }