首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >雅虎股票分析漏报数据

雅虎股票分析漏报数据
EN

Code Review用户
提问于 2021-02-01 20:56:29
回答 2查看 295关注 0票数 2

不久前,我创建了一个对股票进行基本分析的程序。那时,我经常用手输入所有的值,这花费了很多时间,如果输入的值不正确,这是非常恼人的。现在,脚本自己处理了其中的大部分问题。有时,当API不完整时,脚本抛出一个KeyError,除了每个值之外,我还没有找到一个很好的方法。

不过,我确信,这个脚本可以得到很大的改进,并将感谢任何反馈。谢谢你,祝你今天愉快:)

代码语言:javascript
复制
from time import strftime
from pyfiglet import figlet_format
import json, locale, requests


# Reference: https://rapidapi.com/apidojo/api/yahoo-finance1?endpoint=apiendpoint_2e0b16d4-a66b-469e-bc18-b60cec60661b
# https://finance.yahoo.com/quote/AMRN/financials?p=AMRN

print(figlet_format("Stock Fundamental Analysis\n"))
print("Note: The Stock's numbers will be interpreted as Euro for all but american stocks")

print("Ticker symbol:")
ticker = input("> ")

url_base = "https://apidojo-yahoo-finance-v1.p.rapidapi.com/stock/v2/"
url_summary = url_base + "get-summary"
url_financials = url_base + "get-financials"

date = strftime("%Y-%m-%d")
time = strftime(" %H:%M:%S")


def get_json(url):
    """
    :param url: url to the API endpoint
    :return: json_data
    """
    querystring = {f"symbol": {ticker}}
    headers = {
        'x-rapidapi-key': "API-KEY",
        'x-rapidapi-host': "apidojo-yahoo-finance-v1.p.rapidapi.com"
    }

    response = requests.request("GET", url, headers=headers, params=querystring)
    j_data = json.loads(response.text)

    return j_data


def get_currency(currency):
    if currency == "USD":
        locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
    else:
        locale.setlocale(locale.LC_ALL, '')


def ask_yes_no(prompt):
    """
    :param prompt: The question to be asked
    :return: Value to check
    """
    while True:
        answer = input(prompt + " (y/n): ")

        if answer == "y":
            return True
        elif answer == "n":
            return False

        print("Please only enter y or n.")


def check_partners_trends():
    # Check Partners
    if ask_yes_no("Does it have big partners?"):
        partners = input("Who? ")
    else:
        partners = "none"

    # Check Trend
    if ask_yes_no("Does it participate in any current trends?"):
        trends = input("Which? ")
    else:
        trends = "none"

    return partners, trends


def check_age_forecast_commodity():
    # Check age
    if ask_yes_no("Is the company older than 10 years?"):
        old = True
    else:
        old = False

    # Check forecast
    if ask_yes_no("Do you still see the company around in 10 years?"):
        future = True
    else:
        future = False

    # Check commodity reliance
    if ask_yes_no("Is the company distinguishable from others/ Does it have an economic moat?"):
        distinguish = True
    else:
        distinguish = False

    return old, future, distinguish


partner, trend = check_partners_trends()
category = input("Category according to Peter Lynch: ")
age, forecast, moat = check_age_forecast_commodity()


print("Receiving data from Yahoo...")
###############################
""" --- Get-Summary --- """  ##
###############################

json_data = get_json(url_summary)

defaultKeyStatistics = json_data['defaultKeyStatistics']

profit_margin = defaultKeyStatistics['profitMargins']['fmt']
eps = defaultKeyStatistics['forwardEps']['raw']
book_value = defaultKeyStatistics['bookValue']['raw']
try:
    price_to_book = round(defaultKeyStatistics['priceToBook']['raw'], 2)
except KeyError:
    price_to_book = 0
peg_ratio = defaultKeyStatistics['pegRatio']['fmt']
shares_outstanding = defaultKeyStatistics['sharesOutstanding']['raw']
shares_short = defaultKeyStatistics['sharesShort']['raw']
short_ratio = defaultKeyStatistics['shortRatio']['fmt'] + "%"


summary_profile = json_data['summaryProfile']

sector = summary_profile['sector']
country = summary_profile['country']
city = summary_profile['city']
website = summary_profile['website']
industry = summary_profile['industry']


