Exemple #1
0
 /// <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);
 }
Exemple #2
0
 /// <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));
 }
Exemple #4
0
 /// <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));
 }
Exemple #5
0
 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)));
 }
Exemple #8
0
 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);
            }
        }
Exemple #16
0
 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()));
        }
Exemple #18
0
        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());
        }