public static XbrlFact GetValueFromPriorities(this XbrlInstanceDocument doc, params string[] priorities)
        {
            //First get the normal period context
            string normal_period_context = doc.FindNormalPeriodPrimaryContext().Id;

            return(doc.GetValueFromPriorities(normal_period_context, priorities));
        }
示例#2
0
        static void Main(string[] args)
        {
            EdgarSearch          es   = EdgarSearch.CreateAsync(args[0], "10-K").Result;
            EdgarSearchResult    esr  = es.GetFirstResultOfFilingType("10-K");
            Stream               s    = esr.DownloadXbrlDocumentAsync().Result;
            XbrlInstanceDocument doc  = XbrlInstanceDocument.Create(s);
            FinancialStatement   fs   = doc.CreateFinancialStatement();
            string               json = JsonConvert.SerializeObject(fs);

            Console.WriteLine(json);
        }
        public async Task <FinancialStatement[]> GetFinancialStatementsAsync(string symbol, string filing_type)
        {
            EdgarSearch es = await EdgarSearch.CreateAsync(symbol, filing_type, null, EdgarSearchOwnershipFilter.exclude, EdgarSearchResultsPerPage.Entries40);

            //Get a list of the filings
            List <EdgarSearchResult> Results = new List <EdgarSearchResult>();

            foreach (EdgarSearchResult esr in es.Results)
            {
                if (esr.Filing.Trim().ToLower() == filing_type.Trim().ToLower())
                {
                    Results.Add(esr);
                }
            }

            //Make financial statments for each
            List <FinancialStatement> FinancialStatements = new List <FinancialStatement>();

            foreach (EdgarSearchResult esr in Results)
            {
                try
                {
                    Stream s = await esr.DownloadXbrlDocumentAsync();

                    XbrlInstanceDocument doc = XbrlInstanceDocument.Create(s);
                    FinancialStatement   fs  = doc.CreateFinancialStatement();
                    FinancialStatements.Add(fs);
                }
                catch
                {
                }
            }


            //Arrange from oldest to newest
            List <FinancialStatement> Arranged = new List <FinancialStatement>();

            do
            {
                FinancialStatement Winner = FinancialStatements[0];
                foreach (FinancialStatement fs in FinancialStatements)
                {
                    if (fs.PeriodEnd < Winner.PeriodEnd)
                    {
                        Winner = fs;
                    }
                }
                Arranged.Add(Winner);
                FinancialStatements.Remove(Winner);
            } while (FinancialStatements.Count > 0);


            return(Arranged.ToArray());
        }
示例#4
0
        static void TestSingleDocument()
        {
            string path = "C:\\Users\\tihanewi\\Downloads\\AAPL.xml";
            Stream s    = System.IO.File.OpenRead(path);
            XbrlInstanceDocument doc = XbrlInstanceDocument.Create(s);

            Console.WriteLine("Period context ref: '" + doc.PrimaryPeriodContextId + "'");
            Console.WriteLine("Instant context ref: '" + doc.PrimaryInstantContextId + "'");
            FinancialStatement fs   = doc.CreateFinancialStatement();
            string             json = JsonConvert.SerializeObject(fs);

            Console.WriteLine(json);
        }
示例#5
0
        static void TestAll10Ks()
        {
            do
            {
                Console.WriteLine("Symbol?");
                string symbol = Console.ReadLine();

                EdgarSearch es = EdgarSearch.CreateAsync(symbol, "10-K").Result;

                foreach (EdgarSearchResult esr in es.Results)
                {
                    if (esr.Filing == "10-K")
                    {
                        if (esr.InteractiveDataUrl != null && esr.InteractiveDataUrl != "")
                        {
                            try
                            {
                                Stream s = esr.DownloadXbrlDocumentAsync().Result;
                                XbrlInstanceDocument doc = XbrlInstanceDocument.Create(s);
                                FinancialStatement   fs  = doc.CreateFinancialStatement();
                                string rev = "";
                                if (fs.Revenue.HasValue)
                                {
                                    rev = fs.Revenue.Value.ToString("#,##0");
                                }
                                else
                                {
                                    rev = "?";
                                }
                                Console.WriteLine(fs.PeriodEnd.Value.ToShortDateString() + " - " + rev);
                            }
                            catch
                            {
                                Console.WriteLine("Critical error (filed on " + esr.FilingDate.ToShortDateString());
                            }
                        }
                    }
                }
                Console.WriteLine();
            } while (true);
        }
        public static XbrlFact GetValueFromPriorities(this XbrlInstanceDocument doc, string context_id, params string[] priorities)
        {
            //First get the normal period context
            string normal_period_context = context_id;

            foreach (string word in priorities)
            {
                foreach (XbrlFact fact in doc.Facts)
                {
                    if (fact.ContextId.ToLower().Trim() == doc.PrimaryInstantContextId.ToLower().Trim() || fact.ContextId.Trim().ToLower() == normal_period_context.Trim().ToLower())
                    {
                        if (fact.Label.Trim().ToLower() == word.Trim().ToLower())
                        {
                            return(fact);
                        }
                    }
                }
            }

            throw new Exception("Unable to find XBRL fact for value labeled with any of the following: " + priorities);
        }
