Exemple #1
0
def getMarketData():
    tickers = 'AAPL'
    financials = YahooFinancials(tickers)

    #	company_stock_price = financials.get_stock_price_data() #gets stock price information

    historical_stock_prices_data = financials.get_historical_price_data(
        '2015-11-21', '2020-11-21',
        'daily')  #gets historical daily stock price of company
    #	get_Div_data(historical_stock_prices_data[tickers])
    get_stock_price_data(historical_stock_prices_data[tickers])

    #	company_balance_sheet_data_qt = financials.get_financial_stmts('quarterly', 'balance') #get balance sheet
    #	company_income_statement_data_qt = financials.get_financial_stmts('quarterly', 'income') #get income statement

    company_key_statistics_data = financials.get_key_statistics_data(
    )  #includes profit margins, forward eps, yearly change etc.
    #	get_forward_pe(company_key_statistics_data[tickers])
    #	get_trailing_eps(company_key_statistics_data[tickers])
    #	get_foward_eps(company_key_statistics_data[tickers])
    #	get_ytdReturn(company_key_statistics_data[tickers])

    company_earnings_data = financials.get_stock_earnings_data(
    )  #historical eps only for 1 year span
    #	get_earnings_data(company_earnings_data[tickers])

    company_dividend_yield = financials.get_dividend_yield(
    )  #current dividends yield
    company_dividend = financials.get_dividend_rate()  #current dividends rate
    company_avg_div_yield_1year = financials.get_annual_avg_div_yield(
    )  #average 1 year div yield
    company_avg_div_yield_5year = financials.get_five_yr_avg_div_yield(
    )  #average 5 year div yield
    company_eps = financials.get_earnings_per_share()  #current eps
    company_pe = financials.get_pe_ratio()  #current pe ratio
    company_beta = financials.get_beta()  #current beta
    company_current_stock_price = financials.get_current_price(
    )  #current stock price

    company_revenue = financials.get_total_revenue()  #current company revenue
    company_operating_income = financials.get_operating_income(
    )  #current company operating income
    company_net_income = financials.get_net_income()  #current net income

    company_yearly_high = financials.get_yearly_high()  #get yearly high
    company_yearly_low = financials.get_yearly_low()  #get yearly low
    company_moving_50 = financials.get_50day_moving_avg(
    )  #50 day moving average of stock
    company_moving_200 = financials.get_200day_moving_avg(
    )  #200 day moving average of stock
Exemple #2
0
 def get_financial_values_by_ticker(ticker):
     print('Finding ticker in Yahoo Finance...')
     s = YahooFinancials(ticker)
     financial_values = {'beta': round(s.get_beta(), 2), 'current_price': round(s.get_current_price(), 2),
                         'prev_close_price': round(s.get_prev_close_price(), 2)}
     return financial_values
