예제 #1
0
        public List <StockIntervalData> ParseStockData(byte[] data)
        {
            List <StockIntervalData> result = new List <StockIntervalData>();
            StreamReader             reader = new StreamReader(new MemoryStream(data), Encoding.ASCII);

            reader.ReadLine();
            string line;

            while ((line = reader.ReadLine()) != null)
            {
                try
                {
                    StockIntervalData d        = new StockIntervalData();
                    CultureInfo       provider = CultureInfo.InvariantCulture;
                    string[]          tokens   = line.Split(new char[] { ',' });
                    d.date   = DateTime.ParseExact(tokens[0], "yyyy-MM-dd", provider);
                    d.open   = System.Decimal.Parse(tokens[1], provider);
                    d.high   = System.Convert.ToDecimal(tokens[2], provider);
                    d.low    = System.Convert.ToDecimal(tokens[3], provider);
                    d.close  = System.Convert.ToDecimal(tokens[4], provider);
                    d.volume = System.Convert.ToDecimal(tokens[5], provider);
                    result.Insert(0, d);
                }
                catch (FormatException fex)
                {
                    Console.WriteLine(fex.Message);
                }
            }
            return(result);
        }
예제 #2
0
 public List <StockIntervalData> ConvertTimeFrame(List <StockIntervalData> intervals, TimeFrame timeFrame)
 {
     if (timeFrame == TimeFrame.Day)
     {
         return(intervals);
     }
     else if (timeFrame == TimeFrame.Week)
     {
         bool first = true;
         StockIntervalData        weekData       = new StockIntervalData();
         List <StockIntervalData> weeksIntervals = new List <StockIntervalData>();
         foreach (StockIntervalData dayData in intervals)
         {
             if (first || (dayData.date - weekData.date).Days >= 7)
             {
                 if (!first)
                 {
                     weeksIntervals.Add(weekData);
                 }
                 weekData = dayData;
                 weekData.date.AddDays(-(int)(weekData.date.DayOfWeek));   /// откат  даты на воскресенье
                 first = false;
             }
             else
             {
                 weekData.close = dayData.close;
                 if (dayData.low < weekData.low)
                 {
                     weekData.low = dayData.low;
                 }
                 if (dayData.high > weekData.high)
                 {
                     weekData.high = dayData.high;
                 }
                 weekData.volume += dayData.volume;
             }
         }
         if (!first)
         {
             weeksIntervals.Add(weekData);
         }
         return(weeksIntervals);
     }
     else if (timeFrame == TimeFrame.Month)
     {
         bool first = true;
         StockIntervalData        monthData       = new StockIntervalData();
         List <StockIntervalData> monthsIntervals = new List <StockIntervalData>();
         foreach (StockIntervalData dayData in intervals)
         {
             if (first || monthData.date.Month != dayData.date.Month || monthData.date.Year != dayData.date.Year)
             {
                 if (!first)
                 {
                     monthsIntervals.Add(monthData);
                 }
                 monthData      = dayData;
                 monthData.date = new DateTime(dayData.date.Year, dayData.date.Month, 1);
                 first          = false;
             }
             else
             {
                 monthData.close = dayData.close;
                 if (dayData.low < monthData.low)
                 {
                     monthData.low = dayData.low;
                 }
                 if (dayData.high > monthData.high)
                 {
                     monthData.high = dayData.high;
                 }
                 monthData.volume += dayData.volume;
             }
         }
         if (!first)
         {
             monthsIntervals.Add(monthData);
         }
         return(monthsIntervals);
     }
     else
     {
         return(intervals);
     }
 }
예제 #3
0
        public List<StockIntervalData> ConvertTimeFrame(List<StockIntervalData> intervals ,TimeFrame timeFrame )
        {
            if (timeFrame == TimeFrame.Day)
            {
                return intervals;
            }
            else if (timeFrame == TimeFrame.Week)
            {
                bool first = true;
                StockIntervalData weekData = new StockIntervalData();
                List<StockIntervalData> weeksIntervals = new List<StockIntervalData>();
                foreach (StockIntervalData dayData in intervals)
                {
                    if(first || (dayData.date - weekData.date).Days>=7 )
                    {
                        if (!first)
                            weeksIntervals.Add(weekData);
                        weekData = dayData;
                        weekData.date.AddDays(-(int)(weekData.date.DayOfWeek));   /// откат  даты на воскресенье
                        first = false;
                    }
                    else
                    {
                        weekData.close = dayData.close;
                        if (dayData.low < weekData.low)
                            weekData.low = dayData.low;
                        if (dayData.high > weekData.high)
                            weekData.high = dayData.high;
                        weekData.volume += dayData.volume;
                    }

                }
                if (!first)
                {
                    weeksIntervals.Add(weekData);
                }
                return weeksIntervals;
            }
            else if (timeFrame == TimeFrame.Month)
            {
                bool first = true;
                StockIntervalData monthData = new StockIntervalData();
                List<StockIntervalData> monthsIntervals = new List<StockIntervalData>();
                foreach (StockIntervalData dayData in intervals)
                {
                    if (first || monthData.date.Month != dayData.date.Month || monthData.date.Year != dayData.date.Year)
                    {
                        if (!first)
                            monthsIntervals.Add(monthData);
                        monthData = dayData;
                        monthData.date = new DateTime(dayData.date.Year, dayData.date.Month, 1);
                        first = false;
                    }
                    else
                    {
                        monthData.close = dayData.close;
                        if (dayData.low < monthData.low)
                            monthData.low = dayData.low;
                        if (dayData.high > monthData.high)
                            monthData.high = dayData.high;
                        monthData.volume += dayData.volume;
                    }
                }
                if (!first)
                {
                    monthsIntervals.Add(monthData);
                }
                return monthsIntervals;
            }
            else
            {

                return intervals;
            }
        }
예제 #4
0
 public List<StockIntervalData> ParseStockData(byte[] data)
 {
     List<StockIntervalData> result = new List<StockIntervalData>();
     StreamReader reader = new StreamReader(new MemoryStream(data), Encoding.ASCII);
     reader.ReadLine();
     string line;
     while ((line = reader.ReadLine()) != null)
     {
         try
         {
             StockIntervalData d = new StockIntervalData();
             CultureInfo provider = CultureInfo.InvariantCulture;
             string[] tokens = line.Split(new char[] { ',' });
             d.date = DateTime.ParseExact(tokens[0], "yyyy-MM-dd", provider);
             d.open = System.Decimal.Parse(tokens[1], provider);
             d.high = System.Convert.ToDecimal(tokens[2], provider);
             d.low = System.Convert.ToDecimal(tokens[3], provider);
             d.close = System.Convert.ToDecimal(tokens[4], provider);
             d.volume = System.Convert.ToDecimal(tokens[5], provider);
             result.Insert(0, d);
         }
         catch (FormatException fex)
         {
             Console.WriteLine(fex.Message);
         }
     }
     return result;
 }