示例#7
0
        public static FinancialStatement CreateFinancialStatement(this XbrlInstanceDocument doc)
        {
            FinancialStatement ToReturn = new FinancialStatement();

            //Get the context reference to focus on
            XbrlContext focus_context = doc.FindNormalPeriodPrimaryContext();

            #region "Contextual (misc) info"

            //Period start and end
            ToReturn.PeriodStart = focus_context.StartDate;
            ToReturn.PeriodEnd   = focus_context.EndDate;

            //Common Stock Shares Outstanding
            try
            {
                ToReturn.CommonStockSharesOutstanding = doc.GetValueFromPriorities(focus_context.Id, "CommonStockSharesOutstanding", "EntityCommonStockSharesOutstanding").ValueAsLong();
            }
            catch
            {
                ToReturn.CommonStockSharesOutstanding = null;
            }

            #endregion

            #region "Income Statement"
            //Revenue
            try
            {
                ToReturn.Revenue = doc.GetValueFromPriorities(focus_context.Id, "Revenue", "Revenues", "RevenueFromContractWithCustomerExcludingAssessedTax", "RevenueFromContractWithCustomerIncludingAssessedTax", "RevenueFromContractWithCustomerBeforeReimbursementsExcludingAssessedTax", "SalesRevenueNet", "SalesRevenueGoodsNet", "TotalRevenuesAndOtherIncome").ValueAsFloat();
            }
            catch
            {
                ToReturn.Revenue = null;
            }

            //Net income
            try
            {
                ToReturn.NetIncome = doc.GetValueFromPriorities(focus_context.Id, "NetIncomeLoss", "IncomeLossFromContinuingOperationsIncludingPortionAttributableToNoncontrollingInterest", "ProfitLoss").ValueAsFloat();
            }
            catch
            {
                ToReturn.NetIncome = null;
            }

            //Operating Income
            try
            {
                ToReturn.OperatingIncome = doc.GetValueFromPriorities(focus_context.Id, "OperatingIncomeLoss", "IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest").ValueAsFloat();
            }
            catch
            {
                ToReturn.OperatingIncome = null;
            }

            //Selling general and administrative expense
            try
            {
                ToReturn.SellingGeneralAndAdministrativeExpense = doc.GetValueFromPriorities(focus_context.Id, "SellingGeneralAndAdministrativeExpense").ValueAsFloat();
            }
            catch
            {
                ToReturn.SellingGeneralAndAdministrativeExpense = null;
            }

            //Research and development expense
            try
            {
                ToReturn.ResearchAndDevelopmentExpense = doc.GetValueFromPriorities(focus_context.Id, "ResearchAndDevelopmentExpense", "ResearchAndDevelopmentExpenseExcludingAcquiredInProcessCost").ValueAsFloat();
            }
            catch
            {
                ToReturn.ResearchAndDevelopmentExpense = null;
            }


            #endregion

            #region "Balance Sheet"

            //Assets
            try
            {
                ToReturn.Assets = doc.GetValueFromPriorities(focus_context.Id, "Assets").ValueAsFloat();
            }
            catch
            {
                ToReturn.Assets = null;
            }

            //Liabilities
            try
            {
                ToReturn.Liabilities = doc.GetValueFromPriorities(focus_context.Id, "Liabilities").ValueAsFloat();
            }
            catch
            {
                ToReturn.Liabilities = null;
            }

            //Equity
            try
            {
                ToReturn.Equity = doc.GetValueFromPriorities(focus_context.Id, "Equity", "StockholdersEquity", "StockholdersEquityIncludingPortionAttributableToNoncontrollingInterest").ValueAsFloat();
            }
            catch
            {
                ToReturn.Equity = null;
            }

            //If only liabilities or equity were able to be found, fill in the rest
            if (ToReturn.Assets != null)
            {
                if (ToReturn.Liabilities == null && ToReturn.Equity != null)
                {
                    ToReturn.Liabilities = ToReturn.Assets - ToReturn.Equity;
                }
                else if (ToReturn.Equity == null && ToReturn.Liabilities != null)
                {
                    ToReturn.Equity = ToReturn.Assets - ToReturn.Liabilities;
                }
            }
            else
            {
                if (ToReturn.Liabilities != null && ToReturn.Equity != null)
                {
                    ToReturn.Assets = ToReturn.Liabilities + ToReturn.Equity;
                }
            }

            //Cash
            try
            {
                ToReturn.Cash = doc.GetValueFromPriorities(focus_context.Id, "CashAndCashEquivalents", "CashAndCashEquivalentsAtCarryingValue", "CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents", "CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents").ValueAsFloat();
            }
            catch
            {
                ToReturn.Cash = null;
            }

            //Current Assets
            try
            {
                ToReturn.CurrentAssets = doc.GetValueFromPriorities(focus_context.Id, "AssetsCurrent").ValueAsFloat();
            }
            catch
            {
                ToReturn.CurrentAssets = null;
            }

            //Current Libilities
            try
            {
                ToReturn.CurrentLiabilities = doc.GetValueFromPriorities(focus_context.Id, "LiabilitiesCurrent").ValueAsFloat();
            }
            catch
            {
                ToReturn.CurrentLiabilities = null;
            }

            //Retained Earnings
            try
            {
                ToReturn.RetainedEarnings = doc.GetValueFromPriorities(focus_context.Id, "RetainedEarningsAccumulatedDeficit").ValueAsFloat();
            }
            catch
            {
                ToReturn.RetainedEarnings = null;
            }



            #endregion

            #region "Cash Flows"

            //Operating Cash Flows
            try
            {
                ToReturn.OperatingCashFlows = doc.GetValueFromPriorities(focus_context.Id, "NetCashProvidedByUsedInOperatingActivities", "NetCashProvidedByUsedInOperatingActivitiesContinuingOperations").ValueAsFloat();
            }
            catch
            {
                ToReturn.OperatingCashFlows = null;
            }

            //Investing Cash Flows
            try
            {
                ToReturn.InvestingCashFlows = doc.GetValueFromPriorities(focus_context.Id, "NetCashProvidedByUsedInInvestingActivities", "NetCashProvidedByUsedInInvestingActivitiesContinuingOperations").ValueAsFloat();
            }
            catch
            {
                ToReturn.InvestingCashFlows = null;
            }

            //Finance cash flows
            try
            {
                ToReturn.FinancingCashFlows = doc.GetValueFromPriorities(focus_context.Id, "NetCashProvidedByUsedInFinancingActivities", "NetCashProvidedByUsedInFinancingActivitiesContinuingOperations").ValueAsFloat();
            }
            catch
            {
                ToReturn.FinancingCashFlows = null;
            }

            //ProceedsFromIssuanceOfDebt
            try
            {
                ToReturn.ProceedsFromIssuanceOfDebt = doc.GetValueFromPriorities(focus_context.Id, "ProceedsFromIssuanceOfDebt", "ProceedsFromDebtMaturingInMoreThanThreeMonths", "ProceedsFromIssuanceOfLongTermDebt", "ProceedsFromIssuanceOfLongTermDebtAndCapitalSecuritiesNet").ValueAsFloat();
            }
            catch
            {
                ToReturn.ProceedsFromIssuanceOfDebt = null;
            }

            //Payments of debt
            try
            {
                ToReturn.PaymentsOfDebt = doc.GetValueFromPriorities(focus_context.Id, "RepaymentsOfDebt", "RepaymentsOfDebtMaturingInMoreThanThreeMonths", "RepaymentsOfLongTermDebt", "RepaymentsOfLongTermDebtAndCapitalSecurities").ValueAsFloat();
            }
            catch
            {
                ToReturn.PaymentsOfDebt = null;
            }

            //Dividends paid
            try
            {
                ToReturn.DividendsPaid = doc.GetValueFromPriorities(focus_context.Id, "PaymentsOfDividendsCommonStock", "PaymentsOfDividends").ValueAsFloat();
            }
            catch
            {
                ToReturn.DividendsPaid = null;
            }

            #endregion


            return(ToReturn);
        }