private ExchangeRateResponse ToResponse(YahooManaged.Base.Response <HistQuotesResult> resp, YCurrencyID[] currencies) { List <ExchangeRateData> lst = new List <ExchangeRateData>(); if (resp.Result != null) { foreach (HistQuotesDataChain hqc in resp.Result.Chains) { if (hqc.Count > 0) { YCurrencyID cur = FinanceHelper.YCurrencyIDFromString(hqc.ID); if (cur != null) { QuotesData q = new QuotesData(); q.SetID(hqc.ID); HistQuotesData hqd = (HistQuotesData)hqc[0]; q.Change = hqd.Close - hqd.PreviousClose; q.LastTradePriceOnly = hqd.Close; q.LastTradeDate = hqd.TradingDate; q.Volume = hqd.Volume; lst.Add(new ExchangeRateData(cur.BaseCurrency, cur.DepCurrency, q)); } } } } return(new ExchangeRateResponse(resp.Connection, new ExchangeRateResult(lst.ToArray(), currencies))); }
/// <summary> /// Tries to read a list of historic quote periods from a CSV formatted text /// </summary> /// <param name="csvText">The CSV formatted text</param> /// <param name="delimiter">The delimiter of the CSV text</param> /// <param name="culture">The used culture for formating dates and numbers. If parameter value is null/Nothing, default Culture will be used.</param> /// <returns>The converted historic quote periods or Nothing</returns> /// <remarks></remarks> public static HistQuotesData[] ToHistQuotesData(string csvText, char delimiter, System.Globalization.CultureInfo culture = null) { List <HistQuotesData> lst = new List <HistQuotesData>(); if (csvText != string.Empty) { System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture; if (culture != null) { ci = culture; } string[][] table = MyHelper.CsvTextToStringTable(csvText, delimiter); if (table.Length > 1) { for (int i = 0; i <= table.Length - 1; i++) { if (table[i].Length == 7) { HistQuotesData qd = new HistQuotesData(); System.DateTime t1; double t2; double t3; double t4; double t5; double t6; long t7; if (System.DateTime.TryParse(table[i][0], culture, System.Globalization.DateTimeStyles.None, out t1) && double.TryParse(table[i][1], System.Globalization.NumberStyles.Currency, culture, out t2) && double.TryParse(table[i][2], System.Globalization.NumberStyles.Currency, culture, out t3) && double.TryParse(table[i][3], System.Globalization.NumberStyles.Currency, culture, out t4) && double.TryParse(table[i][4], System.Globalization.NumberStyles.Currency, culture, out t5) && double.TryParse(table[i][6], System.Globalization.NumberStyles.Currency, culture, out t6) && long.TryParse(table[i][5], System.Globalization.NumberStyles.Integer, culture, out t7)) { qd.TradingDate = t1; qd.Open = t2; qd.High = t3; qd.Low = t4; qd.Close = t5; qd.CloseAdjusted = t6; qd.Volume = t7; lst.Add(qd); } } } } } return(lst.ToArray()); }
private HistQuotesDataChain[] ConvertCSV(string text, string id) { List <HistQuotesData> lst = new List <HistQuotesData>(); if (text != string.Empty) { System.Globalization.CultureInfo ci = FinanceHelper.DefaultYqlCulture; string[][] table = MyHelper.CsvTextToStringTable(text, ','); if (table.Length > 1) { for (int i = 0; i <= table.Length - 1; i++) { if (table[i].Length == 7) { HistQuotesData qd = new HistQuotesData(); DateTime t1; double t2; double t3; double t4; double t5; double t6; long t7; if (System.DateTime.TryParse(table[i][0], ci, System.Globalization.DateTimeStyles.None, out t1) && double.TryParse(table[i][1], System.Globalization.NumberStyles.Currency, ci, out t2) && double.TryParse(table[i][2], System.Globalization.NumberStyles.Currency, ci, out t3) && double.TryParse(table[i][3], System.Globalization.NumberStyles.Currency, ci, out t4) && double.TryParse(table[i][4], System.Globalization.NumberStyles.Currency, ci, out t5) && double.TryParse(table[i][6], System.Globalization.NumberStyles.Currency, ci, out t6) && long.TryParse(table[i][5], System.Globalization.NumberStyles.Integer, ci, out t7)) { qd.TradingDate = t1; qd.Open = t2; qd.High = t3; qd.Low = t4; qd.Close = t5; qd.CloseAdjusted = t6; qd.Volume = t7; lst.Add(qd); } } } } } return(new HistQuotesDataChain[] { new HistQuotesDataChain(id, lst.ToArray()) }); }
/// <summary> /// Writes HistQuoteData to XML format /// </summary> /// <param name="writer">The used XML writer</param> /// <param name="quote">The used HistQuoteData</param> /// <param name="culture">The used culture for formating dates and numbers. If parameter value is null/Nothing, default Culture will be used.</param> /// <remarks>Creates a main node for all periods</remarks> public static void FromHistQuoteData(System.Xml.XmlWriter writer, HistQuotesData quote, System.Globalization.CultureInfo culture = null) { System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture; if (culture != null) { ci = culture; } writer.WriteStartElement("HistQuote"); writer.WriteStartElement(FinanceHelper.NameHistQuoteDate); writer.WriteValue(quote.TradingDate.ToShortDateString()); writer.WriteEndElement(); writer.WriteStartElement(FinanceHelper.NameHistQuoteOpen); writer.WriteValue(MyHelper.ObjectToString(quote.Open, ci)); writer.WriteEndElement(); writer.WriteStartElement(FinanceHelper.NameHistQuoteHigh); writer.WriteValue(MyHelper.ObjectToString(quote.High, ci)); writer.WriteEndElement(); writer.WriteStartElement(FinanceHelper.NameHistQuoteLow); writer.WriteValue(MyHelper.ObjectToString(quote.Low, ci)); writer.WriteEndElement(); writer.WriteStartElement(FinanceHelper.NameHistQuoteClose); writer.WriteValue(MyHelper.ObjectToString(quote.Close, ci)); writer.WriteEndElement(); writer.WriteStartElement(FinanceHelper.NameHistQuoteVolume); writer.WriteValue(MyHelper.ObjectToString(quote.Volume, ci)); writer.WriteEndElement(); writer.WriteStartElement(FinanceHelper.NameHistQuoteAdjClose); writer.WriteValue(MyHelper.ObjectToString(quote.CloseAdjusted, ci)); writer.WriteEndElement(); writer.WriteEndElement(); }
/// <summary> /// Writes HistQuoteData to XML format /// </summary> /// <param name="writer">The used XML writer</param> /// <param name="quote">The used HistQuoteData</param> /// <param name="culture">The used culture for formating dates and numbers. If parameter value is null/Nothing, default Culture will be used.</param> /// <remarks>Creates a main node for all periods</remarks> public static void FromHistQuoteData(System.Xml.XmlWriter writer, HistQuotesData quote, System.Globalization.CultureInfo culture = null) { System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture; if (culture != null) ci = culture; writer.WriteStartElement("HistQuote"); writer.WriteStartElement(FinanceHelper.NameHistQuoteDate); writer.WriteValue(quote.TradingDate.ToShortDateString()); writer.WriteEndElement(); writer.WriteStartElement(FinanceHelper.NameHistQuoteOpen); writer.WriteValue(MyHelper.ObjectToString(quote.Open, ci)); writer.WriteEndElement(); writer.WriteStartElement(FinanceHelper.NameHistQuoteHigh); writer.WriteValue(MyHelper.ObjectToString(quote.High, ci)); writer.WriteEndElement(); writer.WriteStartElement(FinanceHelper.NameHistQuoteLow); writer.WriteValue(MyHelper.ObjectToString(quote.Low, ci)); writer.WriteEndElement(); writer.WriteStartElement(FinanceHelper.NameHistQuoteClose); writer.WriteValue(MyHelper.ObjectToString(quote.Close, ci)); writer.WriteEndElement(); writer.WriteStartElement(FinanceHelper.NameHistQuoteVolume); writer.WriteValue(MyHelper.ObjectToString(quote.Volume, ci)); writer.WriteEndElement(); writer.WriteStartElement(FinanceHelper.NameHistQuoteAdjClose); writer.WriteValue(MyHelper.ObjectToString(quote.CloseAdjusted, ci)); writer.WriteEndElement(); writer.WriteEndElement(); }
private HistQuotesDataChain[] ConvertJSON(string text, string[] ids) { List <HistQuotesDataChain> quotes = new List <HistQuotesDataChain>(); HistQuotesDataChain chain = new HistQuotesDataChain(); Regex reg = new Regex("{\"col0\":\".*?\",\"col1\":\".*?\",\"col2\":\".*?\",\"col3\":\".*?\",\"col4\":\".*?\",\"col5\":\".*?\",\"col6\":\".*?\"}"); MatchCollection matches = reg.Matches(text); if (matches.Count > 0) { foreach (Match m in matches) { if (m.Success) { string[] columns = m.Value.Replace("{", "").Replace("}", "").Split(new char[] { ',' }); if (columns.Length == 7) { if (columns[0] == "\"col0\":\"Date\"") { if (chain.Count > 0) { string id = string.Empty; if (quotes.Count <= ids.Length - 1) { id = ids[quotes.Count]; } chain.SetID(id); quotes.Add(chain); chain = new HistQuotesDataChain(); } } else { HistQuotesData hq = new HistQuotesData(); foreach (string col in columns) { string[] values = col.Replace("\"", "").Split(':'); if (values.Length == 2) { switch (values[0]) { case "col0": DateTime t1; if (System.DateTime.TryParse(values[1], FinanceHelper.DefaultYqlCulture, System.Globalization.DateTimeStyles.AdjustToUniversal, out t1)) { hq.TradingDate = t1; } break; case "col1": double t2; if (double.TryParse(values[1], System.Globalization.NumberStyles.Any, FinanceHelper.DefaultYqlCulture, out t2)) { hq.Open = t2; } break; case "col2": double t3; if (double.TryParse(values[1], System.Globalization.NumberStyles.Any, FinanceHelper.DefaultYqlCulture, out t3)) { hq.High = t3; } break; case "col3": double t4; if (double.TryParse(values[1], System.Globalization.NumberStyles.Any, FinanceHelper.DefaultYqlCulture, out t4)) { hq.Low = t4; } break; case "col4": double t5; if (double.TryParse(values[1], System.Globalization.NumberStyles.Any, FinanceHelper.DefaultYqlCulture, out t5)) { hq.Close = t5; } break; case "col5": long t6; if (long.TryParse(values[1], System.Globalization.NumberStyles.Any, FinanceHelper.DefaultYqlCulture, out t6)) { hq.Volume = t6; } break; case "col6": double t7; if (double.TryParse(values[1], System.Globalization.NumberStyles.Any, FinanceHelper.DefaultYqlCulture, out t7)) { hq.CloseAdjusted = t7; } break; } } } chain.Add(hq); } } } } if (chain.Count > 0) { string id = string.Empty; if (quotes.Count <= ids.Length - 1) { id = ids[quotes.Count]; } chain.SetID(id); quotes.Add(chain); } chain = null; } return(quotes.ToArray()); }
/// <summary> /// Tries to read a list of historic quote periods from a CSV formatted text /// </summary> /// <param name="csvText">The CSV formatted text</param> /// <param name="delimiter">The delimiter of the CSV text</param> /// <param name="culture">The used culture for formating dates and numbers. If parameter value is null/Nothing, default Culture will be used.</param> /// <returns>The converted historic quote periods or Nothing</returns> /// <remarks></remarks> public static HistQuotesData[] ToHistQuotesData(string csvText, char delimiter, System.Globalization.CultureInfo culture = null) { List<HistQuotesData> lst = new List<HistQuotesData>(); if (csvText != string.Empty) { System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture; if (culture != null) ci = culture; string[][] table = MyHelper.CsvTextToStringTable(csvText, delimiter); if (table.Length > 1) { for (int i = 0; i <= table.Length - 1; i++) { if (table[i].Length == 7) { HistQuotesData qd = new HistQuotesData(); System.DateTime t1; double t2; double t3; double t4; double t5; double t6; long t7; if (System.DateTime.TryParse(table[i][0], culture, System.Globalization.DateTimeStyles.None, out t1) && double.TryParse(table[i][1], System.Globalization.NumberStyles.Currency, culture, out t2) && double.TryParse(table[i][2], System.Globalization.NumberStyles.Currency, culture, out t3) && double.TryParse(table[i][3], System.Globalization.NumberStyles.Currency, culture, out t4) && double.TryParse(table[i][4], System.Globalization.NumberStyles.Currency, culture, out t5) && double.TryParse(table[i][6], System.Globalization.NumberStyles.Currency, culture, out t6) && long.TryParse(table[i][5], System.Globalization.NumberStyles.Integer, culture, out t7)) { qd.TradingDate = t1; qd.Open = t2; qd.High = t3; qd.Low = t4; qd.Close = t5; qd.CloseAdjusted = t6; qd.Volume = t7; lst.Add(qd); } } } } } return lst.ToArray(); }
/// <summary> /// Tries to read a HistQuoteData from XML /// </summary> /// <param name="node">The XML node of HistQuoteData</param> /// <param name="culture">The used culture for formating dates and numbers. If parameter value is null/Nothing, default Culture will be used.</param> /// <returns>The converted historic quote data or Nothing</returns> /// <remarks></remarks> public static HistQuotesData ToHistQuoteData(XElement node, System.Globalization.CultureInfo culture = null) { if (node != null && node.Name.LocalName.ToLower() == "histquote" && MyHelper.EnumToArray(node.Elements()).Length > 0) { System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture; if (culture != null) ci = culture; XElement[] elm = MyHelper.EnumToArray(node.Elements()); HistQuotesData qd = new HistQuotesData(); foreach (XElement cNode in node.Elements()) { switch (cNode.Name.LocalName) { case FinanceHelper.NameHistQuoteDate: System.DateTime t1; if (System.DateTime.TryParse(elm[0].Value, out t1)) qd.TradingDate = t1; break; case FinanceHelper.NameHistQuoteOpen: double t2; if (double.TryParse(elm[1].Value, System.Globalization.NumberStyles.Currency, ci, out t2)) qd.Open = t2; break; case FinanceHelper.NameHistQuoteHigh: double t3; if (double.TryParse(elm[2].Value, System.Globalization.NumberStyles.Currency, ci, out t3)) qd.High = t3; break; case FinanceHelper.NameHistQuoteLow: double t4; if (double.TryParse(elm[3].Value, System.Globalization.NumberStyles.Currency, ci, out t4)) qd.Low = t4; break; case FinanceHelper.NameHistQuoteClose: double t5; if (double.TryParse(elm[4].Value, System.Globalization.NumberStyles.Currency, ci, out t5)) qd.Close = t5; break; case FinanceHelper.NameHistQuoteAdjClose: double t6; if (double.TryParse(elm[6].Value, System.Globalization.NumberStyles.Currency, ci, out t6)) qd.CloseAdjusted = t6; break; case FinanceHelper.NameHistQuoteVolume: long t7; if (long.TryParse(elm[5].Value, System.Globalization.NumberStyles.Integer, ci, out t7)) qd.Volume = t7; break; } } return qd; } else { return null; } }
/// <summary> /// Tries to read a HistQuoteData from XML /// </summary> /// <param name="node">The XML node of HistQuoteData</param> /// <param name="culture">The used culture for formating dates and numbers. If parameter value is null/Nothing, default Culture will be used.</param> /// <returns>The converted historic quote data or Nothing</returns> /// <remarks></remarks> public static HistQuotesData ToHistQuoteData(XElement node, System.Globalization.CultureInfo culture = null) { if (node != null && node.Name.LocalName.ToLower() == "histquote" && MyHelper.EnumToArray(node.Elements()).Length > 0) { System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture; if (culture != null) { ci = culture; } XElement[] elm = MyHelper.EnumToArray(node.Elements()); HistQuotesData qd = new HistQuotesData(); foreach (XElement cNode in node.Elements()) { switch (cNode.Name.LocalName) { case FinanceHelper.NameHistQuoteDate: System.DateTime t1; if (System.DateTime.TryParse(elm[0].Value, out t1)) { qd.TradingDate = t1; } break; case FinanceHelper.NameHistQuoteOpen: double t2; if (double.TryParse(elm[1].Value, System.Globalization.NumberStyles.Currency, ci, out t2)) { qd.Open = t2; } break; case FinanceHelper.NameHistQuoteHigh: double t3; if (double.TryParse(elm[2].Value, System.Globalization.NumberStyles.Currency, ci, out t3)) { qd.High = t3; } break; case FinanceHelper.NameHistQuoteLow: double t4; if (double.TryParse(elm[3].Value, System.Globalization.NumberStyles.Currency, ci, out t4)) { qd.Low = t4; } break; case FinanceHelper.NameHistQuoteClose: double t5; if (double.TryParse(elm[4].Value, System.Globalization.NumberStyles.Currency, ci, out t5)) { qd.Close = t5; } break; case FinanceHelper.NameHistQuoteAdjClose: double t6; if (double.TryParse(elm[6].Value, System.Globalization.NumberStyles.Currency, ci, out t6)) { qd.CloseAdjusted = t6; } break; case FinanceHelper.NameHistQuoteVolume: long t7; if (long.TryParse(elm[5].Value, System.Globalization.NumberStyles.Integer, ci, out t7)) { qd.Volume = t7; } break; } } return(qd); } else { return(null); } }