price = json_data['price']

market_cap = price['marketCap']['raw']
current_price = price['regularMarketPrice']['raw']
name = price['longName']


holders = json_data['majorHoldersBreakdown']

insiders_percentage = holders['insidersPercentHeld']['fmt']
institutions_percentage = holders['institutionsPercentHeld']['fmt']
institutions_float_percentage = holders['institutionsFloatPercentHeld']['fmt']
institutions_count = holders['institutionsCount']['fmt']


financialData = json_data['financialData']
currency = financialData['financialCurrency']
get_currency(currency)
gross_margin = financialData['grossMargins']['raw']
revenue_growth = financialData['revenueGrowth']['fmt']
operating_margins = financialData['operatingMargins']['fmt']
ebitda = financialData['ebitda']['fmt']
current_ratio = financialData['currentRatio']['raw']
return_on_assets = financialData['returnOnAssets']['raw']
debt_to_equity = financialData['debtToEquity']['fmt']
return_on_equity = financialData['returnOnEquity']['fmt']
total_cash_per_share = financialData['totalCashPerShare']['fmt']
quick_ratio = financialData['quickRatio']['fmt']
total_debt = financialData['totalDebt']['fmt']

##################################
""" --- Get-Financials --- """  ##
##################################

json_data = get_json(url_financials)


# Income Statement
def special_income():
    try:
        research = json_data['incomeStatementHistory']['incomeStatementHistory'][0]['researchDevelopment']['fmt']
    except KeyError:
        research = 0

    return research


income = json_data['incomeStatementHistory']['incomeStatementHistory']

total_rev = income[0]['totalRevenue']['raw']
last_rev = income[1]['totalRevenue']['raw']
gross_profit = income[0]['grossProfit']['raw']
last_profit = income[1]['grossProfit']['raw']
operating_income = income[0]['operatingIncome']['raw']
operating_expenses = income[0]['totalOperatingExpenses']['raw']
interest_expenses = income[0]['interestExpense']['fmt']
cost_of_revenue = income[0]['costOfRevenue']['raw']
net_income = income[0]['netIncome']['raw']
last_income = income[1]['netIncome']['raw']
ebit = income[0]['ebit']['raw']
research = special_income()


# Balance Sheet
def special_balance():
    try:
        intangible_assets = json_data['balanceSheetHistory']['balanceSheetStatements'][0]['intangibleAssets']['fmt']
    except KeyError:
        intangible_assets = 0
    try:
        capital_surplus = json_data['balanceSheetHistory']['balanceSheetStatements'][0]['capitalSurplus']['fmt']
    except KeyError:
        capital_surplus = 0

    return intangible_assets, capital_surplus

balance = json_data['balanceSheetHistory']['balanceSheetStatements']

total_liablities = balance[0]['totalLiab']['raw']
last_liabilities = balance[1]['totalLiab']['raw']
current_liabilities = balance[0]['totalCurrentLiabilities']['raw']
stockholders_equity = balance[0]['totalStockholderEquity']['raw']
last_stockholders = balance[1]['totalStockholderEquity']['raw']
total_assets = balance[0]['totalAssets']['raw']
last_assets = balance[1]['totalAssets']['raw']
current_assets = balance[0]['totalCurrentAssets']['raw']
long_term_debt = balance[0]['longTermDebt']['raw']
last_long_term = balance[1]['longTermDebt']['raw']
short_term_debt = balance[0]['shortLongTermDebt']['raw']
cash = balance[0]['cash']['raw']
inventory = balance[0]['inventory']['fmt']
net_ppe = balance[0]['propertyPlantEquipment']['fmt']
intangible_assets, capital_surplus = special_balance()


# Cash Flow Statement
def special_cash():
    try:
        repurchase_stock = json_data['cashflowStatementHistory']['cashflowStatements'][0]['repurchaseOfStock']['fmt']
    except KeyError:
        repurchase_stock = 0
    try:
        capital_expenditure = json_data['cashflowStatementHistory']['cashflowStatements'][0]['capitalExpenditures']['raw']
    except KeyError:
        capital_expenditure = 0
    return repurchase_stock, capital_expenditure


cashflow = json_data['cashflowStatementHistory']['cashflowStatements']

