bugfixing

This commit is contained in:
MuslemRahimi 2025-04-02 14:09:00 +02:00
parent f694ec6dc1
commit 0bb4ea6903
3 changed files with 22 additions and 30 deletions

View File

@ -54,22 +54,13 @@ async def save_json(symbol, period, data_type, data):
with open(f"json/financial-statements/{data_type}/{period}/{symbol}.json", 'w') as file: with open(f"json/financial-statements/{data_type}/{period}/{symbol}.json", 'w') as file:
ujson.dump(data, file) ujson.dump(data, file)
async def calculate_margins(symbol): async def add_ratio_elements(symbol):
for period in ['annual', 'quarter']: for period in ['annual', 'quarter']:
try: try:
# Load income statement data
income_path = f"json/financial-statements/income-statement/{period}/{symbol}.json"
with open(income_path, "r") as file:
income_data = ujson.load(file)
# Load cash flow statement data
cash_flow_path = f"json/financial-statements/cash-flow-statement/{period}/{symbol}.json"
with open(cash_flow_path, "r") as file:
cash_flow_data = ujson.load(file)
# Load key-metrics data # Load key-metrics data
cash_flow_path = f"json/financial-statements/key-metrics/{period}/{symbol}.json" key_metrics_path = f"json/financial-statements/key-metrics/{period}/{symbol}.json"
with open(cash_flow_path, "r") as file: with open(key_metrics_path, "r") as file:
key_metrics_data = ujson.load(file) key_metrics_data = ujson.load(file)
# Load ratios data # Load ratios data
@ -78,11 +69,8 @@ async def calculate_margins(symbol):
ratio_data = ujson.load(file) ratio_data = ujson.load(file)
if income_data and cash_flow_data and ratio_data and key_metrics_data: if income_data and cash_flow_data and ratio_data and key_metrics_data:
for ratio_item, income_item, cash_flow_item, key_metrics_item in zip(ratio_data, income_data, cash_flow_data, key_metrics_data): for ratio_item, key_metrics_item in zip(ratio_data,key_metrics_data):
try: try:
revenue = income_item.get('revenue', 0)
ebitda = income_item.get('ebitda', 0)
free_cash_flow = cash_flow_item.get('freeCashFlow', 0)
ratio_item['returnOnEquity'] = round(key_metrics_item.get('returnOnEquity',0),2) ratio_item['returnOnEquity'] = round(key_metrics_item.get('returnOnEquity',0),2)
ratio_item['returnOnAssets'] = round(key_metrics_item.get('returnOnAssets',0),2) ratio_item['returnOnAssets'] = round(key_metrics_item.get('returnOnAssets',0),2)
ratio_item['returnOnInvestedCapital'] = round(key_metrics_item.get('returnOnInvestedCapital',0),2) ratio_item['returnOnInvestedCapital'] = round(key_metrics_item.get('returnOnInvestedCapital',0),2)
@ -92,10 +80,6 @@ async def calculate_margins(symbol):
ratio_item['earningsYield'] = round(key_metrics_item.get('earningsYield',0),2) ratio_item['earningsYield'] = round(key_metrics_item.get('earningsYield',0),2)
ratio_item['freeCashFlowYield'] = round(key_metrics_item.get('freeCashFlowYield',0),2) ratio_item['freeCashFlowYield'] = round(key_metrics_item.get('freeCashFlowYield',0),2)
if revenue != 0:
ratio_item['freeCashFlowMargin'] = round((free_cash_flow / revenue) * 100, 2)
else:
ratio_item['freeCashFlowMargin'] = None
except: except:
pass pass
@ -141,7 +125,7 @@ async def get_financial_statements(session, symbol, semaphore, rate_limiter):
await save_json(symbol, 'quarter', 'owner-earnings', owner_earnings_data) await save_json(symbol, 'quarter', 'owner-earnings', owner_earnings_data)
await calculate_margins(symbol) await add_ratio_elements(symbol)
async def run(): async def run():
con = sqlite3.connect('stocks.db') con = sqlite3.connect('stocks.db')

View File

@ -23,7 +23,7 @@ async def get_data(symbol):
'priceToEarningsGrowthRatio','priceToEarningsRatio','forwardPE','priceToSalesRatio','forwardPS','priceToBookRatio','priceToFreeCashFlowRatio', 'priceToEarningsGrowthRatio','priceToEarningsRatio','forwardPE','priceToSalesRatio','forwardPS','priceToBookRatio','priceToFreeCashFlowRatio',
'sharesShort','shortOutStandingPercent','shortFloatPercent','shortRatio', 'sharesShort','shortOutStandingPercent','shortFloatPercent','shortRatio',
'enterpriseValue','evToSales','evToEBITDA','evToOperatingCashFlow','evToFreeCashFlow', 'enterpriseValue','evToSales','evToEBITDA','evToOperatingCashFlow','evToFreeCashFlow',
'currentRatio','quickRatio','debtRatio','debtToEquityRatio','interestCoverageRatio','cashFlowToDebtRatio','debtToMarketCap', 'currentRatio','quickRatio','debtToFreeCashFlowRatio','debtToEBITDARatio','debtToEquityRatio','interestCoverageRatio','cashFlowToDebtRatio','debtToMarketCap',
'returnOnEquity','returnOnAssets','returnOnInvestedCapital','revenuePerEmployee','profitPerEmployee', 'returnOnEquity','returnOnAssets','returnOnInvestedCapital','revenuePerEmployee','profitPerEmployee',
'employees','assetTurnover','inventoryTurnover','incomeTaxExpense','effectiveTaxRate','beta', 'employees','assetTurnover','inventoryTurnover','incomeTaxExpense','effectiveTaxRate','beta',
'change1Y','sma50','sma200','rsi','avgVolume','revenue','netIncome','grossProfit','operatingIncome','ebitda','ebit','eps', 'change1Y','sma50','sma200','rsi','avgVolume','revenue','netIncome','grossProfit','operatingIncome','ebitda','ebit','eps',

View File

@ -333,7 +333,7 @@ def process_financial_data(file_path, key_list):
if key in res: if key in res:
try: try:
value = float(res[key]) value = float(res[key])
if 'growth' in file_path or key in ['longTermDebtToCapitalization','totalDebtToCapitalization']: if 'growth' in file_path or key in ['effectiveTaxRate','grossProfitMargin','freeCashFlowMargin',"ebitMargin","ebitdaMargin","netProfitMargin","operatingProfitMargin","pretaxProfitMargin"]:
value = value*100 # Multiply by 100 for percentage value = value*100 # Multiply by 100 for percentage
data[key] = round(value, 2) if value is not None else None data[key] = round(value, 2) if value is not None else None
@ -686,9 +686,13 @@ def get_financial_statements(item, symbol):
item['freeCashFlowMargin'] = None item['freeCashFlowMargin'] = None
try: try:
item['ebitdaMargin'] = round((item['ebitda'] / item['revenue']) * 100,2) item['debtToFreeCashFlowRatio'] = round((item['totalDebt'] / item['freeCashFlow']),2)
except: except:
item['ebitdaMargin'] = None item['debtToFreeCashFlowRatio'] = None
try:
item['debtToEBITDARatio'] = round((item['totalDebt'] / item['ebitda']),2)
except:
item['debtToEBITDARatio'] = None
try: try:
item['revenuePerEmployee'] = round((item['revenue'] / item['employees']),2) item['revenuePerEmployee'] = round((item['revenue'] / item['employees']),2)
except: except:
@ -978,12 +982,13 @@ async def get_stock_screener(con):
try: try:
with open(f"json/financial-statements/key-metrics/annual/{symbol}.json", 'r') as file: with open(f"json/financial-statements/key-metrics/annual/{symbol}.json", 'r') as file:
res = orjson.loads(file.read())[0] res = orjson.loads(file.read())[0]
item['returnOnEquity'] = round(res['returnOnEquity'],2) item['returnOnEquity'] = round(res['returnOnEquity']*100,2)
item['returnOnInvestedCapital'] = round(res['returnOnInvestedCapital'],2) item['returnOnInvestedCapital'] = round(res['returnOnInvestedCapital']*100,2)
item['returnOnAssets'] = round(res['returnOnAssets'],2) item['returnOnCapitalEmployed'] = round(res['returnOnCapitalEmployed']*100,2)
item['returnOnAssets'] = round(res['returnOnAssets']*100,2)
item['earningsYield'] = round(res['earningsYield'],2) item['earningsYield'] = round(res['earningsYield']*100,2)
item['freeCashFlowYield'] = round(res['freeCashFlowYield'],2) item['freeCashFlowYield'] = round(res['freeCashFlowYield']*100,2)
item['enterpriseValue'] = res['enterpriseValue'] item['enterpriseValue'] = res['enterpriseValue']
item['evToSales'] = round(res['evToSales'],2) item['evToSales'] = round(res['evToSales'],2)
@ -1001,6 +1006,7 @@ async def get_stock_screener(con):
except: except:
item['returnOnEquity'] = None item['returnOnEquity'] = None
item['returnOnInvestedCapital'] = None item['returnOnInvestedCapital'] = None
item['returnOnCapitalEmployed'] = None
item['returnOnAssets'] = None item['returnOnAssets'] = None
item['earningsYield'] = None item['earningsYield'] = None
item['freeCashFlowYield'] = None item['freeCashFlowYield'] = None
@ -1131,10 +1137,12 @@ async def get_stock_screener(con):
item['forwardPS'] = None item['forwardPS'] = None
#item['peg'] = None #item['peg'] = None
'''
try: try:
item['halalStocks'] = get_halal_compliant(item) item['halalStocks'] = get_halal_compliant(item)
except: except:
item['halalStocks'] = None item['halalStocks'] = None
'''
try: try:
with open(f"json/financial-statements/income-statement/annual/{symbol}.json", "r") as file: with open(f"json/financial-statements/income-statement/annual/{symbol}.json", "r") as file: