add more rules to screener

This commit is contained in:
MuslemRahimi 2024-08-29 15:54:35 +02:00
parent 61f9588652
commit c9100bcce5
3 changed files with 33 additions and 17 deletions

View File

@ -61,7 +61,7 @@ async def run():
tasks.append(process_ticker(ticker)) tasks.append(process_ticker(ticker))
# Run tasks concurrently in batches to avoid too many open connections # Run tasks concurrently in batches to avoid too many open connections
batch_size = 1 # Adjust based on your system's capacity batch_size = 10 # Adjust based on your system's capacity
for i in tqdm(range(0, len(tasks), batch_size)): for i in tqdm(range(0, len(tasks), batch_size)):
batch = tasks[i:i + batch_size] batch = tasks[i:i + batch_size]
await asyncio.gather(*batch) await asyncio.gather(*batch)

View File

@ -573,7 +573,6 @@ schedule.every().day.at("14:00").do(run_threaded, run_cron_sector).tag('sector_j
schedule.every().day.at("15:45").do(run_threaded, run_restart_cache) schedule.every().day.at("15:45").do(run_threaded, run_restart_cache)
schedule.every(2).days.at("01:00").do(run_borrowed_share).tag('borrowed_share_job')
schedule.every(2).days.at("01:00").do(run_threaded, run_market_maker).tag('markt_maker_job') schedule.every(2).days.at("01:00").do(run_threaded, run_market_maker).tag('markt_maker_job')
schedule.every().saturday.at("05:00").do(run_threaded, run_ownership_stats).tag('ownership_stats_job') schedule.every().saturday.at("05:00").do(run_threaded, run_ownership_stats).tag('ownership_stats_job')
@ -599,6 +598,8 @@ schedule.every(15).minutes.do(run_threaded, run_market_moods).tag('market_moods_
schedule.every(2).hours.do(run_threaded, run_fda_calendar).tag('fda_calendar_job') schedule.every(2).hours.do(run_threaded, run_fda_calendar).tag('fda_calendar_job')
schedule.every(2).hours.do(run_threaded, run_json).tag('json_job') schedule.every(2).hours.do(run_threaded, run_json).tag('json_job')
#schedule.every(4).hours.do(run_threaded, run_share_statistics).tag('share_statistics_job') #schedule.every(4).hours.do(run_threaded, run_share_statistics).tag('share_statistics_job')
#schedule.every(2).days.at("01:00").do(run_borrowed_share).tag('borrowed_share_job')
schedule.every(6).hours.do(run_threaded, run_analyst_rating).tag('analyst_job') schedule.every(6).hours.do(run_threaded, run_analyst_rating).tag('analyst_job')
schedule.every(20).seconds.do(run_threaded, run_if_not_running(run_cron_options_flow, 'options_flow_job')).tag('options_flow_job') schedule.every(20).seconds.do(run_threaded, run_if_not_running(run_cron_options_flow, 'options_flow_job')).tag('options_flow_job')

View File

@ -2,6 +2,7 @@ import pytz
from datetime import datetime, timedelta from datetime import datetime, timedelta
import json import json
import ujson import ujson
import orjson
import asyncio import asyncio
import aiohttp import aiohttp
import aiofiles import aiofiles
@ -132,13 +133,13 @@ async def get_stock_screener(con,symbols):
try: try:
with open(f"json/var/{symbol}.json", 'r') as file: with open(f"json/var/{symbol}.json", 'r') as file:
item['var'] = ujson.load(file)['var'] item['var'] = orjson.loads(file.read())['var']
except: except:
item['var'] = None item['var'] = None
try: try:
with open(f"json/analyst/summary/{symbol}.json", 'r') as file: with open(f"json/analyst/summary/{symbol}.json", 'r') as file:
rating = ujson.load(file)['consensusRating'] rating = orjson.loads(file.read())['consensusRating']
if rating == 'Sell': if rating == 'Sell':
item['ratingRecommendation'] = 0 item['ratingRecommendation'] = 0
elif rating == 'Hold': elif rating == 'Hold':
@ -153,7 +154,7 @@ async def get_stock_screener(con,symbols):
try: try:
with open(f"json/trend-analysis/{symbol}.json", 'r') as file: with open(f"json/trend-analysis/{symbol}.json", 'r') as file:
res = ujson.load(file)[-1] res = orjson.loads(file.read())[-1]
if abs(res['accuracy'] - res['precision']) <=15 and res['sentiment'] == 'Bullish': if abs(res['accuracy'] - res['precision']) <=15 and res['sentiment'] == 'Bullish':
item['trendAnalysis'] = {"accuracy": res['accuracy']} item['trendAnalysis'] = {"accuracy": res['accuracy']}
else: else:
@ -163,7 +164,7 @@ async def get_stock_screener(con,symbols):
try: try:
with open(f"json/fundamental-predictor-analysis/{symbol}.json", 'r') as file: with open(f"json/fundamental-predictor-analysis/{symbol}.json", 'r') as file:
res = ujson.load(file) res = orjson.loads(file.read())
if abs(res['accuracy'] - res['precision']) <=15 and res['sentiment'] == 'Bullish': if abs(res['accuracy'] - res['precision']) <=15 and res['sentiment'] == 'Bullish':
item['fundamentalAnalysis'] = {"accuracy": res['accuracy']} item['fundamentalAnalysis'] = {"accuracy": res['accuracy']}
else: else:
@ -173,7 +174,7 @@ async def get_stock_screener(con,symbols):
try: try:
with open(f"json/forward-pe/{symbol}.json", 'r') as file: with open(f"json/forward-pe/{symbol}.json", 'r') as file:
res = ujson.load(file) res = orjson.loads(file.read())
if res['forwardPE'] != 0: if res['forwardPE'] != 0:
item['forwardPE'] = res['forwardPE'] item['forwardPE'] = res['forwardPE']
except: except:
@ -181,17 +182,36 @@ async def get_stock_screener(con,symbols):
try: try:
with open(f"json/dividends/companies/{symbol}.json", 'r') as file: with open(f"json/dividends/companies/{symbol}.json", 'r') as file:
res = ujson.load(file) res = orjson.loads(file.read())
item['annualDividend'] = res['annualDividend'] item['annualDividend'] = round(res['annualDividend'],2)
item['dividendYield'] = res['dividendYield'] item['dividendYield'] = round(res['dividendYield'],2)
item['payoutRatio'] = res['payoutRatio'] item['payoutRatio'] = round(res['payoutRatio'],2)
item['dividendGrowth'] = res['dividendGrowth'] item['dividendGrowth'] = round(res['dividendGrowth'],2)
except: except:
item['annualDividend'] = None item['annualDividend'] = None
item['dividendYield'] = None item['dividendYield'] = None
item['payoutRatio'] = None item['payoutRatio'] = None
item['dividendGrowth'] = None item['dividendGrowth'] = None
try:
with open(f"json/financial-statements/ratios/annual/{symbol}.json", 'r') as file:
res = orjson.loads(file.read())[0]
item['returnOnAssets'] = round(float(res['returnOnAssets']),2)
item['returnOnEquity'] = round(float(res['returnOnEquity']),2)
item['debtRatio'] = round(float(res['debtRatio']),2)
item['debtEquityRatio'] = round(float(res['debtEquityRatio']),2)
item['quickRatio'] = round(float(res['quickRatio']),2)
item['currentRatio'] = round(float(res['currentRatio']),2)
except:
item['returnOnAssets'] = None
item['returnOnEquity'] = None
item['debtRatio'] = None
item['debtEquityRatio'] = None
item['quickRatio'] = None
item['currentRatio'] = None
return stock_screener_data return stock_screener_data
@ -1229,11 +1249,6 @@ async def save_json_files():
with open(f"json/all-etf-providers/data.json", 'w') as file: with open(f"json/all-etf-providers/data.json", 'w') as file:
ujson.dump(data, file) ujson.dump(data, file)
'''
data = await ticker_mentioning(con)
with open(f"json/ticker-mentioning/data.json", 'w') as file:
ujson.dump(data, file)
'''
delisted_data = await get_delisted_list() delisted_data = await get_delisted_list()
with open(f"json/delisted-companies/data.json", 'w') as file: with open(f"json/delisted-companies/data.json", 'w') as file: