Esempio n. 1
0
 public static OHLCBar HistoricalDataEventArgsToOHLCBar(Krs.Ats.IBNet.HistoricalDataEventArgs e)
 {
     var bar = new OHLCBar
     {
         DTOpen = e.Date,
         Open = e.Open,
         High = e.High,
         Low = e.Low,
         Close = e.Close,
         Volume = e.Volume,
     };
     return bar;
 }
Esempio n. 2
0
        private OHLCBar ParseLine(string[] items, string[] columns, decimal priceMultiplier, int volumeMultiplier)
        {
            var bar = new OHLCBar();
            TimeSpan? closingTime = null;
            bool success;

            for (int i = 0; i < items.Length; i++)
            {
                switch (columns[i])
                {
                    case "Date":
                        DateTime tmpDate;
                        success = DateTime.TryParseExact(
                            items[i], DateFormatTextBox.Text, CultureInfo.InvariantCulture, DateTimeStyles.None, out tmpDate);
                         if (!success)
                         {
                             throw new Exception("Incorrect date format.");
                         }
                         else
                         {
                             bar.DT = new DateTime(tmpDate.Ticks);
                         }
                        break;

                    case "DateTime":
                        DateTime tmpDT;
                        success = DateTime.TryParseExact(
                            items[i], DateTimeFormatTextBox.Text, CultureInfo.InvariantCulture, DateTimeStyles.None, out tmpDT);
                         if (!success)
                         {
                             throw new Exception("Incorrect datetime format.");
                         }
                         else
                         {
                             bar.DT = new DateTime(tmpDT.Ticks);
                         }
                        break;

                    case "Time":
                        DateTime tmpTS;
                        success = DateTime.TryParseExact(
                            items[i], TimeFormatTextBox.Text, CultureInfo.InvariantCulture, DateTimeStyles.None, out tmpTS);
                         if (!success)
                         {
                             throw new Exception("Incorrect time format.");
                         }
                         else
                         {
                             closingTime = TimeSpan.FromSeconds(tmpTS.TimeOfDay.TotalSeconds);
                         }
                        break;

                    case "Open":
                        bar.Open = priceMultiplier * decimal.Parse(items[i]);
                        break;

                    case "High":
                        bar.High = priceMultiplier * decimal.Parse(items[i]);
                        break;

                    case "Low":
                        bar.Low = priceMultiplier * decimal.Parse(items[i]);
                        break;

                    case "Close":
                        bar.Close = priceMultiplier * decimal.Parse(items[i]);
                        break;

                    case "AdjClose":
                        bar.AdjClose = priceMultiplier * decimal.Parse(items[i]);
                        break;

                    case "Volume":
                        bar.Volume = volumeMultiplier * int.Parse(items[i]);
                        break;

                    case "OpenInterest":
                        bar.OpenInterest = int.Parse(items[i]);
                        break;

                    case "Dividends":
                        bar.Dividend = decimal.Parse(items[i]);
                        break;

                    case "Splits":
                        bar.Split = decimal.Parse(items[i]);
                        break;
                }
            }

            //do the time addition
            if (closingTime != null)
            {
                bar.DT += closingTime.Value;
            }

            return bar;
        }
Esempio n. 3
0
        private static TimeSeries TimeSeriesFromFXRates(IEnumerable<FXRate> rates)
        {
            var bars = new List<OHLCBar>();
            foreach (var rate in rates)
            {
                var bar = new OHLCBar
                {
                    Open = rate.Rate,
                    High = rate.Rate,
                    Low = rate.Rate,
                    Close = rate.Rate,
                    AdjOpen = rate.Rate,
                    AdjHigh = rate.Rate,
                    AdjLow = rate.Rate,
                    AdjClose = rate.Rate,
                    DT = rate.Date
                };
                bars.Add(bar);
            }

            return new TimeSeries(bars);
        }
