def income_bar(search_btn,search): if search_btn: balance_sheet = si.get_income_statement(search) bs = balance_sheet.T else: balance_sheet = si.get_income_statement("aapl") bs = balance_sheet.T # print(bs.columns) # print(bs) bs["date"] = bs.index date= bs["date"].dt.year netincome = (bs["netIncome"]/1000000000).astype(float).round(2) totalrev = (bs["totalRevenue"]/1000000000).astype(float).round(2) opincome = (bs["operatingIncome"]/1000000000).astype(float).round(2) color=np.array(['rgb(255,255,255)']*netincome.shape[0]) color[netincome<0]='red' color[netincome>=0]='green' fig2 = go.Figure(data=[ go.Bar(name='Net Income', x=date, y=bs["netIncome"],marker=dict(color=color.tolist()), text = netincome,textfont_size=8, textposition='outside'), go.Bar(name='Total Revenue', x=date, y=bs["totalRevenue"], text = totalrev,textfont_size=8, textposition='outside',visible='legendonly'), go.Bar(name='Operating Income', x=date, y=bs["operatingIncome"], text = opincome,textfont_size=8, textposition='outside',visible='legendonly') ]) # Change the bar mode fig2.update_layout(barmode='group',width = 444,title_text='Income Statement',title_x=0.5,margin=dict(t=70,b=20,l=55,r=40),paper_bgcolor='rgba(0,0,0,0)',plot_bgcolor='rgba(0,0,0,0)') fig2.update_layout(legend=dict(orientation="h",yanchor="bottom",y=1,xanchor="right",x=0.95,font=dict(size=9,),)) return fig2
def is_available(stock_nm): try: income_statement = si.get_income_statement(stock_nm) balance_sheet = si.get_balance_sheet(stock_nm) cash_flow_statement = si.get_cash_flow(stock_nm) my_stock_price(stock_nm) except (IOError, KeyError): None
def getIncomeStatement(self, symbol): incomeStatement = si.get_income_statement(symbol) data = self.yahooFinanceDataModification.formatSheetData(incomeStatement) # typescript cloud not recognize if 'Net_Income_from_Continuing_&_Discontinued_Operation' in data: data['Net_Income_from_Continuing_And_Discontinued_Operation'] = data['Net_Income_from_Continuing_&_Discontinued_Operation'] del data['Net_Income_from_Continuing_&_Discontinued_Operation'] return {'incomeStatement': data}
def fair_value(ticker, years=1, wish_return=0.4): netincome = Decimal(si.get_income_statement(ticker)[si.get_income_statement(ticker).columns[0]].netIncome) shares_outstanding = number_encoder(str(si.get_stats(ticker)["Value"][9])) current_eps = netincome / shares_outstanding all_growth_rates = [Decimal(x[:-1]) for x in si.get_analysts_info(ticker)["Revenue Estimate"][ si.get_analysts_info(ticker)["Revenue Estimate"].columns[ :-2]].iloc[5][1:].dropna()] growth_rate = sum(all_growth_rates) / len(all_growth_rates) / 100 projected_eps = current_eps * (1 + growth_rate) ** years projected_pe_ratio = Decimal(si.get_live_price(ticker)) / projected_eps forwarded_pe_ratio = Decimal(si.get_stats_valuation(ticker)[si.get_stats_valuation(ticker).columns[1]][2]) * ( 1 + growth_rate) ** (years - 1) return (forwarded_pe_ratio * projected_eps) / Decimal(1 + wish_return)
def income(request): ticker = json.loads(request.body)['ticker'] if not ticker: return HttpResponse('ticker not received') else: info = si.get_income_statement(ticker) # print info to a text buffer with io.StringIO() as buf, redirect_stdout(buf): print(info) output = buf.getvalue() return HttpResponse(output)
def income_stat(self, company): statement = get_income_statement(company) df = pd.DataFrame(statement, columns=[ 'Breakdown', 'ttm', '6/30/2019', '6/30/2018', '6/30/2017' ]) array = [] for ind in df.index: data = { 'breakdown': df['Breakdown'][ind], 'current': df['ttm'][ind], '2019': df['6/30/2019'][ind], '2018': df['6/30/2018'][ind], '2017': df['6/30/2017'][ind] } array.append(data) print(array) return array
def my_stock_rank(stock_nm): #print(stock_nm) stock_nm = "NESTLEIND.NS" stock_stats = si.get_stats(stock_nm) low_52 = float( stock_stats[stock_stats.Attribute == '52 Week Low 3'].Value.item()) dma_200 = float(stock_stats[stock_stats.Attribute == '200-Day Moving Average 3'].Value.item()) avg_price = (low_52 + dma_200) / 2 cmp = si.get_live_price(stock_nm) buy_price_gap = ((cmp - avg_price) / avg_price) * 100 #print (buy_price_gap) curr_row = stock_nm + ',' + str(round(buy_price_gap, 2)) print(curr_row) #df = df.append(curr_row) income_statement = si.get_income_statement(stock_nm) balance_sheet = si.get_balance_sheet(stock_nm) cash_flow_statement = si.get_cash_flow(stock_nm) income_statement.fillna(0, inplace=True) income_statement = income_statement.div(10000000).astype(int) balance_sheet.fillna(0, inplace=True) balance_sheet = balance_sheet.div(10000000).astype(int) cash_flow_statement.fillna(0, inplace=True) cash_flow_statement = cash_flow_statement.div(10000000).astype(int) income_statement_df = income_statement.transpose() balance_sheet_df = balance_sheet.transpose() cash_flow_statement_df = cash_flow_statement.transpose() revenue = income_statement_df['totalRevenue'] revenue.sort_index() end_value = float(revenue.iloc[0]) mcap = stock_stats[stock_stats.Attribute == 'Market Cap (intraday) 5'].Value.item() if mcap.find("T") == -1: print("No 'is' here!") else: print("Found 'is' in the string.")
def format_object(ticker): # The following function will pass in our ticker # and format the dataframe files from Panda and from our API try: # the following will format the ticker enter above into a more readable dataframe format form our pandas import bs_stock_1 = yf.get_balance_sheet(ticker) # format original columns into these easy to read columns bs_stock_1.columns = ["2020", "2019", "2018", "2017"] bs_stock_1.index.name = "Account" # formatting for the income statement portion is_stock_1 = yf.get_income_statement(ticker) is_stock_1.columns = ["2020", "2019", "2018", "2017"] is_stock_1.index.name = "Account" # Calling the function to format shares from a dictionary to get a float # We also want the daily stock and market cap shares_outstanding = sy.shares(ticker) daily_share_price = yf.get_live_price(ticker) market_cap = shares_outstanding * daily_share_price # this calls the year function year = sy.year_call() stock_attributes = { "Income Statement": is_stock_1, "Balance Sheet": bs_stock_1, "total Shares": shares_outstanding, "Daily Shares": daily_share_price, "market_cap": market_cap, "year": year, "ticker": ticker, "daily_share_price": daily_share_price } control(stock_attributes) except: # if they did not enter a ticker # this will be a pseudo recursive approach and take us back to the main page print( "you did not enter a ticker with a correct symbol,you will be taken back to the ticker login section" ) format_ticker()
def getAcctgInfo(ticker): global balance_sheet global income_statement global cfs global periods balance_sheet = yf.get_balance_sheet(ticker, yearly=False) income_statement = yf.get_income_statement(ticker, yearly=False) cfs = yf.get_cash_flow(ticker, yearly=False) periods = balance_sheet.columns cq = periods[0] pq = periods[1] cq_rev = income_statement[periods[0]]['totalRevenue'] pq_rev = income_statement[periods[1]]['totalRevenue'] cq_ni = income_statement[periods[0]]['netIncome'] pq_ni = income_statement[periods[1]]['netIncome'] cq_cash = balance_sheet[periods[0]]['cash'] pq_cash = balance_sheet[periods[1]]['cash'] cq_ocf = cfs[periods[0]]['totalCashFromOperatingActivities'] pq_ocf = cfs[periods[1]]['totalCashFromOperatingActivities'] acctginfo.append((ticker, cq, pq, cq_rev, pq_rev, cq_ni, pq_ni, cq_cash, pq_cash, cq_ocf, pq_ocf))
import time qt = qy.get_German_quotes() ncav = {} tickers = qt.DE_tickers("Jan17_CS.csv") start_time = dt.datetime.now() count = 0 for i in tickers: if count == 100 or count == 200 or count == 300 or count == 400 or count == 500 or count == 600: time.sleep(180) try: df = get_income_statement(i) if int(df.loc[df['Breakdown'] == 'Net Income'].iloc[:, 1]) >= 0: ncav[i] = qt.NCAV(i) print(i + " is successfully appended.") count += 1 else: print(i + " has negative net income.") count += 1 except: print(i + " is N/A.") count += 1 else: try: df = get_income_statement(i) if int(df.loc[df['Breakdown'] == 'Net Income'].iloc[:, 1]) >= 0: ncav[i] = qt.NCAV(i)
def update_income_statement(self, symbol): income_statement = si.get_income_statement(symbol).to_dict(orient="dict") self.update(symbol, income_statement, 'Stocks', 'Income_Statement')
rev_score = 0 pat_score = 0 nprof_score = 0 avg_rec_score = 0 roe_score = 0 avg_prof_cap_emp_score = 0 cfo_score = 0 cfo_gt_10_score = 0 ccflo_to_cnpat_score = 0 debt_score = 0 #def my_stock_price(stock_nm): stock_nm = "TCS.NS" income_statement = si.get_income_statement(stock_nm) balance_sheet = si.get_balance_sheet(stock_nm) cash_flow_statement = si.get_cash_flow(stock_nm) income_statement.fillna(0, inplace=True) income_statement = income_statement.div(10000000).astype(int) balance_sheet.fillna(0, inplace=True) balance_sheet = balance_sheet.div(10000000).astype(int) cash_flow_statement.fillna(0, inplace=True) cash_flow_statement = cash_flow_statement.div(10000000).astype(int) income_statement_df = income_statement.transpose() balance_sheet_df = balance_sheet.transpose() cash_flow_statement_df = cash_flow_statement.transpose()
def get_income_statement(tickers, yearly=True): dict_data = { ticker: si.get_income_statement(ticker, yearly) for ticker in tickers } return dict_data
company_data[company_data['Breakdown'] == "Net property plant and equipment"].index[0], 2]) PPE3 = float(company_data.iloc[ company_data[company_data['Breakdown'] == "Net property plant and equipment"].index[0], 3]) PPE4 = float(company_data.iloc[ company_data[company_data['Breakdown'] == "Net property plant and equipment"].index[0], 4]) ################################################## ################################################## ################################################## #this is the information from the income statement Loaded = 0 company_income_data = get_income_statement(companies) Loaded += sum(company_income_data['Breakdown'].str.count( 'Net Income Common Stockholders')) while Loaded == 0.0: company_income_data = get_income_statement(companies) Loaded += sum(company_income_data['Breakdown'].str.count( 'Net Income Common Stockholders')) NI1 = float(company_income_data.iloc[ company_income_data[company_income_data['Breakdown'] == 'Net Income Common Stockholders'].index[0], 2]) NI2 = float(company_income_data.iloc[ company_income_data[company_income_data['Breakdown'] == 'Net Income Common Stockholders'].index[0], 3])
def __init__(self, ticker): self.income_statement = si.get_income_statement(ticker) self.balance_sheet = si.get_balance_sheet(ticker) self.cash_flow_statement = si.get_cash_flow(ticker) self.inputs = self.get_inputs_df()
def my_stock_price(stock_nm): #stock_nm="DMART.NS" income_statement = si.get_income_statement(stock_nm) balance_sheet = si.get_balance_sheet(stock_nm) cash_flow_statement = si.get_cash_flow(stock_nm) income_statement.fillna(0, inplace=True) income_statement=income_statement.div(10000000).astype(int) balance_sheet.fillna(0, inplace=True) balance_sheet=balance_sheet.div(10000000).astype(int) cash_flow_statement.fillna(0, inplace=True) cash_flow_statement=cash_flow_statement.div(10000000).astype(int) income_statement_df=income_statement.transpose() balance_sheet_df=balance_sheet.transpose() cash_flow_statement_df=cash_flow_statement.transpose() revenue=income_statement_df['totalRevenue'] pat=income_statement_df['incomeBeforeTax'] nprof=income_statement_df['netIncomeFromContinuingOps'] if "netReceivables" in balance_sheet_df: avg_recei=balance_sheet_df['netReceivables'].mean() avg_recei_latest=balance_sheet_df['netReceivables'] else: avg_recei_df = revenue avg_recei_df = avg_recei_df.replace(avg_recei_df, 0) avg_recei=avg_recei_df.mean() avg_recei_latest=avg_recei_df #avg_recei=balance_sheet_df['netReceivables'].mean() avg_rev_20_pct=(income_statement_df['totalRevenue'].mean()*(20/100)) #avg_recei_latest=balance_sheet_df['netReceivables'] tot_share_hold=balance_sheet_df['totalStockholderEquity'].sort_index() net_income=income_statement_df['netIncome'].sort_index() roe=(net_income/tot_share_hold)*100 roe_mean=roe.mean() np_share_hold=income_statement_df['netIncomeApplicableToCommonShares'].sort_index() prof_cap_emp=(np_share_hold/tot_share_hold)*100 avg_prof_cap_emp=prof_cap_emp.mean() cfo=cash_flow_statement_df['totalCashFromOperatingActivities'] CCFO=cfo.sum() CNPAT=income_statement_df['netIncomeApplicableToCommonShares'].sum() CCFO_to_CNPAT=round(CCFO/CNPAT,2) if "shortLongTermDebt" in balance_sheet_df: short_debt=balance_sheet_df['shortLongTermDebt'] else: #print ("notfound") short_debt = revenue short_debt = short_debt.replace(short_debt, 0) if "longTermDebt" in balance_sheet_df: long_debt=balance_sheet_df['longTermDebt'] else: long_debt = revenue long_debt = long_debt.replace(long_debt, 0) total_debt=short_debt+long_debt # sorting....................... revenue.sort_index() pat.sort_index() nprof.sort_index() avg_recei_latest.sort_index() cfo.sort_index() total_debt.sort_index() """ Values updates""" end_value = float(revenue.iloc[0]) start_value = float(revenue.iloc[-1]) num_periods = len(revenue) if end_value < 0: end_value=0.001 else: end_value=end_value if start_value <= 0: start_value=0.001 else: start_value=start_value if start_value == end_value: rev_grw=0 else: rev_grw=((end_value / start_value) ** (1 / (num_periods )) - 1)*100 end_value = float(pat.iloc[0]) start_value = float(pat.iloc[-1]) num_periods = len(pat) if end_value < 0: end_value=0.001 else: end_value=end_value if start_value <= 0: start_value=0.001 else: start_value=start_value if start_value == end_value: pat_grw=0 else: pat_grw=((end_value / start_value) ** (1 / (num_periods )) - 1)*100 end_value = float(nprof.iloc[0]) start_value = float(nprof.iloc[-1]) num_periods = len(nprof) if end_value < 0: end_value=0.001 else: end_value=end_value if start_value <= 0: start_value=0.001 else: start_value=start_value if start_value == end_value: nprof_grw=0 else: nprof_grw=((end_value / start_value) ** (1 / (num_periods )) - 1)*100 end_value = float(nprof.iloc[0]) start_value = float(nprof.iloc[-1]) num_periods = len(nprof) if end_value < 0: end_value=0.001 else: end_value=end_value if start_value <= 0: start_value=0.001 else: start_value=start_value if start_value == end_value: nprof_grw=0 else: nprof_grw=((end_value / start_value) ** (1 / (num_periods )) - 1)*100 end_value = float(avg_recei_latest.iloc[0]) start_value = float(avg_recei_latest.iloc[-1]) num_periods = len(avg_recei_latest) if end_value < 0: end_value=0.001 else: end_value=end_value if start_value <= 0: start_value=0.001 else: start_value=start_value if start_value == end_value: avg_recei_grw=0 else: avg_recei_grw=((end_value / start_value) ** (1 / (num_periods )) - 1)*100 latest_roe = float(roe.iloc[-1]) end_value = float(cfo.iloc[0]) start_value = float(cfo.iloc[-1]) num_periods = len(cfo) if end_value < 0: end_value=0.001 else: end_value=end_value if start_value <= 0: start_value=0.001 else: start_value=start_value if start_value == end_value: cfo_grw=0 else: cfo_grw=((end_value / start_value) ** (1 / (num_periods )) - 1)*100 end_value = float(total_debt.iloc[0]) start_value = float(total_debt.iloc[-1]) num_periods = len(total_debt) if start_value == 0: start_value=0.01 else: start_value=start_value if start_value == end_value: total_debt_grw=0 else: total_debt_grw=((end_value / start_value) ** (1 / (num_periods )) - 1)*100 total_debt_mean=total_debt.mean() total_rev_mean=revenue.mean() total_rev_mean_20_pct=total_rev_mean*(20/100) """ Values updates""" rev_simple=rev_grw-(rev_grw*(5/100)) if rev_simple > 8: rev_score=1 else: rev_score=0 if pat_grw > (rev_simple - (rev_simple*(10/100))): pat_score=1 else: pat_score=0 if nprof_grw > (rev_simple - (rev_simple*(10/100))): nprof_score=1 else: nprof_score=0 if avg_recei < avg_rev_20_pct or avg_recei_grw <=(rev_simple - (rev_simple*(9/100))): avg_rec_score=1 else: avg_rec_score=0 if latest_roe > (roe_mean - (roe_mean*(10/100))): roe_score=1 else: roe_score=0 if avg_prof_cap_emp > 15 : avg_prof_cap_emp_score=1 else: avg_prof_cap_emp_score=0 if cfo_grw > (rev_simple - (rev_simple*(10/100))): cfo_score=1 else: cfo_score=0 if cfo_grw > 10: cfo_gt_10_score=1 else: cfo_gt_10_score=0 if CCFO_to_CNPAT > 0.8: ccflo_to_cnpat_score=1 else: ccflo_to_cnpat_score=0 if total_debt_mean < total_rev_mean_20_pct or total_debt_grw <=(rev_simple - (rev_simple*(10/100))) or total_debt_grw <0 : debt_score=1 else: debt_score=0 stock_stats = si.get_stats(stock_nm) opm=float(stock_stats[stock_stats.Attribute=='Profit Margin'].Value.item().replace('%', '')) book_per_share=float(stock_stats[stock_stats.Attribute=='Book Value Per Share (mrq)'].Value.item()) promoter_hold=float(stock_stats[stock_stats.Attribute=='% Held by Insiders 1'].Value.item().replace('%', '')) roe=float(stock_stats[stock_stats.Attribute=='Return on Equity (ttm)'].Value.item().replace('%', '')) eps=float(stock_stats[stock_stats.Attribute=='Diluted EPS (ttm)'].Value.item()) if opm >=0 and book_per_share>=0 and promoter_hold>=45 and roe>=10 and eps>=0 : #print(stock_nm,opm,book_per_share,promoter_hold,roe,eps) base_validation=1 total_score=(rev_score+pat_score+nprof_score+avg_rec_score+roe_score+avg_prof_cap_emp_score+cfo_score+cfo_gt_10_score+ccflo_to_cnpat_score+debt_score) if total_score >=8 and base_validation>0 : print (stock_nm, "Good For Investment" , total_score) selected_list. else: print (stock_nm, "Please skip", total_score)
stats = [ "Net income available to common shareholders", "Total assets", "Net cash provided by operating activities", "Long-term debt", "Other long-term liabilities", "Total current assets", "Total current liabilities", "Common stock", "Total revenue", "Gross profit" ] for ticker in tickers: temp_dict = {} temp_dict2 = {} temp_dict3 = {} bal = si.get_balance_sheet(ticker) cf = si.get_cash_flow(ticker) income = si.get_income_statement(ticker) print("getting financial data for: ", ticker) try: temp_dict["Net income available to common shareholders"] = income.loc[ "netIncomeApplicableToCommonShares", :][0] temp_dict2["Net income available to common shareholders"] = income.loc[ "netIncomeApplicableToCommonShares", :][1] temp_dict3["Net income available to common shareholders"] = income.loc[ "netIncomeApplicableToCommonShares", :][2] except: temp_dict["Net income available to common shareholders"] = np.nan temp_dict2["Net income available to common shareholders"] = np.nan temp_dict3["Net income available to common shareholders"] = np.nan try: temp_dict["Total Current Assets"] = bal.loc["totalCurrentAssets", :][0]
def Statement(): page_bg_img = ''' <style> body { background-image: url("https://images.pexels.com/photos/2748757/pexels-photo-2748757.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=1000"); background-size: cover; } </style> ''' st.markdown(page_bg_img, unsafe_allow_html=True) symbols = 'https://raw.githubusercontent.com/Moly-malibu/Stocks/main/bxo_lmmS1.csv' df = pd.read_csv(symbols) ticker = st.sidebar.selectbox('Stocks by Company', (df['Symbol'])) tickerData = YahooFinancials(ticker) def get_symbol(symbol): url = "http://d.yimg.com/autoc.finance.yahoo.com/autoc?query={}®ion=1&lang=en".format( symbol) result = requests.get(url).json() for x in result['ResultSet']['Result']: if x['symbol'] == symbol: return x['name'] company_name = get_symbol(ticker.upper()) st.write("""# Analysis of """, company_name) company = yf.Ticker(ticker) # st.write(company.info) company_general = st.sidebar.checkbox("Financial Ratio") if company_general: st.markdown( "<h1 style='text-align: center; color: #002966;'>Financial Ratios</h1>", unsafe_allow_html=True) st.write('***Payout Ratio:*** ', company.info["payoutRatio"]) st.write('***Trailing Annual Dividend Yield:*** ', company.info["trailingAnnualDividendYield"]) st.write('***Dividend Rate:*** ', company.info["dividendRate"]) st.write('***Profit Margins: ***', company.info["profitMargins"]) st.write('***Peg Ratio: ***', company.info["pegRatio"]) yahoo_financials = YahooFinancials(ticker) marketcap = yahoo_financials.get_market_cap() price_to_sales = yahoo_financials.get_current_price() dividend_yield = yahoo_financials.get_dividend_yield() income_balance = si.get_income_statement(ticker) transpose_income = income_balance.transpose() balance_income = si.get_balance_sheet(ticker) transpose_balance = balance_income.transpose() st.write("""**Dividends**""", company.dividends) income = si.get_income_statement(ticker) transpose = income.transpose() interest_coverage1 = transpose['operatingIncome'] interest_coverage2 = transpose['interestExpense'] st.write( '***Interest Coverage:*** Operating Income / interest Expenses', interest_coverage1 / interest_coverage2) gross_profit_margin1 = transpose['totalRevenue'] gross_profit_margin2 = transpose['costOfRevenue'] st.write( '***Gross Profit Margin:*** Total Revenue / Gross Profit Margin', (gross_profit_margin1 - gross_profit_margin2) / gross_profit_margin1) balance = si.get_balance_sheet(ticker) transpose = balance.transpose() current_ratio1 = transpose['totalCurrentAssets'] current_ratio2 = transpose['totalCurrentLiabilities'] debt_to_assets1 = transpose['otherCurrentAssets'] debt_to_assets2 = transpose['totalAssets'] st.write('***Debit Assets:*** Total Debit / Total Assets', (debt_to_assets1 / debt_to_assets2)) debt_to_equity1 = transpose['otherCurrentAssets'] debt_to_equity2 = transpose['totalStockholderEquity'] st.write( '***Debit to Equity:*** Total Debit / Total Stock Holders Equity', (debt_to_equity1 / debt_to_equity2)) ROE1 = transpose_income['netIncome'] ROE2 = transpose_balance['totalStockholderEquity'] st.write( '***Return On Equity ROE:*** Net Income / (Total Stock Holder Equity + Total Stock Holder Equity)/2', (ROE1 / ((ROE2 + ROE2) / 2))) ROA1 = transpose_income['netIncome'] ROA2 = transpose_balance['totalAssets'] st.write('***Return On Assets:*** Net Income / Total Assets', (ROA1 / ROA2)) company_simulation = st.sidebar.checkbox("Monte Carlo Simulation") if company_simulation: st.markdown( "<h1 style='text-align: center; color: #002966;'>Monte Carlo Simulation Price</h1>", unsafe_allow_html=True) st.write( """Monte Carlo Simulation project future price for the stocks. """) yahoo_financials = YahooFinancials(ticker) price = yahoo_financials.get_current_price() st.write('***Current Price:***', price) marketcap = yahoo_financials.get_market_cap() st.write('***Market Capital***', marketcap) income_balance = si.get_income_statement(ticker) transpose_income = income_balance.transpose() revenue = transpose_income['totalRevenue'] st.write('***Price to sales:*** (Market Capital / Revenue', marketcap / revenue) price_to_earnings = transpose_income['netIncome'] st.write('***Price to Earnings:*** (Market Capital/ Net Income', marketcap / price_to_earnings) balance_income = si.get_balance_sheet(ticker) transpose_balance = balance_income.transpose() price_to_book = transpose_balance['totalStockholderEquity'] st.write('***Price to book:*** (marketcap/Total Stock Holders Equity', marketcap / price_to_book) start = st.date_input("Please enter date begin Analysis: ") price = yf.download(ticker, start=start, end=None)['Close'] returns = price.pct_change() last_price = price[-1] num_simulations = 1000 num_days = 252 num_simulations_df = pd.DataFrame() for x in range(num_simulations): count = 0 daily_vol = returns.std() price_series = [] price = last_price * (1 + np.random.normal(0, daily_vol)) price_series.append(price) for y in range(num_days): if count == 251: break price = price_series[count] * (1 + np.random.normal(0, daily_vol)) price_series.append(price) count += 1 num_simulations_df[x] = price_series fig = plt.figure() plt.title('Monte Carlo Simulation') plt.plot(num_simulations_df) plt.axhline(y=last_price, color='r', linestyle='-') plt.xlabel('Day') plt.ylabel('Price') st.set_option('deprecation.showPyplotGlobalUse', False) st.pyplot() st.write('Price Series Predict: ', num_simulations_df) # company_general = st.sidebar.checkbox("Quick_Ratio") # if company_general: # st.subheader("""**Quick Ratio**""") # balance=si.get_balance_sheet(ticker) # transpose=balance.transpose() # quick_ratio1 = transpose['otherCurrentAssets'] # quick_ratio2 = transpose['inventory'] # quick_ratio3 = transpose['otherCurrentLiab'] # quick_ratio = ((quick_ratio1-quick_ratio2)/quick_ratio3) # if not quick_ratio2: # st.write("No data available") # else: # st.write('(***Quick Ratio:*** CurrentAssets - Inventory)/Current Liabilities)', (quick_ratio1-quick_ratio2)/quick_ratio3) company_hist = st.sidebar.checkbox("Cash Flow") if company_hist: st.markdown( "<h1 style='text-align: center; color: #002966;'>Cash Flow</h1>", unsafe_allow_html=True) display_cash = si.get_cash_flow(ticker) if display_cash.empty == True: st.write("No data available") else: st.write(display_cash) company_hist = st.sidebar.checkbox("Income Statement") if company_hist: st.markdown( "<h1 style='text-align: center; color: #002966;'>Income Statement</h1>", unsafe_allow_html=True) display_income_stat = si.get_income_statement(ticker) if display_income_stat.empty == True: st.write("No data available") else: st.write(display_income_stat) company_hist = st.sidebar.checkbox("Balance Sheet") if company_hist: st.markdown( "<h1 style='text-align: center; color: #002966;'>Balance Sheet</h1>", unsafe_allow_html=True) display_balance = si.get_balance_sheet(ticker) if display_balance.empty == True: st.write("No data available") else: st.write(display_balance) company_hist = st.sidebar.checkbox("Quote Table") if company_hist: st.markdown( "<h1 style='text-align: center; color: #002966;'>Quote Table</h1>", unsafe_allow_html=True) display_table = si.get_quote_table(ticker, dict_result=False) if display_table.empty == True: st.write("No data available") else: st.write(display_table) quote_table = si.get_quote_table(ticker) t = quote_table["Forward Dividend & Yield"] st.write('Forward Dividend & Yield:', t) display_capital = si.get_quote_table(ticker)["Market Cap"] st.write('Market Capital', display_capital) company_hist = st.sidebar.checkbox("Call Option") if company_hist: st.markdown( "<h1 style='text-align: center; color: #002966;'>Call Option</h1>", unsafe_allow_html=True) c = ops.get_calls(ticker) transpose = c.transpose() st.write(transpose)
print(si.get_data(input_arguments.symbol)) elif input_arguments.information == 'quote': pp.pprint(si.get_quote_table(input_arguments.symbol)) elif input_arguments.information == 'stats': pp.pprint(si.get_stats(input_arguments.symbol)) elif input_arguments.information == 'holders': pp.pprint(si.get_holders(input_arguments.symbol)) elif input_arguments.information == 'analysis': pp.pprint(si.get_analysts_info(input_arguments.symbol)) elif input_arguments.information == 'income': pp.pprint(si.get_income_statement(input_arguments.symbol)) elif input_arguments.information == 'balance': pp.pprint(si.get_balance_sheet(input_arguments.symbol)) elif input_arguments.information == 'cashflow': pp.pprint(si.get_cash_flow(input_arguments.symbol)) sys.exit() previous_price = 0 profit = 0 current_price = 0
def getYearlyIncomeStatement(ticker): return si.get_income_statement(ticker, yearly=True)
def getQuarterlyIncomeStatement(ticker): return si.get_income_statement(ticker, yearly=False)
def financial_stmt_checks(stock_nm): stock_nm="VSTIND.NS" income_statement = si.get_income_statement(stock_nm) balance_sheet = si.get_balance_sheet(stock_nm) cash_flow_statement = si.get_cash_flow(stock_nm) income_statement.fillna(0, inplace=True) income_statement=income_statement.div(10000000).astype(int) balance_sheet.fillna(0, inplace=True) balance_sheet=balance_sheet.div(10000000).astype(int) cash_flow_statement.fillna(0, inplace=True) cash_flow_statement=cash_flow_statement.div(10000000).astype(int) income_statement_df=income_statement.transpose() balance_sheet_df=balance_sheet.transpose() cash_flow_statement_df=cash_flow_statement.transpose() revenue=income_statement_df['totalRevenue'] pat=income_statement_df['incomeBeforeTax'] nprof=income_statement_df['netIncomeFromContinuingOps'] net_prof=income_statement_df['netIncomeApplicableToCommonShares'] #op_exp=income_statement_df['totalOperatingExpenses'] #########Aggregation########## tot_revenue=income_statement_df['totalRevenue'].sum() tot_exp=income_statement_df['totalOperatingExpenses'].sum() tot_np=income_statement_df['netIncomeFromContinuingOps'].sum() avg_revenue=income_statement_df['totalRevenue'].mean() cfo=cash_flow_statement_df['totalCashFromOperatingActivities'] CCFO=cfo.sum() CNPAT=income_statement_df['netIncomeApplicableToCommonShares'].sum() CCFO_to_CNPAT=round(CCFO/CNPAT,2) ebit=income_statement_df['ebit'].sort_index() net_prof_sort=income_statement_df['netIncomeApplicableToCommonShares'].sort_index() ebit_to_net_prof=(ebit/net_prof_sort) avg_ebit_to_net_prof=ebit_to_net_prof.mean() #tot_int=income_statement_df['interestExpense'].sum() ############################# if "netReceivables" in balance_sheet_df: avg_recei=balance_sheet_df['netReceivables'].mean() avg_recei_latest=balance_sheet_df['netReceivables'] else: #print ("notfound") avg_recei_df = revenue avg_recei_df = avg_recei_df.replace(avg_recei_df, 0) avg_recei=avg_recei_df.mean() avg_recei_latest=avg_recei_df revenue.sort_index() pat.sort_index() nprof.sort_index() net_prof.sort_index() def int_to_net_prof_lt(): tot_int=income_statement_df['interestExpense'].sum() if tot_int ==0: tot_int=0.001 if (tot_int/CNPAT) <= 0.5: print ("All checks passed", stock_nm) def ebit_to_net_prof_check(): latest_ebit_to_net_prof = float(ebit_to_net_prof.iloc[-1]) if latest_ebit_to_net_prof >= (avg_ebit_to_net_prof - (avg_ebit_to_net_prof*10/100)): #print ("All checks passed") int_to_net_prof_lt() def Ccfo_to_Cpat(): if CCFO_to_CNPAT > 0.8: #print ("All checks passed") ebit_to_net_prof_check() def receivables_sales(): if avg_recei <= ((avg_revenue*30)/100): #print ("All checks passed") Ccfo_to_Cpat() def net_prof_sales_gt_8pct(): if tot_np >= ((tot_revenue*8)/100): receivables_sales() def expense_less_sales(): if tot_revenue>=tot_exp: net_prof_sales_gt_8pct() def net_prof_growth(): print ("inside net_prof_growth" ) end_value = float(net_prof.iloc[0]) start_value = float(net_prof.iloc[-1]) num_periods = len(net_prof) if end_value < 0: end_value=0.001 else: end_value=end_value if start_value <= 0: start_value=0.001 else: start_value=start_value if start_value == end_value: net_prof_grw=0 else: net_prof_grw=((end_value / start_value) ** (1 / (num_periods )) - 1)*100 print ("Net profit growth", net_prof_grw) if int(net_prof_grw) > 7: expense_less_sales() #net_prof_growth() def income_stmt(): print ("income",avg_recei) net_prof_growth() balance_sheet() def balance_sheet(): print ("balance",avg_recei) cashflow_stmt() def cashflow_stmt(): print ("cashflow",avg_recei) def dummy(): net_prof_growth() dummy()
def page_5(): failures = 0 for i in Tickers5: if pd.isna(StockInfo.loc[i, 'Revenue GLY']): time.sleep(5) # This IF statement is for error handling. Sometimes it fails and just needs some time to rest before it can work again. IDK why. if failures > 4: time.sleep(120) failures = 0 else: try: income_statement = sp.get_income_statement(i) income_statement.reset_index(inplace = True) # Calculate growth from income statements - GLY indicates "Growth Last Year" try: StockInfo.loc[i, 'Revenue GLY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Total Revenue'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Total Revenue'].iloc[:,3])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Total Revenue'].iloc[:,3])[0])) StockInfo.loc[i, 'Revenue GTY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Total Revenue'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Total Revenue'].iloc[:,5])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Total Revenue'].iloc[:,5])[0])) failures = 0 Tickers5.remove(i) print('page 5 successful for {}.'.format(i)) except: print('page 5 failed for {}.'.format(i)) pass failures = failures + 1 try: StockInfo.loc[i, 'Cost of Revenue GLY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Cost of Revenue'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Cost of Revenue'].iloc[:,3])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Cost of Revenue'].iloc[:,3])[0])) StockInfo.loc[i, 'Cost of Revenue GTY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Cost of Revenue'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Cost of Revenue'].iloc[:,5])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Cost of Revenue'].iloc[:,5])[0])) except: pass try: StockInfo.loc[i, 'Gross Profit GLY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Gross Profit'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Gross Profit'].iloc[:,3])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Gross Profit'].iloc[:,3])[0])) StockInfo.loc[i, 'Gross Profit GTY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Gross Profit'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Gross Profit'].iloc[:,5])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Gross Profit'].iloc[:,5])[0])) except: pass try: StockInfo.loc[i, 'Operating Expense GLY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Operating Expense'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Operating Expense'].iloc[:,3])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Operating Expense'].iloc[:,3])[0])) StockInfo.loc[i, 'Operating Expense GTY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Operating Expense'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Operating Expense'].iloc[:,5])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Operating Expense'].iloc[:,5])[0])) except: pass try: StockInfo.loc[i, 'Operating Income GLY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Operating Income'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Operating Income'].iloc[:,3])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Operating Income'].iloc[:,3])[0])) StockInfo.loc[i, 'Operating Income GTY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Operating Income'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Operating Income'].iloc[:,5])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Operating Income'].iloc[:,5])[0])) except: pass try: StockInfo.loc[i, 'Net Income GLY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Net Income Common Stockholders'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Net Income Common Stockholders'].iloc[:,3])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Net Income Common Stockholders'].iloc[:,3])[0])) StockInfo.loc[i, 'Net Income GTY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Net Income Common Stockholders'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Net Income Common Stockholders'].iloc[:,5])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Net Income Common Stockholders'].iloc[:,5])[0])) except: pass try: StockInfo.loc[i, 'Basic EPS GLY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Basic EPS'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Basic EPS'].iloc[:,3])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Basic EPS'].iloc[:,3])[0])) StockInfo.loc[i, 'Basic EPS GTY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Basic EPS'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Basic EPS'].iloc[:,5])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Basic EPS'].iloc[:,5])[0])) except: pass try: StockInfo.loc[i, 'Diluted EPS GLY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Diluted EPS'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Diluted EPS'].iloc[:,3])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Diluted EPS'].iloc[:,3])[0])) StockInfo.loc[i, 'Diluted EPS GTY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Diluted EPS'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Diluted EPS'].iloc[:,5])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Diluted EPS'].iloc[:,5])[0])) except: pass try: StockInfo.loc[i, 'EBIT GLY'] = (float(list(income_statement[income_statement['Breakdown'] == 'EBIT'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'EBIT'].iloc[:,3])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'EBIT'].iloc[:,3])[0])) StockInfo.loc[i, 'EBIT GTY'] = (float(list(income_statement[income_statement['Breakdown'] == 'EBIT'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'EBIT'].iloc[:,5])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'EBIT'].iloc[:,5])[0])) except: pass try: StockInfo.loc[i, 'EBITDA GLY'] = (float(list(income_statement[income_statement['Breakdown'] == 'EBITDA'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'EBITDA'].iloc[:,3])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'EBITDA'].iloc[:,3])[0])) StockInfo.loc[i, 'EBITDA GTY'] = (float(list(income_statement[income_statement['Breakdown'] == 'EBITDA'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'EBITDA'].iloc[:,5])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'EBITDA'].iloc[:,5])[0])) except: pass try: StockInfo.loc[i, 'Normalized EBITDA GLY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Normalized EBITDA'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Normalized EBITDA'].iloc[:,3])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Normalized EBITDA'].iloc[:,3])[0])) StockInfo.loc[i, 'Normalized EBITDA GTY'] = (float(list(income_statement[income_statement['Breakdown'] == 'Normalized EBITDA'].iloc[:,2])[0]) - float(list(income_statement[income_statement['Breakdown'] == 'Normalized EBITDA'].iloc[:,5])[0])) / abs(float(list(income_statement[income_statement['Breakdown'] == 'Normalized EBITDA'].iloc[:,5])[0])) except: pass except: pass else: print('Page 5 for {} is complete.'.format(i)) pass with pd.ExcelWriter(download_path + '\\Stock Rankings ' + str(today) + '.xlsx') as writer: StockInfo.to_excel(writer, sheet_name='Stats', index = False)
from yahoo_fin import stock_info as si import pprint as pp symbol = 'HDFCBANK.NS' print(si.get_live_price(symbol)) print(si.get_data(symbol)) pp.pprint(si.get_quote_table(symbol)) pp.pprint(si.get_stats(symbol)) pp.pprint(si.get_holders(symbol)) pp.pprint(si.get_analysts_info(symbol)) pp.pprint(si.get_income_statement(symbol)) pp.pprint(si.get_balance_sheet(symbol)) pp.pprint(si.get_cash_flow(symbol))
def get_income_statement(self): if self.storage == None: return self.format1D(stock_info.get_income_statement(self.stock)) else: self.storage['income_statement'] = self.format1D(stock_info.get_income_statement(self.stock))
def income_bar(ses_data, search_btn, search): if search_btn: try: income_sheet = si.get_income_statement(search) except KeyError: income_sheet = si.get_income_statement("aapl") elif ses_data: income_sheet = si.get_income_statement(ses_data["test"]) else: income_sheet = si.get_income_statement("aapl") inc = income_sheet.T inc["date"] = inc.index date = inc["date"].dt.year netincome = (inc["netIncome"] / 1000000000).astype(float).round(2) totalrev = (inc["totalRevenue"] / 1000000000).astype(float).round(2) opincome = (inc["operatingIncome"] / 1000000000).astype(float).round(2) color = np.array(['rgb(255,255,255)'] * netincome.shape[0]) color[netincome < 0] = 'crimson' color[netincome >= 0] = 'green' fig2 = go.Figure(data=[ go.Bar(name='Net Income', x=date, y=inc["netIncome"], marker=dict(color=color.tolist()), text=netincome, textfont_size=8, textposition='outside'), go.Bar(name='Total Revenue', x=date, y=inc["totalRevenue"], text=totalrev, textfont_size=8, textposition='outside', visible='legendonly'), go.Bar(name='Opt Income', x=date, y=inc["operatingIncome"], text=opincome, textfont_size=8, textposition='outside', visible='legendonly') ]) # Change the bar mode fig2.update_layout(barmode='group', height=395, title_text='Income Statement', title_x=0.5, margin=dict(t=70, b=20, l=55, r=40), paper_bgcolor='rgba(0,0,0,0)', plot_bgcolor='rgba(0,0,0,0)') fig2.update_layout(legend=dict( orientation="h", yanchor="bottom", y=1, xanchor="right", x=0.95, font=dict(size=9, ), )) return fig2
async def income_statement(ctx, *, ticker): await ctx.send(si.get_income_statement(ticker))
if symbol == 'Q': break if Company_name(symbol) == None: print('Company not found') print('') col += 1 continue print('Company: ' + Company_name(symbol)) print('Collecting Data: ', end = '') start_time = time.time() Balance_Sheet = si.get_balance_sheet(symbol) Income_Statement = si.get_income_statement(symbol) Cash_Flow = si.get_cash_flow(symbol) Quote = si.get_quote_table(symbol) Valuation_Stats = si.get_stats_valuation(symbol) print(round(time.time() - start_time,2), 'seconds') ##column 2 print('Insert Data: ', end = '') start_time = time.time() total_assets = int(Balance_Sheet.loc[list(Balance_Sheet.iloc[:,0]).index('Total Assets')][1]) total_debt = int(Balance_Sheet.loc[list(Balance_Sheet.iloc[:,0]).index('Total Debt')][1]) try: ebitda_anual = int(Income_Statement.loc[list(Income_Statement.iloc[:,0]).index('Normalized EBITDA')][2]) except: ebitda_anual = 'Fail' if ebitda_anual == 'Fail': Debt_Ebitda = 'Fail'
print(int(input('Stock Based Compensation:'))) Ticker = input("Insert Ticker:") quote = yf.get_quote_table(Ticker) # indexing market cap MarketCap = quote["Market Cap"] # print market cap beta = quote["Beta (5Y Monthly)"] print('Market Cap:', "{:,}".format(conv_mrktcap(MarketCap)), '$') print('Beta:', beta) stats = yf.get_stats_valuation(Ticker) Data = yf.get_data(Ticker) Balance_Sheet = yf.get_balance_sheet(Ticker) financials = yf.get_financials(Ticker) analyst = yf.get_analysts_info(Ticker) # import company's valuations as stats income = yf.get_income_statement(Ticker) Cash = yf.get_cash_flow(Ticker) # import comapny's income statement as income ebit = income.loc["ebit"] # indexing ebit in icnome statement ebit2020 = int(ebit["2020"]) # indexing latest ebit in income statement print('Latest Calender Ebit:', "{:,}".format(ebit2020), "$") interestExpense = income.loc['interestExpense'] # indexing interest expense in imcome statement interestExpense2020 = int(-interestExpense["2020"]) # indexing latest interest expemse in income statement print('Latest Calendar Interest Expense:', "{:,}".format(interestExpense2020), '$')
for ticker in all_tickers: all_historical[ticker] = si.get_data(ticker) print(ticker) dow_historical = {} for ticker in dow_list: dow_historical = si.get_data(ticker, start_date='1990-01-01', end_date='2020-01-01', interval='1d') print(ticker) print(si.get_quote_table('AAPL')) print(si.get_stats('AAPL')[si.get_stats('AAPL')['Attribute'] == 'EBITDA']['Value'].iloc[0]) """ all_data = {} for ticker in {'AMZN'}: balance_sheet = si.get_balance_sheet(ticker, False) income_statement = si.get_income_statement(ticker, False) cash_flow = si.get_cash_flow(ticker, False) stats = si.get_stats(ticker) analysts_info = si.get_analysts_info(ticker) earnings = si.get_earnings(ticker) oneyear_return = (si.get_data(ticker, start_date=datetime.today()-timedelta(days=365), end_date=datetime.today())['close'].iloc[-1] - si.get_data(ticker, start_date=datetime.today()-timedelta(days=365), end_date=datetime.today())['close'][0])/si.get_data(ticker, start_date=datetime.today()-timedelta(days=365), end_date=datetime.today())['close'][0] stats.columns = ['Labels', 'Values'] stats_labels = [] stats_values = [] for i in range(stats.shape[0]): stats_labels.append(stats.iat[i, 0]) stats_values.append(stats.iat[i, 1]) stats_df = pd.DataFrame({'Values': stats_values}, index=stats_labels)