/// <summary> /// SaveCashFlowStatement /// </summary> /// <param name="contract"></param> /// <param name="fmpSymbol"></param> /// <param name="xmlDocument"></param> /// <param name="date"></param> private void SaveCashFlowStatement(Contract contract, string fmpSymbol, FundamentalsXmlDocument xmlDocument, string date) { if (DataContext.Instance.CashFlowStatements.Any(i => i.Symbol == fmpSymbol && i.Date == date)) { LogCurrent.Add($"Cash flow statement for {contract.Company} and date {date} already exists in database."); return; } if (xmlDocument.NetIncomeFromCashStatement == 0 && xmlDocument.OperatingCashFlow == 0 && xmlDocument.InvestmentsInPropertyPlantAndEquipment == 0) { LogCurrent.Add($"No IB data for cash flow statement for {contract.Company} for year {date}."); return; } var cashFlowStatement = new CashFlowStatement() { Symbol = fmpSymbol, Date = date, NetIncome = xmlDocument.NetIncomeFromCashStatement, OperatingCashFlow = xmlDocument.OperatingCashFlow, InvestmentsInPropertyPlantAndEquipment = xmlDocument.InvestmentsInPropertyPlantAndEquipment }; try { DataContext.Instance.CashFlowStatements.Add(cashFlowStatement); DataContext.Instance.SaveChanges(); LogCurrent.Add($"OK! Cash flow statement for {contract.Company} {date} saved in database."); } catch (Exception exception) { LogCurrent.Add(exception.ToString()); } }
/// <summary> /// SaveIncomeStatement /// </summary> /// <param name="contract"></param> /// <param name="fmpSymbol"></param> /// <param name="xmlDocument"></param> /// <param name="date"></param> private void SaveIncomeStatement(Contract contract, string fmpSymbol, FundamentalsXmlDocument xmlDocument, string date) { if (DataContext.Instance.IncomeStatements.Any(i => i.Symbol == fmpSymbol && i.Date == date)) { LogCurrent.Add($"Income statement for {contract.Company} for year {date} already exists in database."); return; } if (xmlDocument.Revenue == 0 && xmlDocument.OperatingIncome == 0 && xmlDocument.Eps == 0 && xmlDocument.NetIncome == 0) { LogCurrent.Add($"No IB data for income statement for {contract.Company} for year {date}."); return; } var incomeStatement = new IncomeStatement() { Symbol = fmpSymbol, Date = date, Revenue = xmlDocument.Revenue, OperatingIncome = xmlDocument.OperatingIncome, Epsdiluted = xmlDocument.Eps, NetIncome = xmlDocument.NetIncome }; try { DataContext.Instance.IncomeStatements.Add(incomeStatement); DataContext.Instance.SaveChanges(); LogCurrent.Add($"OK! Income statement for {contract.Company} {date} saved in database."); } catch (Exception exception) { LogCurrent.Add(exception.ToString()); } }
/// <summary> /// SaveBalanceSheet /// </summary> /// <param name="contract"></param> /// <param name="fmpSymbol"></param> /// <param name="xmlDocument"></param> /// <param name="date"></param> private void SaveBalanceSheet(Contract contract, string fmpSymbol, FundamentalsXmlDocument xmlDocument, string date) { if (DataContext.Instance.BalanceSheets.Any(i => i.Symbol == fmpSymbol && i.Date == date)) { LogCurrent.Add($"Balance sheet for {contract.Company} ad date {date} already exists in database."); return; } if (xmlDocument.Equity == 0) { LogCurrent.Add($"No IB data for balance sheet for {contract.Company} for year {date}."); return; } var balanceSheet = new BalanceSheet() { Symbol = fmpSymbol, Date = date, TotalStockholdersEquity = xmlDocument.Equity }; try { DataContext.Instance.BalanceSheets.Add(balanceSheet); DataContext.Instance.SaveChanges(); LogCurrent.Add($"OK! Balance sheet for {contract.Company} {date} saved in database."); } catch (Exception exception) { LogCurrent.Add(exception.ToString()); } }
/// <summary> /// ResponseHandlerFundamentalData /// </summary> /// <param name="obj"></param> private void ResponseHandlerFundamentalData(IBSampleApp.messages.FundamentalsMessage obj) { BackgroundLog = Brushes.White; var message = string.Empty; LogCurrent.Add($"Processing {CurrentContract.Company} ... {ContractList.Count()} companies more."); ContractList.Remove(CurrentContract); string fmpSymbol = QueryFactory.SymbolByCompanyNameQuery.Run(CurrentContract.Company); if (string.IsNullOrWhiteSpace(fmpSymbol)) { LogCurrent.Add($"ERROR! FMP symbol for {CurrentContract.Company} could not be found."); return; } foreach (string date in Dates) { FundamentalsXmlDocument xmlDocument = XmlFactory.Instance.CreateXml(obj, date); SaveIncomeStatement(CurrentContract, fmpSymbol, xmlDocument, date); SaveBalanceSheet(CurrentContract, fmpSymbol, xmlDocument, date); SaveCashFlowStatement(CurrentContract, fmpSymbol, xmlDocument, date); } }