investing_cash = cashflow[0]['totalCashflowsFromInvestingActivities']['fmt']
financing_cash = cashflow[0]['totalCashFromFinancingActivities']['fmt']
operating_cash = cashflow[0]['totalCashFromOperatingActivities']['raw']
shares_issued = cashflow[0]['issuanceOfStock']['raw']
last_shares = cashflow[1]['issuanceOfStock']['raw']
depreciation = cashflow[0]['depreciation']['raw']
change_cash = cashflow[0]['changeInCash']['raw']
repurchase_stock, capital_expenditure = special_cash()

shares_increased = True if (shares_issued > last_shares) else False
more_cash = True if (cash > long_term_debt) else False
debt_decrease = True if (long_term_debt < last_long_term) else False
asset_increase = True if (total_assets > last_assets) else False
liabilities_increase = True if (total_liablities > last_liabilities) else False
income_increase = True if (net_income > last_income) else False
last_margin = (last_profit / last_rev * 100)
gross_increase = True if (gross_margin > last_margin) else False

net_cash = operating_cash - capital_expenditure
working_capital = current_assets - current_liabilities
return_on_capital_employed = ebit / (total_assets - current_liabilities)
rcoe_to_price = return_on_capital_employed * current_price
company_valuation = round((market_cap / total_rev), 2)
last_current = last_assets / last_liabilities
last_return_on_assets = last_income / last_assets
total_debt_to_total_assets = '{0:.2f}%'.format((current_liabilities + long_term_debt) / total_assets)

print("Analyzing data...")


def analyze():
    # Income analysis
    income_red_list = ["\n[+] Income statement red flags: \n"]
    income_green_list = ["\n[+] Income statement green flags: \n"]
    income_red = 0

    if income_increase: income_green_list.append("\n[->] Income increased year over year.\n")
    if gross_increase: income_green_list.append(['\n[->] The gross margin increased year over year.\n'])

    if net_income < last_income:
        income_red += 1
        income_red_list.append("\n[!] Smaller net income than last year!")
    if operating_income < 0:
        income_red += 1
        income_red_list.append(
            "\n[!] The company doesn't generate cash from operations! Negative operative income.")
    if operating_expenses > total_rev:
        income_red += 1
        income_red_list.append(
            "\n[!] Operating expenses are more expensive than the produced revenue!")
    if cost_of_revenue > gross_profit:
        income_red += 1
        income_red_list.append(
            "\n[!] Cost of revenue higher than gross profit! The product costs more than it produces.")

    # Balance analysis
    balance_list = ["[+] Balance sheet red flags: \n"]
    balance_red = 0
    if not asset_increase:
        balance_red += 1
        balance_list.append("\n[!] Assets are decreasing!")
    if not debt_decrease:
        balance_red += 1
        balance_list.append("\n[!] Long term debt is increasing!")
    if not more_cash:
        balance_red += 1
        balance_list.append("\n[!] The company has less cash than debt!")
    if liabilities_increase:
        balance_red += 1
        balance_list.append("\n[!] The liabilities are increasing!")
    if shares_increased:
        balance_red += 1
        balance_list.append("\n[!] Number of issued shares increased! Company may finance itself via public offerings.")
    if stockholders_equity < 0:
        balance_red += 1
        balance_list.append("\n[!] Stockholders equity is negative! Liabilities are growing faster than assets.")

    # Cash flow analysis
    cash_list = ["[+] Cash flow red flags: \n"]
    cash_red = 0
    if net_cash < 0:
        cash_red += 1
        cash_list.append("\n[!] Negative Net Cash Position.")
    if operating_cash < 0:
        cash_red += 1
        cash_list.append("\n[!] Negative operating cash flow.")
    if working_capital < 0:
        cash_red += 1
        cash_list.append(
            "\n[!] Working capital negative! The company took on more debt or sold something to generate more money")
    if change_cash < 0:
        cash_red += 1
        cash_list.append(
            "\n[!] Negative net change in cash! Find out why, did the company buy something big?")
    if operating_cash < 0:
        cash_red += 1
        cash_list.append(
            "\n[!] Negative operating cash flow! Company is operating at a loss.")

    # Intrinsic value
    intrinsic_value = 0
    total_red = income_red + balance_red + cash_red

    if price_to_book < 1.5: intrinsic_value += 1
    if book_value > 0: intrinsic_value += 1
    if age: intrinsic_value += 1
    if forecast: intrinsic_value += 1
    if moat: intrinsic_value += 1
    if (net_income / stockholders_equity * 100) > 0.1: intrinsic_value += 1
    if (total_liablities / stockholders_equity * 100) < 1: intrinsic_value += 1
    if net_cash > 0: intrinsic_value += 1
    if total_red < 1: intrinsic_value += 1

    # Piotroski-F score -> max 8
    piotroski = 0

    # Profitability criteria
    if int(return_on_assets) > 0: piotroski += 1
    if operating_cash > 0: piotroski += 1
    if return_on_assets > last_return_on_assets: piotroski += 1
    if operating_cash > return_on_assets: piotroski += 1

    # Leverage, Luquidity and Source of Funds Criteria
    if debt_decrease: piotroski += 1
    if current_ratio > last_current: piotroski += 1
    if not shares_increased: piotroski += 1
    if stockholders_equity > last_stockholders: piotroski += 1

    # Operating efficiency criteria
    if gross_increase: piotroski += 1

    return income_red, income_red_list, income_green_list, balance_list, balance_red, cash_list, cash_red, total_red, intrinsic_value, piotroski


