/// <summary> /// Starts an asynchronous download of quotes data. /// </summary> /// <param name="managedIDs">The list of managed IDs</param> /// <param name="properties">The properties of each quote data. If parameter is null/Nothing, Symbol and LastTradePrizeOnly will set as property. In this case, with YQL server you will get every available property.</param> /// <param name="userArgs">Individual user argument</param> /// <remarks></remarks> public void DownloadAsync(IEnumerable <IID> managedIDs, IEnumerable <QuoteProperty> properties, object userArgs) { if (managedIDs == null) { throw new ArgumentNullException("managedIDs", "The passed list is null."); } this.DownloadAsync(FinanceHelper.IIDsToStrings(managedIDs), properties, userArgs); }
/// <summary> /// Downloads company informations with passed IDs. /// </summary> /// <param name="ids">The managed list of IDs of the companies</param> /// <returns></returns> /// <remarks></remarks> public YahooManaged.Base.Response <CompanyInfoResult> Download(IEnumerable <IID> ids) { if (ids == null) { throw new ArgumentNullException("ids", "The passed list is null."); } return(this.Download(FinanceHelper.IIDsToStrings(ids))); }
/// <summary> /// Downloads historic quotes data. /// </summary> /// <param name="managedIDs">The managed ID</param> /// <param name="fromDate">The startdate of the reviewed period</param> /// <param name="todate">The enddate of the reviewed period</param> /// <param name="interval">The trading period interval</param> /// <returns></returns> /// <remarks></remarks> public YahooManaged.Base.Response <HistQuotesResult> Download(IEnumerable <IID> managedIDs, System.DateTime fromDate, System.DateTime toDate, HistQuotesInterval interval) { if (managedIDs == null) { throw new ArgumentNullException("managedIDs", "The passed list is null."); } return(this.Download(FinanceHelper.IIDsToStrings(managedIDs), fromDate, toDate, interval)); }
/// <summary> /// Downloads quotes data. /// </summary> /// <param name="managedIDs">The list of managed IDs</param> /// <param name="properties">The properties of each quote data. If parameter is null/Nothing, Symbol and LastTradePrizeOnly will set as property. In this case, with YQL server you will get every available property.</param> /// <returns></returns> /// <remarks></remarks> public YahooManaged.Base.Response <QuotesResult> Download(IEnumerable <IID> managedIDs, IEnumerable <QuoteProperty> properties) { if (managedIDs == null) { throw new ArgumentNullException("managedIDs", "The passed list is null."); } return(this.Download(FinanceHelper.IIDsToStrings(managedIDs), properties)); }
public void DownloadAsync(IEnumerable <IID> ids, object userArgs) { if (ids == null) { throw new ArgumentNullException("ids", "The passed list is null."); } this.DownloadAsync(FinanceHelper.IIDsToStrings(ids), userArgs); }
private string DownloadURL(IEnumerable <string> ids, System.DateTime fromDate, System.DateTime toDate, HistQuotesInterval interval) { string[] idArr = MyHelper.EnumToArray(ids); if (idArr.Length == 0) { throw new ArgumentNullException("unmanagedIDs", "The passed list is empty"); } else { if (idArr.Length == 1) { if (idArr[0].Trim() == string.Empty) { throw new ArgumentNullException("id", "The passed ID is empty."); } else { System.Text.StringBuilder url = new System.Text.StringBuilder(); url.Append("http://ichart.yahoo.com/table.csv?s="); url.Append(Uri.EscapeDataString(MyHelper.CleanYqlParam(FinanceHelper.CleanIndexID(idArr[0]).ToUpper()))); url.Append("&a="); url.Append(fromDate.Month - 1); url.Append("&b="); url.Append(fromDate.Day); url.Append("&c="); url.Append(fromDate.Year); url.Append("&d="); url.Append(toDate.Month - 1); url.Append("&e="); url.Append(toDate.Day); url.Append("&f="); url.Append(toDate.Year); url.Append("&g="); url.Append(FinanceHelper.GetHistQuotesInterval(interval)); url.Append("&ignore=.csv"); return(url.ToString()); } } else { System.Text.StringBuilder url = new System.Text.StringBuilder(); url.Append("url in ("); for (int i = 0; i <= idArr.Length - 1; i++) { url.Append('\''); url.Append(this.DownloadURL(new string[] { MyHelper.CleanYqlParam(FinanceHelper.CleanIndexID(idArr[i]).ToUpper()) }, fromDate, toDate, interval)); url.Append('\''); if (i < idArr.Length - 1) { url.Append(','); } } url.Append(")"); return(MyHelper.YqlUrl("*", "csv", url.ToString(), null, true)); } } }
/// <summary> /// Downloads historic quotes data. /// </summary> /// <param name="unmanagedIDs">The unmanaged ID</param> /// <param name="fromDate">The startdate of the reviewed period</param> /// <param name="todate">The enddate of the reviewed period</param> /// <param name="interval">The trading period interval</param> /// <returns></returns> /// <remarks></remarks> public YahooManaged.Base.Response <HistQuotesResult> Download(IEnumerable <string> unmanagedIDs, System.DateTime fromDate, System.DateTime toDate, HistQuotesInterval interval) { if (unmanagedIDs == null) { throw new ArgumentNullException("unmanagedID", "The passed ID is empty."); } this.CheckDates(fromDate, toDate); string[] ids = FinanceHelper.CleanIDfromAT(unmanagedIDs); return(this.Download(new HistQuotesDownloadSettings(ids, fromDate, toDate, interval))); }
public YahooManaged.Base.Response <QuoteOptionsResult> Download(IEnumerable <IID> managedIDs, System.DateTime expirationDate) { if (managedIDs == null) { throw new ArgumentNullException("managedIDs", "The passed list is null."); } else { return(this.Download(FinanceHelper.IIDsToStrings(managedIDs), expirationDate)); } }
public void DownloadAsync(IEnumerable <IID> managedIDs, System.DateTime expirationDate, object userArgs = null) { if (managedIDs == null) { throw new ArgumentNullException("managedIDs", "The passed list is null."); } else { this.DownloadAsync(FinanceHelper.IIDsToStrings(managedIDs), expirationDate); } }
protected override string GetUrl() { if (mSector.HasValue) { return("http://biz.yahoo.com/p/csv/" + ((int)mSector.Value).ToString() + FinanceHelper.MarketQuotesRankingTypeString(this.RankedBy) + FinanceHelper.MarketQuotesRankingDirectionString(this.RankDirection) + ".csv"); } else if (mIndustry.HasValue) { return("http://biz.yahoo.com/p/csv/" + ((int)mIndustry.Value).ToString() + FinanceHelper.MarketQuotesRankingTypeString(this.RankedBy) + FinanceHelper.MarketQuotesRankingDirectionString(this.RankDirection) + ".csv"); } else { return("http://biz.yahoo.com/p/csv/" + "s_" + FinanceHelper.MarketQuotesRankingTypeString(this.RankedBy) + FinanceHelper.MarketQuotesRankingDirectionString(this.RankDirection) + ".csv"); } }
/// <summary> /// Writes a QuoteData to XML format /// </summary> /// <param name="writer">The used XML writer</param> /// <param name="quote">The used QuoteData</param> /// <param name="properties">The used properties of the quotes</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></remarks> public static void FromQuoteData(System.Xml.XmlWriter writer, QuotesData quote, IEnumerable <QuoteProperty> properties, System.Globalization.CultureInfo culture = null) { System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture; if (culture != null) { ci = culture; } writer.WriteStartElement("Quote"); if (quote[QuoteProperty.Symbol] != null) { writer.WriteAttributeString("ID", quote[QuoteProperty.Symbol].ToString()); } QuoteProperty[] prps = FinanceHelper.CheckPropertiesOfQuotesData(new QuotesData[] { quote }, properties); foreach (QuoteProperty qp in prps) { writer.WriteStartElement(qp.ToString()); writer.WriteValue(MyHelper.ObjectToString(quote[qp], ci)); writer.WriteEndElement(); } writer.WriteEndElement(); }
protected override CompanyProfileResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { CompanyProfileData res = null; System.Globalization.CultureInfo convCulture = new System.Globalization.CultureInfo("en-US"); if (stream != null) { XDocument doc = MyHelper.ParseXmlDocument(stream); XElement resultNode = XPath.GetElement("//table[@id=\"yfncsumtab\"]/tr[2]", doc); if (resultNode != null) { res = new CompanyProfileData(); res.SetID(FinanceHelper.CleanIndexID(((CompanyProfileDownloadSettings)settings).ID.ToUpper())); XElement nameNode = XPath.GetElement("td[1]/b[1]", resultNode); if (nameNode != null) { res.CompanyName = nameNode.Value; } XElement addressNode = XPath.GetElement("td[1]", resultNode); if (addressNode != null) { System.Text.StringBuilder formattedAddress = new System.Text.StringBuilder(); try { string addNodeStr = addressNode.ToString(); if (addNodeStr != string.Empty) { addNodeStr = addNodeStr.Substring(addNodeStr.IndexOf("/>") + 2); string[] rawAddress = addNodeStr.Substring(0, addNodeStr.IndexOf("Website")).Split(new string[] { "<b>", "<br />", "</b>", "\r", "\n", " - ", "</a>" }, StringSplitOptions.RemoveEmptyEntries); if (rawAddress.Length >= 7) { foreach (string line in rawAddress) { string l = line.Trim(); if (l != string.Empty && !l.StartsWith("<a") && l != "Map") { formattedAddress.AppendLine(l); } } } } } catch (Exception ex) { } res.Address = formattedAddress.ToString().TrimEnd(); } XElement indicesNode = XPath.GetElement("td[1]/table[2]/tr/td/table/tr/td[2]", resultNode); if (indicesNode != null) { List <KeyValuePair <string, string> > lstIndices = new List <KeyValuePair <string, string> >(); foreach (XElement indexLink in indicesNode.Elements()) { if (indexLink.Name.LocalName == "a") { string indexID = Uri.UnescapeDataString(MyHelper.GetXmlAttributeValue(indexLink, "href").ToUpper().Replace("HTTP://FINANCE.YAHOO.COM/Q?S=", "").Replace("&D=T", "")); string name = string.Empty; foreach (string p in indexLink.Value.Split(new string[] { "\r\n" }, StringSplitOptions.None)) { name += p.Trim() + " "; } lstIndices.Add(new KeyValuePair <string, string>(indexID, name.TrimEnd())); } } res.Details.IndexMembership = lstIndices.ToArray(); } XElement sectorsNode = XPath.GetElement("td[1]/table[2]/tr/td/table/tr[2]/td[2]", resultNode); if (sectorsNode != null) { foreach (XElement sectorLink in sectorsNode.Elements()) { if (sectorLink.Name.LocalName == "a") { foreach (Sector sect in Enum.GetValues(typeof(Sector))) { string name = string.Empty; foreach (string p in sectorLink.Value.Split(new string[] { "\r\n" }, StringSplitOptions.None)) { name += p.Trim() + " "; } name = name.TrimEnd(); if (sect.ToString().Replace("_", " ") == name) { res.Details.Sector = sect; break; } } } } } XElement industryNode = XPath.GetElement("td[1]/table[2]/tr/td/table/tr[3]/td[2]", resultNode); if (industryNode != null) { foreach (XElement industryLink in industryNode.Elements()) { if (industryLink.Name.LocalName == "a") { int indIndex = 0; if (int.TryParse(MyHelper.GetXmlAttributeValue(industryLink, "href").Replace("http://biz.yahoo.com/ic/", "").Replace(".html", ""), out indIndex)) { res.Details.Industry = (Industry)indIndex; } } } } XElement employeesNode = XPath.GetElement("td[1]/table[2]/tr/td/table/tr[4]/td[2]", resultNode); if (employeesNode != null) { int fte; if (int.TryParse(employeesNode.Value.Trim(), System.Globalization.NumberStyles.Any, convCulture, out fte)) { res.Details.FullTimeEmployees = fte; } } XElement summaryNode = XPath.GetElement("td[1]/p[1]", resultNode); if (summaryNode != null) { System.Text.StringBuilder summaryText = new System.Text.StringBuilder(); foreach (string line in summaryNode.Value.Split(new string[] { "\r\n" }, StringSplitOptions.None)) { summaryText.Append(line.Trim() + " "); } res.BusinessSummary = summaryText.ToString().TrimEnd(); } XElement websitesNodes = XPath.GetElement("td[1]/table[5]/tr/td", resultNode); if (websitesNodes != null) { List <Uri> lstWebsites = new List <Uri>(); foreach (XElement linkNode in websitesNodes.Elements()) { if (linkNode.Name.LocalName == "a") { lstWebsites.Add(new Uri(MyHelper.GetXmlAttributeValue(linkNode, "href"))); } } res.CompanyWebsites = lstWebsites.ToArray(); } XElement governanceNode = null; XElement governanceHeader = XPath.GetElement("td[3]/table[1]/tr/th/span", resultNode); if (governanceHeader != null && governanceHeader.Value.Contains("Governance")) { governanceNode = XPath.GetElement("td[3]/table[2]/tr/td", resultNode); } if (governanceNode != null) { System.Text.StringBuilder governanceText = new System.Text.StringBuilder(); foreach (string line in governanceNode.Value.Split(new string[] { "\r\n" }, StringSplitOptions.None)) { governanceText.Append(line.Trim() + " "); } res.CorporateGovernance = governanceText.ToString().TrimEnd(); } XElement executivesNode = null; XElement executivesHeader = XPath.GetElement("td[3]/table[3]/tr/th/span", resultNode); if (executivesHeader != null && executivesHeader.Value.Contains("Executives")) { executivesNode = XPath.GetElement("td[3]/table[4]/tr/td/table", resultNode); } else { executivesNode = XPath.GetElement("td[3]/table[2]/tr/td/table", resultNode); } if (executivesNode != null) { List <ExecutivePersonInfo> lst = new List <ExecutivePersonInfo>(); bool isFirst = true; foreach (XElement row in executivesNode.Elements()) { if (!isFirst) { if (row.Name.LocalName == "tr") { XElement[] enm = MyHelper.EnumToArray(row.Elements()); if (enm.Length >= 3) { ExecutivePersonInfo exec = new ExecutivePersonInfo(); string name = string.Empty; foreach (string l in MyHelper.EnumToArray(enm[0].Elements())[0].Value.Split(new string[] { "\r\n" }, StringSplitOptions.None)) { name += l.Trim() + " "; } exec.Name = name.TrimEnd(); string position = string.Empty; var enm2 = MyHelper.EnumToArray(enm[0].Elements()); foreach (string l in enm2[enm2.Length - 1].Value.Split(new string[] { "\r\n" }, StringSplitOptions.None)) { position += l.Trim() + " "; } exec.Position = position.Trim(); string payStr = enm[1].Value.Replace("\r\n", "").Trim(); if (!payStr.Contains("N/A")) { exec.Pay = FinanceHelper.GetMillionValue(payStr) * 1000000; } string exercisedStr = enm[2].Value.Replace("\r\n", "").Trim(); if (!exercisedStr.Contains("N/A")) { double d = FinanceHelper.GetMillionValue(exercisedStr); exec.Exercised = (int)(d * 1000000); } lst.Add(exec); } } } else { isFirst = false; } } res.KeyExecutives = lst.ToArray(); } if (res.BusinessSummary.StartsWith("There is no ")) { res = null; } } } return(new CompanyProfileResult(res)); }
protected override CompanyStatisticsResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { CompanyStatisticsData result = null; if (stream != null) { System.Globalization.CultureInfo convCulture = new System.Globalization.CultureInfo("en-US"); XDocument doc = MyHelper.ParseXmlDocument(stream); XElement resultNode = XPath.GetElement("//table[@id=\"yfncsumtab\"]/tr[2]",doc); if (resultNode != null) { XElement tempNode = null; XElement vmNode = XPath.GetElement("/td[1]/table[2]/tr/td/table", resultNode); double[] vmValues = new double[9]; if (vmNode != null) { tempNode = XPath.GetElement("/tr[1]/td[2]/span", vmNode); if (tempNode != null) vmValues[0] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[2]/td[2]", vmNode); if (tempNode != null) vmValues[1] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]", vmNode); if (tempNode != null) vmValues[2] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[4]/td[2]", vmNode); if (tempNode != null) vmValues[3] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[5]/td[2]", vmNode); if (tempNode != null) vmValues[4] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[6]/td[2]", vmNode); if (tempNode != null) vmValues[5] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[7]/td[2]", vmNode); if (tempNode != null) vmValues[6] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[8]/td[2]", vmNode); if (tempNode != null) vmValues[7] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[9]/td[2]", vmNode); if (tempNode != null) vmValues[8] = FinanceHelper.ParseToDouble(tempNode.Value); } CompanyValuationMeasures vm = new CompanyValuationMeasures(vmValues); XElement fyNode = XPath.GetElement("/td[1]/table[4]/tr/td/table",resultNode); XElement profitNode = XPath.GetElement("/td[1]/table[5]/tr/td/table", resultNode); XElement meNode = XPath.GetElement("/td[1]/table[6]/tr/td/table", resultNode); XElement isNode = XPath.GetElement("/td[1]/table[7]/tr/td/table", resultNode); XElement bsNode = XPath.GetElement("/td[1]/table[8]/tr/td/table", resultNode); XElement cfsNode = XPath.GetElement("/td[1]/table[9]/tr/td/table", resultNode); DateTime fiscalYEnds = new DateTime(); DateTime mostRecQutr = new DateTime(); double[] fhValues = new double[20]; if (fyNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]", fyNode); if (tempNode != null) fiscalYEnds = FinanceHelper.ParseToDateTime(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]",fyNode); if (tempNode != null) mostRecQutr = FinanceHelper.ParseToDateTime(tempNode.Value); } if (profitNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]",profitNode); if (tempNode != null) fhValues[0] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]",profitNode); if (tempNode != null) fhValues[1] = FinanceHelper.ParseToDouble(tempNode.Value); } if (meNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]",meNode); if (tempNode != null) fhValues[2] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]",meNode); if (tempNode != null) fhValues[3] = FinanceHelper.ParseToDouble(tempNode.Value); } if (isNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]", isNode); if (tempNode != null) fhValues[4] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]", isNode); if (tempNode != null) fhValues[5] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[4]/td[2]", isNode); if (tempNode != null) fhValues[6] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[5]/td[2]", isNode); if (tempNode != null) fhValues[7] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[6]/td[2]", isNode); if (tempNode != null) fhValues[8] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[7]/td[2]", isNode); if (tempNode != null) fhValues[9] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[8]/td[2]", isNode); if (tempNode != null) fhValues[10] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[9]/td[2]", isNode); if (tempNode != null) fhValues[11] = FinanceHelper.ParseToDouble(tempNode.Value); } if (bsNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]",bsNode); if (tempNode != null) fhValues[12] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]",bsNode); if (tempNode != null) fhValues[13] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[4]/td[2]",bsNode); if (tempNode != null) fhValues[14] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[5]/td[2]",bsNode); if (tempNode != null) fhValues[15] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[6]/td[2]",bsNode); if (tempNode != null) fhValues[16] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[7]/td[2]",bsNode); if (tempNode != null) fhValues[17] = FinanceHelper.ParseToDouble(tempNode.Value); } if (cfsNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]", cfsNode); if (tempNode != null) fhValues[18] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]",cfsNode); if (tempNode != null) fhValues[19] = FinanceHelper.GetMillionValue(tempNode.Value); } CompanyFinancialHighlights fh = new CompanyFinancialHighlights(fiscalYEnds, mostRecQutr, fhValues); XElement sphNode = XPath.GetElement("/td[3]/table[2]/tr/td/table", resultNode); XElement stNode = XPath.GetElement("/td[3]/table[3]/tr/td/table", resultNode); XElement dsNode = XPath.GetElement("/td[3]/table[4]/tr/td/table", resultNode); double[] ctiValues = new double[23]; DateTime exDivDate = new DateTime(); DateTime divDate = new DateTime(); DateTime splitDate = new DateTime(); SharesSplitFactor sf = null; if (sphNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]",sphNode); if (tempNode != null) ctiValues[0] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]",sphNode); if (tempNode != null) ctiValues[1] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[4]/td[2]",sphNode); if (tempNode != null) ctiValues[2] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[5]/td[2]",sphNode); if (tempNode != null) ctiValues[3] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[6]/td[2]",sphNode); if (tempNode != null) ctiValues[4] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[7]/td[2]",sphNode); if (tempNode != null) ctiValues[5] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[8]/td[2]",sphNode); if (tempNode != null) ctiValues[6] = FinanceHelper.ParseToDouble(tempNode.Value); } if (stNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]",stNode); if (tempNode != null) ctiValues[7] = FinanceHelper.ParseToDouble(tempNode.Value) / 1000; tempNode = XPath.GetElement("/tr[3]/td[2]",stNode); if (tempNode != null) ctiValues[8] = FinanceHelper.ParseToDouble(tempNode.Value) / 1000; tempNode = XPath.GetElement("/tr[4]/td[2]",stNode); if (tempNode != null) ctiValues[9] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[5]/td[2]",stNode); if (tempNode != null) ctiValues[10] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[6]/td[2]",stNode); if (tempNode != null) ctiValues[11] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[7]/td[2]",stNode); if (tempNode != null) ctiValues[12] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[8]/td[2]",stNode); if (tempNode != null) ctiValues[13] = FinanceHelper.GetMillionValue(tempNode.Value); tempNode = XPath.GetElement("/tr[9]/td[2]",stNode); if (tempNode != null) ctiValues[14] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[10]/td[2]",stNode); if (tempNode != null) ctiValues[15] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[11]/td[2]",stNode); if (tempNode != null) ctiValues[16] = FinanceHelper.GetMillionValue(tempNode.Value); } if (dsNode != null) { tempNode = XPath.GetElement("/tr[2]/td[2]",dsNode); if (tempNode != null) ctiValues[17] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[3]/td[2]",dsNode); if (tempNode != null) ctiValues[18] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[4]/td[2]",dsNode); if (tempNode != null) ctiValues[19] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[5]/td[2]",dsNode); if (tempNode != null) ctiValues[20] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[6]/td[2]",dsNode); if (tempNode != null) ctiValues[21] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[7]/td[2]",dsNode); if (tempNode != null) ctiValues[22] = FinanceHelper.ParseToDouble(tempNode.Value); tempNode = XPath.GetElement("/tr[8]/td[2]",dsNode); if (tempNode != null) divDate = FinanceHelper.ParseToDateTime(tempNode.Value); tempNode = XPath.GetElement("/tr[9]/td[2]",dsNode); if (tempNode != null) exDivDate = FinanceHelper.ParseToDateTime(tempNode.Value); tempNode = XPath.GetElement("/tr[10]/td[2]",dsNode); if (tempNode != null) { string[] txt = tempNode.Value.Split(':'); int from, to; if (int.TryParse(txt[0], out to) && int.TryParse(txt[1], out from)) { sf = new SharesSplitFactor(to, from); } } tempNode = XPath.GetElement("/tr[11]/td[2]",dsNode); if (tempNode != null) splitDate = FinanceHelper.ParseToDateTime(tempNode.Value); } CompanyTradingInfo cti = new CompanyTradingInfo(ctiValues, divDate, exDivDate, splitDate, sf); result = new CompanyStatisticsData(((CompanyStatisticsDownloadSettings)settings).ID, vm, fh, cti); } } return new CompanyStatisticsResult(result); }
public static MarketQuotesData[] ToMarketQuotesData(string csv, System.Globalization.CultureInfo culture = null) { System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture; if (culture != null) { ci = culture; } char delimiter = ','; string[][] table = MyHelper.CsvTextToStringTable(csv, delimiter); List <MarketQuotesData> lst = new List <MarketQuotesData>(); if (table.Length > 1) { for (int i = 1; i <= table.Length - 1; i++) { if (table[i].Length == 10) { MarketQuotesData quote = new MarketQuotesData(); quote.Name = table[i][0]; double t1; double t2; double t3; double t4; double t5; double t6; double t7; double t8; if (double.TryParse(table[i][1], System.Globalization.NumberStyles.Any, ci, out t1)) { quote.OneDayPriceChangePercent = t1; } string mktcap = table[i][2]; if (mktcap != "NA" & mktcap != string.Empty & mktcap.Length > 1) { double value = 0; double.TryParse(mktcap.Substring(0, mktcap.Length - 1), System.Globalization.NumberStyles.Any, ci, out value); quote.MarketCapitalizationInMillion = value * FinanceHelper.GetStringMillionFactor(mktcap); } if (double.TryParse(table[i][3], System.Globalization.NumberStyles.Any, ci, out t2)) { quote.PriceEarningsRatio = t2; } if (double.TryParse(table[i][4], System.Globalization.NumberStyles.Any, ci, out t3)) { quote.ReturnOnEquityPercent = t3; } if (double.TryParse(table[i][5], System.Globalization.NumberStyles.Any, ci, out t4)) { quote.DividendYieldPercent = t4; } if (double.TryParse(table[i][6], System.Globalization.NumberStyles.Any, ci, out t5)) { quote.LongTermDeptToEquity = t5; } if (double.TryParse(table[i][7], System.Globalization.NumberStyles.Any, ci, out t6)) { quote.PriceToBookValue = t6; } if (double.TryParse(table[i][8], System.Globalization.NumberStyles.Any, ci, out t7)) { quote.NetProfitMarginPercent = t7; } if (double.TryParse(table[i][9], System.Globalization.NumberStyles.Any, ci, out t8)) { quote.PriceToFreeCashFlow = t8; } lst.Add(quote); } } } return(lst.ToArray()); }
/// <summary> /// Converts a list of quote data to a CSV formatted text /// </summary> /// <param name="quotes">The list of quote values</param> /// <param name="delimiter">The delimiter of the CSV text</param> /// <param name="properties">The used properties of the items</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 data string in CSV format</returns> /// <remarks></remarks> public static string FromQuotesData(IEnumerable <QuotesData> quotes, char delimiter, IEnumerable <QuoteProperty> properties, System.Globalization.CultureInfo culture = null) { if (quotes != null) { System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture; if (culture != null) { ci = culture; } QuoteProperty[] prpts = FinanceHelper.CheckPropertiesOfQuotesData(quotes, properties); System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (QuoteProperty qp in prpts) { sb.Append(qp.ToString()); sb.Append(delimiter); } sb.Remove(sb.Length - 1, 1); sb.AppendLine(); foreach (QuotesData q in quotes) { if (q != null) { System.Text.StringBuilder sbQ = new System.Text.StringBuilder(); foreach (QuoteProperty qp in prpts) { object o = MyHelper.ObjectToString(q[qp], ci); if (o is string) { if (o.ToString() == string.Empty) { sbQ.Append("\"N/A\""); } else { sbQ.Append("\""); sbQ.Append(q[qp].ToString().Replace("\"", "\"\"")); sbQ.Append("\""); } } else { sbQ.Append(MyHelper.ObjectToString(q[qp], ci)); } sbQ.Append(delimiter); } if (sbQ.Length > 0) { sbQ.Remove(sbQ.Length - 1, 1); } sb.AppendLine(sbQ.ToString()); } } return(sb.ToString()); } else { return(string.Empty); } }
protected override string GetUrl() { if (this.IDs == null || this.IDs.Length == 0) { throw new NotSupportedException("An empty id list will not be supported."); } else { System.Text.StringBuilder ids = new System.Text.StringBuilder(); foreach (string s in this.IDs) { ids.Append(MyHelper.CleanYqlParam(s)); ids.Append('+'); } String url = "http://download.finance.yahoo.com/d/quotes.csv?s=" + Uri.EscapeDataString(ids.ToString()) + "&f=" + FinanceHelper.CsvQuotePropertyTags(this.Properties) + "&e=.csv"; return(url); } }
protected override MarketQuotesResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { System.Globalization.CultureInfo ci = FinanceHelper.DefaultYqlCulture; string text = MyHelper.StreamToString(stream, ((MarketQuotesDownloadSettings)settings).TextEncoding); char delimiter = ','; string[][] table = MyHelper.CsvTextToStringTable(text, delimiter); List <MarketQuotesData> lst = new List <MarketQuotesData>(); if (table.Length > 1) { for (int i = 1; i <= table.Length - 1; i++) { if (table[i].Length == 10) { MarketQuotesData quote = new MarketQuotesData(); quote.Name = table[i][0]; double t1; if (double.TryParse(table[i][1], System.Globalization.NumberStyles.Any, ci, out t1)) { quote.OneDayPriceChangePercent = t1; } string mktcap = table[i][2]; if (mktcap != "NA" & mktcap != string.Empty & mktcap.Length > 1) { double value = 0; double.TryParse(mktcap.Substring(0, mktcap.Length - 1), System.Globalization.NumberStyles.Any, ci, out value); quote.MarketCapitalizationInMillion = value * FinanceHelper.GetStringMillionFactor(mktcap); } double t2; double t3; double t4; double t5; double t6; double t7; double t8; if (double.TryParse(table[i][3], System.Globalization.NumberStyles.Any, ci, out t2)) { quote.PriceEarningsRatio = t2; } if (double.TryParse(table[i][4], System.Globalization.NumberStyles.Any, ci, out t3)) { quote.ReturnOnEquityPercent = t3; } if (double.TryParse(table[i][5], System.Globalization.NumberStyles.Any, ci, out t4)) { quote.DividendYieldPercent = t4; } if (double.TryParse(table[i][6], System.Globalization.NumberStyles.Any, ci, out t5)) { quote.LongTermDeptToEquity = t5; } if (double.TryParse(table[i][7], System.Globalization.NumberStyles.Any, ci, out t6)) { quote.PriceToBookValue = t6; } if (double.TryParse(table[i][8], System.Globalization.NumberStyles.Any, ci, out t7)) { quote.NetProfitMarginPercent = t7; } if (double.TryParse(table[i][9], System.Globalization.NumberStyles.Any, ci, out t8)) { quote.PriceToFreeCashFlow = t8; } lst.Add(quote); } } } return(new MarketQuotesResult(lst.ToArray())); }
protected override string GetUrl() { if (this.ID == string.Empty) { throw new ArgumentException("ID is empty.", "ID"); } System.Text.StringBuilder url = new System.Text.StringBuilder(); url.Append("http://"); url.Append("chart.finance.yahoo.com/"); if (this.SimplifiedImage) { url.Append("t?"); } else if (this.ImageSize == ChartImageSize.Small) { url.Append("h?"); } else { url.Append("z?"); } url.Append("s="); url.Append(MyHelper.CleanYqlParam(FinanceHelper.CleanIndexID(this.ID))); if (this.SimplifiedImage) { url.Append("&width=" + this.ImageWidth.ToString()); url.Append("&height=" + this.ImageHeight.ToString()); } else if (this.ImageSize != ChartImageSize.Small) { url.Append("&t="); url.Append(FinanceHelper.GetChartTimeSpan(this.TimeSpan)); url.Append("&z="); url.Append(FinanceHelper.GetChartImageSize(this.ImageSize)); url.Append("&q="); url.Append(FinanceHelper.GetChartType(this.Type)); url.Append("&l="); url.Append(FinanceHelper.GetChartScale(this.Scale)); if (this.MovingAverages.Count > 0 | this.ExponentialMovingAverages.Count > 0 | this.TechnicalIndicators.Count > 0) { url.Append("&p="); foreach (MovingAverageInterval ma in this.MovingAverages) { url.Append('m'); url.Append(FinanceHelper.GetMovingAverageInterval(ma)); url.Append(','); } foreach (MovingAverageInterval ma in this.ExponentialMovingAverages) { url.Append('e'); url.Append(FinanceHelper.GetMovingAverageInterval(ma)); url.Append(','); } foreach (TechnicalIndicator ti in this.TechnicalIndicators) { url.Append(FinanceHelper.GetTechnicalIndicatorsI(ti)); } } if (this.TechnicalIndicators.Count > 0) { url.Append("&a="); foreach (TechnicalIndicator ti in this.TechnicalIndicators) { url.Append(FinanceHelper.GetTechnicalIndicatorsII(ti)); } } if (this.ComparingIDs.Count > 0) { url.Append("&c="); foreach (string csid in this.ComparingIDs) { url.Append(MyHelper.CleanYqlParam(FinanceHelper.CleanIndexID(csid))); url.Append(','); } } if (this.Culture == null) { this.Culture = Culture.DefaultCultures.UnitedStates_English; } } url.Append(YahooHelper.CultureToParameters(this.Culture)); return(url.ToString()); }