Esempio n. 1
0
        /// <summary>
        /// Appends the other data to the data already in this class. It doesn't overwrite data
        /// for existing dates, so it can only prepend data to the start or append to the end.
        /// </summary>
        /// <param name="otherData">Data to append</param>
        public void AppendData(TickerData otherData)
        {
            // Prepend
            if (otherData.Start < Start)
            {
                // Find the index in the other data where this data starts.
                int copyEndIndex;
                for (copyEndIndex = 0; copyEndIndex < otherData.Dates.Count; copyEndIndex++)
                {
                    if (otherData.Dates[copyEndIndex] >= Start)
                    {
                        break;
                    }
                }

                // Insert all the new data at the front of the existing data.
                Dates.InsertRange(0, otherData.Dates.GetRange(0, copyEndIndex));
                Open.InsertRange(0, otherData.Open.GetRange(0, copyEndIndex));
                Close.InsertRange(0, otherData.Close.GetRange(0, copyEndIndex));
                High.InsertRange(0, otherData.High.GetRange(0, copyEndIndex));
                Low.InsertRange(0, otherData.Low.GetRange(0, copyEndIndex));
                Volume.InsertRange(0, otherData.Volume.GetRange(0, copyEndIndex));

                // Extras
                Typical.InsertRange(0, otherData.Typical.GetRange(0, copyEndIndex));
                Median.InsertRange(0, otherData.Median.GetRange(0, copyEndIndex));
                HigherTimeframeTrend.InsertRange(0, otherData.HigherTimeframeTrend.GetRange(0, copyEndIndex));

                for (int i = 0; i < HigherTimeframeValueStrings.Length; i++)
                {
                    string key = HigherTimeframeValueStrings[i];
                    HigherTimeframeValues[key].InsertRange(0, otherData.HigherTimeframeValues[key].GetRange(0, copyEndIndex));
                }
            }

            // Append
            if (otherData.End > End)
            {
                // Find the index where the other data passes the end of the existing data.
                int copyStartIndex;
                for (copyStartIndex = 0; copyStartIndex < otherData.Dates.Count; copyStartIndex++)
                {
                    if (otherData.Dates[copyStartIndex] > End)
                    {
                        break;
                    }
                }

                // Append the new data to the end of the existing data.
                Dates.AddRange(otherData.Dates.GetRange(copyStartIndex, otherData.Dates.Count - copyStartIndex));
                Open.AddRange(otherData.Open.GetRange(copyStartIndex, otherData.Open.Count - copyStartIndex));
                Close.AddRange(otherData.Close.GetRange(copyStartIndex, otherData.Close.Count - copyStartIndex));
                High.AddRange(otherData.High.GetRange(copyStartIndex, otherData.High.Count - copyStartIndex));
                Low.AddRange(otherData.Low.GetRange(copyStartIndex, otherData.Low.Count - copyStartIndex));
                Volume.AddRange(otherData.Volume.GetRange(copyStartIndex, otherData.Volume.Count - copyStartIndex));

                // Extras
                Typical.AddRange(otherData.Typical.GetRange(copyStartIndex, otherData.Typical.Count - copyStartIndex));
                Median.AddRange(otherData.Median.GetRange(copyStartIndex, otherData.Median.Count - copyStartIndex));
                HigherTimeframeTrend.AddRange(otherData.HigherTimeframeTrend.GetRange(copyStartIndex, otherData.HigherTimeframeTrend.Count - copyStartIndex));

                for (int i = 0; i < HigherTimeframeValueStrings.Length; i++)
                {
                    string key = HigherTimeframeValueStrings[i];
                    HigherTimeframeValues[key].AddRange(otherData.HigherTimeframeValues[key].GetRange(copyStartIndex, otherData.HigherTimeframeValues[key].Count - copyStartIndex));
                }
            }

            Start   = Dates[0];
            End     = Dates[Dates.Count - 1];
            NumBars = Dates.Count;
            SaveDates();
        }