income_red, income_red_list, income_green_list, balance_list, balance_red, cash_list, cash_red, total_red, intrinsic_value, piotroski = analyze()
print("Creating report...")


def create_report():
    def convert_numbers():
        json_data = get_json(url_financials)
        mc = json_data['summaryDetail']['marketCap']['fmt']
        tr = json_data['incomeStatementHistory']['incomeStatementHistory'][0]['totalRevenue']['fmt']
        cr = json_data['incomeStatementHistory']['incomeStatementHistory'][0]['costOfRevenue']['fmt']
        ni = json_data['incomeStatementHistory']['incomeStatementHistory'][0]['netIncome']['fmt']
        gp = json_data['incomeStatementHistory']['incomeStatementHistory'][0]['grossProfit']['fmt']
        oi = json_data['incomeStatementHistory']['incomeStatementHistory'][0]['operatingIncome']['fmt']
        oe = json_data['incomeStatementHistory']['incomeStatementHistory'][0]['totalOperatingExpenses']['fmt']
        ebi = json_data['incomeStatementHistory']['incomeStatementHistory'][0]['ebit']['fmt']
        ta = json_data['balanceSheetHistory']['balanceSheetStatements'][0]['totalAssets']['fmt']
        ca = json_data['balanceSheetHistory']['balanceSheetStatements'][0]['totalCurrentAssets']['fmt']
        dep = json_data['cashflowStatementHistory']['cashflowStatements'][0]['depreciation']['fmt']
        tl = json_data['balanceSheetHistory']['balanceSheetStatements'][0]['totalLiab']['fmt']
        cl = json_data['balanceSheetHistory']['balanceSheetStatements'][0]['totalCurrentLiabilities']['fmt']
        ltd = json_data['balanceSheetHistory']['balanceSheetStatements'][0]['longTermDebt']['fmt']
        oc = json_data['cashflowStatementHistory']['cashflowStatements'][0]['totalCashFromOperatingActivities']['fmt']
        se = json_data['balanceSheetHistory']['balanceSheetStatements'][0]['totalStockholderEquity']['fmt']
        ce = json_data['cashflowStatementHistory']['cashflowStatements'][0]['capitalExpenditures']['fmt']


        return mc, tr, cr, ni, gp, oi, oe, ebi, ta, ca, dep, tl, cl, ltd, oc, se, ce

    market_cap, total_rev, cost_of_revenue, net_income, gross_profit, \
    operating_income, operating_expenses, ebit, total_assets, current_assets, \
    depreciation, total_liablities, current_liabilities, long_term_debt, \
    operating_cash, stockholders_equity, capital_expenditure = convert_numbers()

    with open(f"{name}.txt", "a") as file:
        file.write(figlet_format(name) + "\n\n")
        file.write(f"Date of evaluation: {date}\nTime: {time}\n")
        file.write("\n\n________________________________________\n\t\t######################\n\t\t## General Overview ##\n\t\t######################\n________________________________________\n\n")

        def general_overview():
            file.write("# General information\n\n")
            file.write(
                f"{name} is situated in: {country} in {city}\n- Sector: {sector}\n- Industry: {industry}\n- Company website: {website}\n- Company partners: {partner}\n- Participating in the trend: {trend}\n\n")

            file.write("# Valuation\n")
            file.write(f"- Current price: %s\n- EPS: {eps}\t\t- PE/G: {peg_ratio}\n" % locale.currency(current_price,
                                                                                                       grouping=True))
            file.write(
                f"- Market capitalization: {market_cap}\n- [+] Valued at: %sx of the total revenue\n\n" % company_valuation)

            file.write("# Stockholders\n")
            file.write(
                f"- Insiders holding: {insiders_percentage}\n- Institutions holding: {institutions_percentage}\n- Float owned by institutions: {institutions_float_percentage}\n- Number of holding institutions: {institutions_count}\n- Shares held short: {short_ratio}\n\n")

            file.write("# Financial Data\n")
            file.write(f"- Profit margin: {profit_margin}\n")
            file.write(f"- Book value: %s\n- Price to book value: {price_to_book}\n" % locale.currency(book_value,
                                                                                                       grouping=True))
            file.write("- Gross margin: " + '{0:.2f}%'.format(gross_margin) + "\n")
            file.write(f"- Revenue growth: {revenue_growth}\n- Operating margins: {operating_margins}\n")
            file.write("- Return on assets: " + '{0:.2f}%'.format(return_on_assets) + "\n")
            file.write(f"- Return on equity: {return_on_equity}\n- Debt to equity ratio: {debt_to_equity}" + "%\n")
            file.write(f"- Total debt to total assets ratio: {total_debt_to_total_assets}\n- Total cash per share: {total_cash_per_share} {currency}\n")
            file.write(f"- Quick ratio: {quick_ratio}\n")
            file.write("- Return on capital employed: " + '{0:.2f}%'.format(return_on_capital_employed) + "\n")
            file.write("- Return on capital employed to price: %s\n" % locale.currency(rcoe_to_price, grouping=True))

        def income_statement():
            file.write(
                "\n\n________________________________________\n\t\t######################\n\t\t## Income Statement ##\n\t\t######################\n________________________________________\n\n")
            file.write(
                f"- Total revenue: {total_rev}\t\t- Cost of revenue: {cost_of_revenue}\n- Net income: {net_income}\t\t\t- Gross profit: {gross_profit}\n")
            file.write(f"- Operating income: {operating_income}\t\t- Operating expenses: {operating_expenses}\n")
            file.write(f"- EBIT: {ebit}\t\t\t\t\t- EBITDA: {ebitda}\n")
            file.write(f"- Money spent on research: {research}\n- Interest expenses: {interest_expenses}\n\n\n")

            file.write("# Income analysis")
            for item in income_green_list:
                file.write(item)
            for item in income_red_list:
                file.write(item)
            file.write(f"\n\n[+] Total income red flags: {income_red}\n\n\n")

        def balance_sheet():
            file.write(
                "_____________________________________\n\t\t#####################\n\t\t### Balance sheet ###\n\t\t#####################\n_____________________________________\n\n")
            file.write("# Assets that be liquidated within one year\n")
            file.write(
                f"- Total assets: {total_assets}\n- Current assets: {current_assets}\n- Inventory value: {inventory}\n\n")

            file.write("# Non-current assets -> require more time for liquidation\n")
            file.write(
                f"- Net PPE: {net_ppe}\n- Depreciation: {depreciation}\n- Intangible assets: {intangible_assets}\n\n")

            file.write("# Liabilities\n")
            file.write(
                f"- Total liabilities: {total_liablities}\n- Current liabilities/short term debt: {current_liabilities}\n- Long term debt: {long_term_debt}\n- Short long term debt: {short_term_debt}\n- Total debt: {total_debt}\n\n")

            file.write("# Additional information\n")
            file.write(f"- Stockholders equity: {stockholders_equity}\n- Current ratio: {current_ratio}\n\n")

            file.write("# Balance analysis\n")
            for item in balance_list:
                file.write(item)
            file.write(f"\n\n[+] Total balance red flags: {balance_red}\n\n\n")

        def cash_flow():
            file.write("_____________________________________\n\t\t###################\n\t\t#### Cash flow ####\n\t\t###################\n_____________________________________\n\n")
            file.write(f"- Operating cash flow: {operating_cash}\n- Investing cash flow: {investing_cash}\n- Financing cash flow: {financing_cash}\n")
            file.write(f"- Free cash: %s\n- Capital expenditure: {capital_expenditure}\n- Stock repurchased: {repurchase_stock}\n\n" % locale.currency(net_cash, grouping=True))

            file.write("# Cash analysis\n")
            for item in cash_list:
                file.write(item)
            file.write(f"\n\n[+] Total cash red flags: {cash_red}\n\n\n")

        def evaluation():
            file.write(
                "_____________________________________\n\t\t####################\n\t\t# Final Evaluation #\n\t\t####################\n_____________________________________\n\n")
            file.write("# Intrinsic value\n")
            file.write(f"- Total red flags: {total_red}\n- Intrinsic value score: {intrinsic_value}/8\n- Piotroski score: {piotroski}/8\n")

        def analysis():
            if intrinsic_value <= 3:
                file.write(
                    "\n\n[+] Fundamental Analysis: High risk!\n\t[=>] Be careful investing into this company and make sure to check the "
                    "financial statements and\n\t\tcompany story again properly. Further research recommended!")
            elif intrinsic_value == 4 or 5 or 6:
                file.write(
                    "\n\n[+] Fundamental Analysis: Medium risk.\n\t[=>] This company could be turning a profit but for safety reasons, "
                    "please check the financial statements,\n\t\tred flags and other facts again, to be sure that nothing is "
                    "inadvertently overlooked")
            elif intrinsic_value >= 7:
                file.write(
                    "\n\n[+] Fundamental Analysis: Low risk.\n\t[=>] It's unlikely that the company will go bankrupt in the foreseeable "
                    "future.")

        def glossary():
            file.write("\n\n\n_____________________________________\n\t\t###################\n\t\t#### Glossary ####\n\t\t###################\n_____________________________________\n")
            file.write("[+] EPS:\n- indicates how much money a company makes for each share of its stock, and is a widely used metric to estimate corporate value\n- A higher EPS indicates greater value because investors will pay more for a company's shares if they think the company has higher profits relative to its share price\n\n")
            file.write("[+] PE/G:\n- considered to be an indicator of a stock's true value, and similar to the P/E ratio, a lower PEG may indicate that a stock is undervalued.\n\n")
            file.write("[+] Market capitalization:\n- defined as the total market value of all outstanding shares.\n Companies are typically divided according to market capitalization: large-cap ($10 billion or more), mid-cap ($2 billion to $10 billion), and small-cap ($300 million to $2 billion.\n\n")
            file.write("[+] Holdings:\n- Who owns the company. The more insiders are holding shares of their own company, the more interested they are in a good performance.\n\n")
            file.write("[+] Profit margin:\n- indicates how many cents of profit has been generated for each dollar of sale.\n- As typical profit margins vary by industry sector, care should be taken when comparing the figures for different businesses.\n\n")
            file.write("[+] Book value:\n- the difference in value between that company's total assets and total liabilities on its balance sheet.\n- Traditionally, a P/B less than 1.0 is considered a good value, but it can be difficult to pinpoint a 'good' P/B ratio since it can vary by industry and any particular company may have underlying financial troubles.\n\n")
            file.write("[+] Price to book value:\n- Investors use the price-to-book value to gauge whether a company's stock price is valued properly.\n- A price-to-book ratio of one means that the stock price is trading in line with the book value of the company.\n- A P/B ratio with lower values, particularly those below one, are a signal to investors that a stock may be undervalued.\n\n")
            file.write("[+] Gross margins:\n- shows the amount of profit made before deducting selling, general, and administrative costs.\n\n")
            file.write("[+] Revenue growth:\n- measures the increase in a firm's sales from one year to another.\nFor an accurate picture of growth, investors should look at the growth of several quarters and how consistent it is.\n\n")
            file.write("[+] Operating margins:\n- the profit a company makes on a dollar of sales after paying for variable costs but before paying any interest or taxes.\n- Operating margin is a profitability ratio that shows how much profit a company makes from its core operations in relation to the total revenues it brings in.\n- An increasing operating margin over a period of time indicates a company whose profitability is improving.\n\n")
            file.write("[+] Return on assets:\n- an indicator of how well a company utilizes its assets, by determining how profitable a company is relative to its total assets.\n- best used when comparing similar companies or comparing a company to its previous performance.\n- takes a company's debt into account.\n\n")
            file.write("[+] Return on equity:\n- measures how the profitability of a corporation in relation to stockholders’ equity.\n- As a shortcut, investors can consider an ROE near the long-term average of the S&P 500 (14%) as an acceptable ratio and anything less than 10% as poor.\n\n")
            file.write("[+] Debt to equity ratio:\n- compares a company’s total liabilities to its shareholder equity and can be used to evaluate how much leverage a company is using.\n- Higher leverage ratios tend to indicate a company or stock with higher risk to shareholders.\n\n")
            file.write("[+] Total debt to total assets ratio:\n- shows the degree to which a company has used debt to finance its assets.\n- If a company has a total-debt-to-total-assets ratio of 0.4, 40% of its assets are financed by creditors, and 60% are financed by owners (shareholders) equity.\n\n")
            file.write("[+] Total cash per share:\n- tells us the percentage of a company’s share price available to spend on strengthening the business, paying down debt, returning money to shareholders, and other positive campaigns.\n- Paradoxically, too much cash per share can be a negative indicator of a company's health, because it may suggest an unwillingness by management to nurture forward-thinking measures.\n\n")
            file.write("[+] Quick ratio:\n- indicates a company's capacity to pay its current liabilities without needing to sell its inventory or get additional financing.\n- The higher the ratio result, the better a company's liquidity and financial health; the lower the ratio, the more likely the company will struggle with paying debts.\n\n")
            file.write("[+] Return on capital employed:\n- measures a company’s profitability in terms of all of its capital.\n- can be used when analyzing a company’s financials for profitability performance.\n- reflects a company's ability to earn a return on all of the capital it employs.\n\n")
            file.write("[+] Return on capital employed to price:\n- Amount of money the company is generating per one share at the current price.\n\n")
            file.write("[+] EBIT:\n- earnings before interest and taxes\n- a company's net income before income tax expense and interest expenses are deducted.\n- used to analyze the performance of a company's core operations without the costs of the capital structure and tax expenses impacting profit.\n- takes a company's cost of manufacturing including raw materials and total operating expenses, which include employee wages, into consideration.\n\n")
            file.write("[+] EBITDA:\n- a good measure of core profit trends because it eliminates some extraneous factors and allows a more 'apples-to-apples' comparisons.\n- can be used as a shortcut to estimate the cash flow available to pay the debt of long-term assets.\n\n")
            file.write("[+] Net PPE:\n- Property, plant, and equipment are also called fixed assets, meaning they are physical assets that a company cannot easily liquidate.\n-  long-term assets vital to business operations and the long-term financial health of a company.\n- Purchases of PP&E are a signal that management has faith in the long-term outlook and profitability of its company.\n\n")
            file.write("[+] Depreciation:\n- Wear and Tear on the assets.\n- represents how much of an asset's value has been used up.\n- Depreciating assets helps companies earn revenue from an asset while expensing a portion of its cost each year the asset is in use.\n\n")
            file.write("[+] Intangible assets:\n- an asset that is not physical in nature. Goodwill, brand recognition and intellectual property, such as patents, trademarks, and copyrights.\n- Intangible assets exist in opposition to tangible assets, which include land, vehicles, equipment, and inventory.\n\n")
            file.write("[+] Long term debt:\n- A loan that the company took to finance its operations.\n- debt that matures in more than one year and is often treated differently from short-term debt.\n- Entities choose to issue long-term debt with various considerations, primarily focusing on the timeframe for repayment and interest to be paid.\n\n")
            file.write("[+] Stockholder's Equity:\n- refers to the assets remaining in a business once all liabilities have been settled.\n- A negative stockholders' equity may indicate an impending bankruptcy.\n\n")
            file.write("[+] Current ratio:\n- compares all of a company’s current assets to its current liabilities. These are usually defined as assets that are cash or will be turned into cash in a year or less, and liabilities that will be paid in a year or less.\n- sometimes referred to as the “working capital” ratio and helps investors understand more about a company’s ability to cover its short-term debt with its current assets.\n- A ratio under 1 indicates that the company’s debts due in a year or less are greater than its assets \n\n")
            file.write("[+] Free Cash Flow:\n- the money a company has left over after paying its operating expenses and capital expenditures.\n- The more free cash flow a company has, the more it can allocate to dividends, paying down debt, and growth opportunities.\n- If a company has a decreasing free cash flow, that is not necessarily bad if the company is investing in its growth.\n\n")
            file.write("[+] Capital expenditure:\n- funds used by a company to acquire, upgrade, and maintain physical assets such as property, plants, buildings, technology, or equipment.\n- can include repairing a roof, purchasing a piece of equipment, or building a new factory.\n\n")

            file.write("[+] Intrinsic value:\n- Evaluates some key fundamental data to determine the company's health.\n")
            file.write("[+] Piotroski Score:\n- incorporates eight factors that speak to a firm's financial strength.\n- aspects are based on accounting results over a number of years; a point is awarded each time a standard is met, resulting in an overall score.\n- A favorite metric used to judge value stocks.\n- Used to determine the strength of a firms financial position\n\n")

        general_overview()
        income_statement()
        balance_sheet()
        cash_flow()
        evaluation()
        analysis()
        glossary()