Esempio n. 4
0
        /// <summary>
        /// Takes XML formated data from Quandl and turns it into a List of OHLCBars.
        /// </summary>
        public static List<OHLCBar> ParseXML(string data)
        {
            var doc = XDocument.Parse(data);
            var bars = new List<OHLCBar>();

            //standard checks that the XML is what it should be
            if (doc.Root == null)
            {
                throw new Exception("XML Parse error: no root.");
            }

            if (doc.Root.Element("column-names") == null)
            {
                throw new Exception("Quandl: Column names element not found.");
            }

            //this simply gives us a list of column names, needed to parse the data correctly later on
            List<string> columns = doc.Root.Element("column-names").Elements("column-name").Select(x => x.Value).ToList();

            //some columns are required..
            if (!columns.Contains("Date"))
            {
                throw new Exception("Quandl: no date column, cannot parse data.");
            }

            var dataElement = doc.Root.Element("data");
            if (dataElement == null)
            {
                throw new Exception("Quandl: No data present in XML file.");
            }

            bool skipBar, dateSet;
            //finally loop through each bar and try to parse it
            foreach (var barElements in dataElement.Elements("datum"))
            {
                skipBar = false;
                dateSet = false;
                decimal parsedValue;

                var bar = new OHLCBar();
                int counter = 0;
                foreach (var price in barElements.Elements("datum"))
                {
                    bool isNull = price.Attribute("nil") != null; //if the attribute "nil" exists, then the value of this field is null

                    switch (columns[counter])
                    {
                        case "Date":
                            if (isNull)
                            {
                                skipBar = true;
                                break;
                            }

                            bar.DT = DateTime.ParseExact(price.Value, "yyyy-MM-dd", CultureInfo.InvariantCulture);
                            dateSet = true;
                            break;

                        case "Open":
                            if (decimal.TryParse(price.Value, NumberStyles.Number | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out parsedValue))
                                bar.Open = parsedValue;
                            break;

                        case "High":
                            if (decimal.TryParse(price.Value, NumberStyles.Number | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out parsedValue))
                                bar.High = parsedValue;
                            break;

                        case "Low":
                            if (decimal.TryParse(price.Value, NumberStyles.Number | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out parsedValue))
                                bar.Low = parsedValue;
                            break;

                        case "Close":
                            if (decimal.TryParse(price.Value, NumberStyles.Number | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out parsedValue))
                                bar.Close = parsedValue;
                            break;

                        case "Settle": //some futures data series have "settle" field instead of "close"
                            if (!isNull && decimal.TryParse(price.Value, NumberStyles.Number | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out parsedValue))
                                bar.Close = parsedValue;
                            break;

                            //volume and OI are not represented as ints for some reason
                        case "Volume":
                            double volume;
                            if (!isNull && double.TryParse(price.Value, NumberStyles.Number | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out volume))
                                bar.Volume = (long)volume;
                            break;

                        case "Open Interest":
                            double openInterest;
                            if (!isNull && double.TryParse(price.Value, NumberStyles.Number | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out openInterest))
                                bar.OpenInterest = (int)openInterest;
                            break;

                        case "Adjusted Close":
                            if (decimal.TryParse(price.Value, NumberStyles.Number | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out parsedValue))
                                bar.AdjClose = parsedValue;
                            break;
                    }

                    counter++;
                }

                //if the adjusted close is set, generate adjusted OHL
                if (bar.AdjClose.HasValue)
                {
                    decimal adjFactor = bar.AdjClose.Value / bar.Close;
                    bar.AdjOpen = bar.Open * adjFactor;
                    bar.AdjHigh = bar.High * adjFactor;
                    bar.AdjLow = bar.Low * adjFactor;
                }

                //make sure that the date has been set
                if (!dateSet)
                    skipBar = true;

                if (!skipBar)
                    bars.Add(bar);
            }

            return bars;
        }
Esempio n. 5
0
 public void AddDataAsync(OHLCBar data, Instrument instrument, BarSize frequency, bool overwrite = false)
 {
     throw new NotImplementedException();
 }