Exemple #3
0
class Company(object):
    def __init__(self, ticker):
        self.ticker = ticker.upper()
        self.financials = YahooFinancials(ticker)
        self.timeframe = 'annual'
        self.balance_sheet = None
        self.income_statement = None
        self.cash_flow_statement = None
        self.key_statistics = None
        self.historical_eps = None
        self.price_data = None
        self.new_corporate_tax_rate = 0.21
        self.old_corporate_tax_rate = 0.35
        self.risk_free_ror = 0.025
        self.market_ror = 0.098

    def __set_balance_sheet(self):
        if str(type(self.balance_sheet)) == "<class 'NoneType'>":
            try:
                self.balance_sheet = self.financials.get_financial_stmts(
                    self.timeframe,
                    'balance')['balanceSheetHistory'][self.ticker]
                self.balance_sheet = self.__clean_statement_timestamp(
                    self.balance_sheet)
            except:
                return None

    def __set_income_statement(self):
        if str(type(self.income_statement)) == "<class 'NoneType'>":
            try:
                self.income_statement = self.financials.get_financial_stmts(
                    self.timeframe,
                    'income')['incomeStatementHistory'][self.ticker]
                self.income_statement = self.__clean_statement_timestamp(
                    self.income_statement)
            except:
                return None

    def __set_cash_flow_statement(self):
        if str(type(self.cash_flow_statement)) == "<class 'NoneType'>":
            try:
                self.cash_flow_statement = self.financials.get_financial_stmts(
                    self.timeframe,
                    'cash')['cashflowStatementHistory'][self.ticker]
                self.cash_flow_statement = self.__clean_statement_timestamp(
                    self.cash_flow_statement)
            except:
                return None

    def __set_key_statistics(self):
        if str(type(self.key_statistics)) == "<class 'NoneType'>":
            try:
                self.key_statistics = self.financials.get_key_statistics_data()
            except:
                return None

    def __set_historical_eps(self):
        if str(type(self.historical_eps)) == "<class 'NoneType'>":
            url = 'https://www.nasdaq.com/earnings/report/{}'.format(
                self.ticker)
            page = requests.get(url)
            if page.status_code == 200:
                soup = BeautifulSoup(page.text, 'html.parser')
                eps_list = []
                td = soup.find_all('td')
                counter = 0
                for i in td[2::5]:
                    try:
                        test = float(i.get_text())
                        counter += 1
                    except:
                        break
                for i in range(counter * 5):
                    eps_list.append(list(soup.find_all('td'))[i].get_text())
                self.historical_eps = pd.DataFrame({
                    'textdate':
                    eps_list[0::5],
                    'timestamp':
                    eps_list[1::5],
                    'eps':
                    eps_list[2::5],
                    'consensus_eps':
                    eps_list[3::5],
                    'surprise':
                    eps_list[4::5]
                })
                self.historical_eps = self.historical_eps.iloc[::-1]
                self.historical_eps.reset_index(inplace=True, drop=True)
            else:
                return None

    def __set_price_data(self):
        if str(type(self.price_data)) == "<class 'NoneType'>":
            try:
                self.price_data = pd.DataFrame(
                    self.financials.get_historical_price_data(
                        '1800-01-01',
                        str(datetime.now())[:10],
                        'daily')[self.ticker]['prices'])
            except:
                pass

    def __clean_statement_timestamp(self, statement):
        for i in statement:
            for j in i.keys():
                i[j[:4]] = i.pop(j)
        return statement

    def __get_specific_year(self, statement, year):
        for i in statement:
            if str(list(i.keys())[0]) == str(year):
                return i['{}'.format(year)]

    def __json_to_dataframe(self, data):
        columns = []
        for i in data:
            for j in i.keys():
                columns.append(j)
        df = pd.DataFrame(data[0])
        for i in range(len(columns)):
            df[columns[i]] = pd.DataFrame(data[i])
        df = df[df.columns[::-1]]
        return df

    def set_risk_free_ror(self, risk_free_ror):
        self.risk_free_ror = risk_free_ror

    def set_market_ror(self, market_ror):
        self.market_ror = market_ror

    def check_risk_free_ror(self):
        return self.risk_free_ror

    def check_market_ror(self):
        return self.market_ror

    def check_old_corporate_tax_rate(self):
        return self.old_corporate_tax_rate

    def check_new_corporate_tax_rate(self):
        return self.new_corporate_tax_rate

    def get_balance_sheet(self):
        self.__set_balance_sheet()
        df = self.__json_to_dataframe(self.balance_sheet)
        return df

    def get_income_statement(self):
        self.__set_income_statement()
        df = self.__json_to_dataframe(self.income_statement)
        return df

    def get_cash_flow_statement(self):
        self.__set_cash_flow_statement()
        df = self.__json_to_dataframe(self.cash_flow_statement)
        return df

    def get_key_statistics(self):
        self.__set_key_statistics()
        ser = pd.Series(self.key_statistics[self.ticker])
        return ser

    def get_historical_eps(self):
        self.__set_historical_eps()
        return self.historical_eps

    def get_price_data(self):
        self.__set_price_data()
        return self.price_data

    def check_ticker(self):
        return self.ticker

    def revenue(self, year):
        self.__set_income_statement()
        try:
            return self.__get_specific_year(self.income_statement,
                                            year)['totalRevenue']
        except:
            return None

    def total_expenses(self, year):
        self.__set_income_statement()
        self.__set_cash_flow_statement()
        try:
            operating_expenses = self.__get_specific_year(
                self.income_statement, year)['totalOperatingExpenses']
            interest = self.__get_specific_year(self.income_statement,
                                                year)['interestExpense']
            tax = self.__get_specific_year(self.income_statement,
                                           year)['incomeTaxExpense']
            depreciation = self.__get_specific_year(self.cash_flow_statement,
                                                    year)['depreciation']
            return abs(operating_expenses) + abs(interest) + abs(tax) + abs(
                depreciation)
        except:
            return None

    def operating_expenses(self, year):
        self.__set_income_statement()
        try:
            return self.__get_specific_year(self.income_statement,
                                            year)['totalOperatingExpenses']
        except:
            return None

    def outstanding_shares(self):
        self.__set_key_statistics()
        try:
            return self.get_key_statistics()['sharesOutstanding']
        except:
            return None

    def share_price(self):
        self.__set_price_data()
        try:
            return float(self.price_data[-1:]['close'])
        except:
            return None

    def market_value(self):
        try:
            return self.share_price() * self.outstanding_shares()
        except:
            return None

    def liquid_assets(self, year):
        self.__set_balance_sheet()
        try:
            return self.__get_specific_year(
                self.balance_sheet, year)['cash'] + self.__get_specific_year(
                    self.balance_sheet, year)['shortTermInvestments']
        except:
            return None

    def total_debt(self, year):
        self.__set_balance_sheet()
        try:
            return self.__get_specific_year(
                self.balance_sheet,
                year)['shortLongTermDebt'] + self.__get_specific_year(
                    self.balance_sheet, year)['longTermDebt']
        except:
            return None

    def tax(self, year):
        self.__set_income_statement()
        try:
            return abs(
                self.__get_specific_year(self.income_statement,
                                         year)['incomeTaxExpense'])
        except:
            return None

    def interest(self, year):
        self.__set_income_statement()
        try:
            return self.__get_specific_year(self.income_statement,
                                            year)['interestExpense']
        except:
            return None

    def depreciation(self, year):
        self.__set_cash_flow_statement()
        try:
            return self.__get_specific_year(self.cash_flow_statement,
                                            year)['depreciation']
        except:
            return None

    def cost_of_revenue(self, year):
        self.__set_income_statement()
        try:
            return self.__get_specific_year(self.income_statement,
                                            year)['costOfRevenue']
        except:
            return None

    def total_receivables(self, year):
        self.__set_balance_sheet()
        try:
            return self.__get_specific_year(self.balance_sheet,
                                            year)['netReceivables']
        except:
            return None

    def total_liabilities(self, year):
        self.__set_balance_sheet()
        try:
            return self.__get_specific_year(self.balance_sheet,
                                            year)['totalLiab']
        except:
            return None

    def total_assets(self, year):
        self.__set_balance_sheet()
        try:
            return self.__get_specific_year(self.balance_sheet,
                                            year)['totalAssets']
        except:
            return None

    def total_capital(self, year):
        self.__set_balance_sheet()
        try:
            return self.__get_specific_year(
                self.balance_sheet,
                year)['totalStockholderEquity'] + self.total_debt(year)
        except:
            return None

    def total_equity(self, year):
        try:
            return self.total_assets(year) - self.total_liabilities(year)
        except:
            return None

    def capital_expenditures(self, year):
        self.__set_cash_flow_statement()
        try:
            return self.__get_specific_year(self.cash_flow_statement,
                                            year)['capitalExpenditures']
        except:
            return None

    def net_income(self, year):
        self.__set_income_statement()
        try:
            return self.__get_specific_year(self.income_statement,
                                            year)['netIncome']
        except:
            return None

    def gross_profit(self, year):
        self.__set_income_statement()
        try:
            return self.__get_specific_year(self.income_statement,
                                            year)['grossProfit']
        except:
            return None

    def earnings_per_share(self):
        try:
            return self.financials.get_earnings_per_share()
        except:
            return None

    def pe_ratio(self):
        try:
            return self.financials.get_pe_ratio()
        except:
            return None

    def enterprise_value(self):
        try:
            return self.get_key_statistics()['enterpriseValue']
        except:
            return None

    def ebit(self, year):
        self.__set_income_statement()
        try:
            return self.__get_specific_year(self.income_statement,
                                            year)['ebit']
        except:
            return None

    def ebitda(self, year):
        try:
            temp_net_income = abs(self.net_income(year))
            temp_tax = abs(self.tax(year))
            temp_interest = abs(self.interest(year))
            temp_depreciation = abs(self.depreciation(year))
            return temp_net_income + temp_tax + temp_interest + temp_depreciation
        except:
            return None

    def quick_ratio(self, year):
        try:
            temp_liquid_assets = abs(self.liquid_assets(year))
            temp_receivables = abs(self.total_receivables(year))
            temp_liabilities = abs(self.total_liabilities(year))
            return (temp_liquid_assets + temp_receivables) / temp_liabilities
        except:
            return None

    def income_continuing_operations_margin(self, year):
        try:
            temp_ebit = self.ebit(year)
            temp_revenue = abs(self.revenue(year))
            return temp_ebit / temp_revenue
        except:
            return None

    def net_margin(self, year):
        try:
            temp_net_income = self.net_income(year)
            temp_revenue = self.revenue(year)
            return temp_net_income / temp_revenue
        except:
            return None

    def return_on_assets(self, year):
        try:
            ending_year = year
            beginning_year = year - 1
            temp_net_income = self.net_income(year)
            beginning_total_assets = abs(self.total_assets(beginning_year))
            ending_total_assets = abs(self.total_assets(ending_year))
            return temp_net_income / (
                (beginning_total_assets + ending_total_assets) / 2)
        except:
            return None

    def return_on_capital(self, year):
        try:
            ending_year = year
            beginning_year = year - 1
            if ending_year >= 2018:
                temp_ebit = self.ebit(year)
                temp_tax_rate = self.new_corporate_tax_rate
                beginning_total_capital = abs(
                    self.total_capital(beginning_year))
                ending_total_capital = abs(self.total_capital(ending_year))
                return (temp_ebit * (1 - temp_tax_rate)) / (
                    (beginning_total_capital + ending_total_capital) / 2)
            elif ending_year < 2018:
                temp_ebit = self.ebit(year)
                temp_tax_rate = self.old_corporate_tax_rate
                beginning_total_capital = abs(
                    self.total_capital(beginning_year))
                ending_total_capital = abs(self.total_capital(ending_year))
                return (temp_ebit * (1 - temp_tax_rate)) / (
                    (beginning_total_capital + ending_total_capital) / 2)
        except:
            return None

    def return_on_equity(self, year):
        try:
            temp_ebit = self.ebit(year)
            temp_total_equity = abs(self.total_equity(year))
            return temp_ebit / temp_total_equity
        except:
            return None

    def cash_flow_operations(self, year):
        try:
            temp_revenue = abs(self.revenue(year))
            temp_operating_expenses = abs(self.operating_expenses(year))
            return temp_revenue - temp_operating_expenses
        except:
            return None

    def free_cash_flow(self, year):
        try:
            if year >= 2018:
                temp_cfo = self.cash_flow_operations(year)
                temp_interest = self.interest(year)
                temp_tax_rate = self.new_corporate_tax_rate
                temp_capex = self.capital_expenditures(year)
                return temp_cfo + (temp_interest *
                                   (1 - temp_tax_rate)) - temp_capex
            elif year < 2018:
                temp_cfo = self.cash_flow_operations(year)
                temp_interest = self.interest(year)
                temp_tax_rate = self.old_corporate_tax_rate
                temp_capex = self.capital_expenditures(year)
                return temp_cfo + (temp_interest *
                                   (1 - temp_tax_rate)) - temp_capex
        except:
            return None

    def beta(self):
        try:
            return self.financials.get_beta()
        except:
            return None

    def cost_of_equity(self):
        try:
            return self.risk_free_ror + (
                self.beta() * (self.market_ror - self.risk_free_ror))
        except:
            return None

    def gross_profit_margin(self, year):
        try:
            return (self.revenue(year) -
                    self.cost_of_revenue(year)) / self.revenue(year)
        except:
            return None

    def operating_profit_margin(self, year):
        try:
            return self.ebit(year) / self.revenue(year)
        except:
            return None

    def net_profit_margin(self, year):
        try:
            return self.net_income(year) / self.revenue(year)
        except:
            return None

    def short_ratio(self):
        try:
            return self.get_key_statistics()['shortRatio']
        except:
            return None