create_report()

print("Done.\n")
print("The intrinsic value score is: " + str(intrinsic_value) + "/9\n")
print("The Piotroski F score is: " + str(piotroski) + "/8\n")
print("A report has been generated. Please check the same directory this program is located in\nThank you for using the Stock analysis tool.")

编辑:我尝试使用for循环解决KeyError:

代码语言:javascript
复制
item_list = ['forwardEPS', 'bookValue']

for item in item_list:
    try:
        item = defaultKeyStatistics[item]['raw']
    except KeyError:
        item = 0

但我想不出如何用相应的值(例如forwardEps = 10,bookValue = 5)返回变量,因为它总是返回最后一个项,以项作为变量名(例如item = 5)。

EN

回答 2

Code Review用户

发布于 2021-02-02 10:40:06

只是一些简短的笔记:

  • 你确定这是正确的:querystring = {f"symbol": {ticker}}吗?看起来你要么想要querystring = {"symbol": ticker},要么想要querystring = f"symbol={ticker}",而不是两者的结合。
  • 可以使用三元表达式对get_currency进行简化: def get_currency(货币):locale.setlocale(locale.LC_ALL,'en_US.UTF-8‘,如果货币==为“locale.LC_ALL”)
  • 您的check_*函数可以通过直接使用布尔结果来简化: def check_age_forecast_commodity():# Check age old =ask_yes_no(“公司的年龄在10年以上吗?”)# Check预测未来=ask_yes_no(“您在10年内还能看到公司吗?”)#检查商品依赖区分=ask_yes_no(“该公司与其他公司有区别吗/它有经济护城河吗?”)回归旧的、未来的、与众不同的
  • 类似地,这里不需要三元表达式,可以直接使用布尔结果: shares_increased = shares_issued > last_shares
  • Python有一个正式的风格指南,PEP8。它建议在启动新块时始终将代码放在新行上,因此不要使用以下代码: if price_to_book < 1.5: intrinsic_value += 1,但这个: if price_to_book < 1.5: intrinsic_value += 1
  • 与其有许多file.write调用,不如先构建一个行列表(或任何可迭代的,真正的),然后使用file.writelines(lines)。请注意,这些行仍然需要一个最终的\n,否则它们实际上不会变成多行。这还允许您将获取内容与实际编写文件分开,允许您将其打印到终端,通过电子邮件发送,或在将来做任何您可能想做的事情。
票数 3
EN

Code Review用户

发布于 2021-02-04 20:33:16

我设法处理了我问题的第二部分,关于试/除部分:

代码语言:javascript
复制
item_list = ['forwardEps', 'bookValue']

def get_data(value, url, query_data):
    """
    Query the items of query_data, avoiding KeyErrors
    -> returns a dictionary, e.g.: {'forwardEps': 5.42, 'bookValue': 23.37}
    """

    json_data = get_json(url)
    value = json_data['defaultKeyStatistics']

    results = {}

    for item in query_data:
        try:
            results[item] = value[item]['raw']
        except KeyError:
            results[item] = 0

    return results


results = get_data("defaultKeyStatistics", url_summary, item_list)

eps = results['forwardEps']
book_value = results['bookValue']
票数 0
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/255474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档