As mentioned previously, you may find that you want to tweak the standards that make a company of interest to you. This tutorial covers how you might go about doing that.
import pandas as pd
import os
import time
from datetime import datetime
from time import mktime
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import style
style.use("dark_background")
import re
path = "X:/Backups/intraQuarter"
def Key_Stats(gather=["Total Debt/Equity",
'Trailing P/E',
'Price/Sales',
'Price/Book',
'Profit Margin',
'Operating Margin',
'Return on Assets',
'Return on Equity',
'Revenue Per Share',
'Market Cap',
'Enterprise Value',
'Forward P/E',
'PEG Ratio',
'Enterprise Value/Revenue',
'Enterprise Value/EBITDA',
'Revenue',
'Gross Profit',
'EBITDA',
'Net Income Avl to Common ',
'Diluted EPS',
'Earnings Growth',
'Revenue Growth',
'Total Cash',
'Total Cash Per Share',
'Total Debt',
'Current Ratio',
'Book Value Per Share',
'Cash Flow',
'Beta',
'Held by Insiders',
'Held by Institutions',
'Shares Short (as of',
'Short Ratio',
'Short % of Float',
'Shares Short (prior ']):
statspath = path+'/_KeyStats'
stock_list = [x[0] for x in os.walk(statspath)]
df = pd.DataFrame(columns = ['Date',
'Unix',
'Ticker',
'Price',
'stock_p_change',
'SP500',
'sp500_p_change',
'Difference',
##############
'DE Ratio',
'Trailing P/E',
'Price/Sales',
'Price/Book',
'Profit Margin',
'Operating Margin',
'Return on Assets',
'Return on Equity',
'Revenue Per Share',
'Market Cap',
'Enterprise Value',
'Forward P/E',
'PEG Ratio',
'Enterprise Value/Revenue',
'Enterprise Value/EBITDA',
'Revenue',
'Gross Profit',
'EBITDA',
'Net Income Avl to Common ',
'Diluted EPS',
'Earnings Growth',
'Revenue Growth',
'Total Cash',
'Total Cash Per Share',
'Total Debt',
'Current Ratio',
'Book Value Per Share',
'Cash Flow',
'Beta',
'Held by Insiders',
'Held by Institutions',
'Shares Short (as of',
'Short Ratio',
'Short % of Float',
'Shares Short (prior ',
##############
'Status'])
sp500_df = pd.DataFrame.from_csv("YAHOO-INDEX_GSPC.csv")
stock_df = pd.DataFrame.from_csv("stock_prices.csv")
ticker_list = []
for each_dir in stock_list[1:]:
each_file = os.listdir(each_dir)
ticker = each_dir.split("\\")[1]
ticker_list.append(ticker)
## starting_stock_value = False
## starting_sp500_value = False
if len(each_file) > 0:
for file in each_file:
date_stamp = datetime.strptime(file, '%Y%m%d%H%M%S.html')
unix_time = time.mktime(date_stamp.timetuple())
full_file_path = each_dir+'/'+file
source = open(full_file_path,'r').read()
try:
value_list = []
for each_data in gather:
try:
regex = re.escape(each_data) + r'.*?(\d{1,8}\.\d{1,8}M?B?|N/A)%?'
value = re.search(regex, source)
value = (value.group(1))
if "B" in value:
value = float(value.replace("B",''))*1000000000
elif "M" in value:
value = float(value.replace("M",''))*1000000
value_list.append(value)
except Exception as e:
value = "N/A"
value_list.append(value)
try:
sp500_date = datetime.fromtimestamp(unix_time).strftime('%Y-%m-%d')
row = sp500_df[(sp500_df.index == sp500_date)]
sp500_value = float(row["Adjusted Close"])
except:
try:
sp500_date = datetime.fromtimestamp(unix_time-259200).strftime('%Y-%m-%d')
row = sp500_df[(sp500_df.index == sp500_date)]
sp500_value = float(row["Adjusted Close"])
except Exception as e:
print("fapsdolkfhasf;lsak",str(e))
one_year_later = int(unix_time + 31536000)
try:
sp500_1y = datetime.fromtimestamp(one_year_later).strftime('%Y-%m-%d')
row = sp500_df[(sp500_df.index == sp500_1y)]
sp500_1y_value = float(row["Adjusted Close"])
except:
try:
sp500_1y = datetime.fromtimestamp(one_year_later-259200).strftime('%Y-%m-%d')
row = sp500_df[(sp500_df.index == sp500_1y)]
sp500_1y_value = float(row["Adjusted Close"])
except Exception as e:
print("sp500 1 year later issue",str(e))
try:
stock_price_1y = datetime.fromtimestamp(one_year_later).strftime('%Y-%m-%d')
row = stock_df[(stock_df.index == stock_price_1y)][ticker.upper()]
stock_1y_value = round(float(row),2)
## print(stock_1y_value)
## time.sleep(1555)
except Exception as e:
try:
stock_price_1y = datetime.fromtimestamp(one_year_later-259200).strftime('%Y-%m-%d')
row = stock_df[(stock_df.index == stock_price_1y)][ticker.upper()]
stock_1y_value = round(float(row),2)
except Exception as e:
print("stock price:",str(e))
try:
stock_price = datetime.fromtimestamp(unix_time).strftime('%Y-%m-%d')
row = stock_df[(stock_df.index == stock_price)][ticker.upper()]
stock_price = round(float(row),2)
except Exception as e:
try:
stock_price = datetime.fromtimestamp(unix_time-259200).strftime('%Y-%m-%d')
row = stock_df[(stock_df.index == stock_price)][ticker.upper()]
stock_price = round(float(row),2)
except Exception as e:
print("stock price:",str(e))
stock_p_change = round((((stock_1y_value - stock_price) / stock_price) * 100),2)
sp500_p_change = round((((sp500_1y_value - sp500_value) / sp500_value) * 100),2)
difference = stock_p_change-sp500_p_change
if difference > 5:
status = 1
else:
status = 0
if value_list.count("N/A") > 15:
pass
else:
df = df.append({'Date':date_stamp,
'Unix':unix_time,
'Ticker':ticker,
'Price':stock_price,
'stock_p_change':stock_p_change,
'SP500':sp500_value,
'sp500_p_change':sp500_p_change,
'Difference':difference,
'DE Ratio':value_list[0],
#'Market Cap':value_list[1],
'Trailing P/E':value_list[1],
'Price/Sales':value_list[2],
'Price/Book':value_list[3],
'Profit Margin':value_list[4],
'Operating Margin':value_list[5],
'Return on Assets':value_list[6],
'Return on Equity':value_list[7],
'Revenue Per Share':value_list[8],
'Market Cap':value_list[9],
'Enterprise Value':value_list[10],
'Forward P/E':value_list[11],
'PEG Ratio':value_list[12],
'Enterprise Value/Revenue':value_list[13],
'Enterprise Value/EBITDA':value_list[14],
'Revenue':value_list[15],
'Gross Profit':value_list[16],
'EBITDA':value_list[17],
'Net Income Avl to Common ':value_list[18],
'Diluted EPS':value_list[19],
'Earnings Growth':value_list[20],
'Revenue Growth':value_list[21],
'Total Cash':value_list[22],
'Total Cash Per Share':value_list[23],
'Total Debt':value_list[24],
'Current Ratio':value_list[25],
'Book Value Per Share':value_list[26],
'Cash Flow':value_list[27],
'Beta':value_list[28],
'Held by Insiders':value_list[29],
'key_stats_acc_perf_NO_NA_enhanced.csv")Held by Institutions':value_list[30],
'Shares Short (as of':value_list[31],
'Short Ratio':value_list[32],
'Short % of Float':value_list[33],
'Shares Short (prior ':value_list[34],
'Status':status},
ignore_index=True)
except Exception as e:
pass
df.to_csv("key_stats_acc_perf_WITH_NA_enhanced.csv")
Key_Stats()