From e2514886142de8b33b1cd6a305e0af13335cc3ce Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Sat, 28 Dec 2024 01:37:46 +0100 Subject: [PATCH] update sector flow --- app/create_stock_db.py | 18 --------- app/cron_sector_flow.py | 82 ++++++++++++++++++++++++++++++++++++++--- app/main.py | 2 +- app/test.py | 42 ++++++++------------- 4 files changed, 93 insertions(+), 51 deletions(-) diff --git a/app/create_stock_db.py b/app/create_stock_db.py index bf5bd08..981b8d6 100755 --- a/app/create_stock_db.py +++ b/app/create_stock_db.py @@ -351,26 +351,8 @@ async def fetch_tickers(): db = StockDatabase('backup_db/stocks.db') loop = asyncio.get_event_loop() all_tickers = loop.run_until_complete(fetch_tickers()) - all_tickers = [item for item in all_tickers if '-' not in item['symbol'] or item['symbol'] in ['BRK-A', 'BRK-B']] -#all_tickers = [item for item in all_tickers if item['symbol'] == 'ZJK'] -''' -existing_names = set() -filtered_data = [] -for item in all_tickers: - if '.' not in item['symbol'] and item['name'] not in existing_names: - filtered_data.append(item) - existing_names.add(item['name']) - -print(len(filtered_data)) - -for item in filtered_data: - if 'RHM.DE' in item['symbol']: - print(item) - -time.sleep(1000) -''' loop.run_until_complete(db.save_stocks(all_tickers)) db.close_connection() \ No newline at end of file diff --git a/app/cron_sector_flow.py b/app/cron_sector_flow.py index de0a77f..426f415 100644 --- a/app/cron_sector_flow.py +++ b/app/cron_sector_flow.py @@ -109,12 +109,15 @@ def get_sector_data(): new_item['changesPercentage'] = round(quote_data.get('changesPercentage', 0), 2) #get prem tick data: + ''' if symbol != 'SPY': prem_tick_history = get_net_prem_ticks(symbol) #if symbol == 'XLB': # print(prem_tick_history[10]) new_item['premTickHistory'] = prem_tick_history + ''' + processed_data.append(new_item) return processed_data @@ -197,13 +200,82 @@ def get_net_prem_ticks(symbol): return populated_data if matched else [] + +def get_top_sector_tickers(): + keep_elements = ['price', 'ticker', 'name', 'changesPercentage','netPremium','netCallPremium','netPutPremium','gexRatio','gexNetChange','ivRank'] + sector_list = [ + "Basic Materials", + "Communication Services", + "Consumer Cyclical", + "Consumer Defensive", + "Energy", + "Financial Services", + "Healthcare", + "Industrials", + "Real Estate", + "Technology", + "Utilities", + ] + headers = { + "Accept": "application/json, text/plain", + "Authorization": api_key + } + url = "https://api.unusualwhales.com/api/screener/stocks" + + res_list = {} + + for sector in sector_list: + querystring = { + 'order': 'net_premium', + 'order_direction': 'desc', + 'sectors[]': sector + } + + response = requests.get(url, headers=headers, params=querystring) + data = response.json().get('data', []) + + updated_data = [] + for item in data[:10]: + try: + new_item = {key: safe_round(value) for key, value in item.items()} + with open(f"json/quote/{item['ticker']}.json") as file: + quote_data = orjson.loads(file.read()) + new_item['name'] = quote_data['name'] + new_item['price'] = round(float(quote_data['price']), 2) + new_item['changesPercentage'] = round(float(quote_data['changesPercentage']), 2) + + new_item['ivRank'] = int(new_item['iv_rank']) + new_item['gexRatio'] = new_item['gex_ratio'] + new_item['gexNetChange'] = new_item['gex_net_change'] + new_item['netCallPremium'] = new_item['net_call_premium'] + new_item['netPutPremium'] = new_item['net_put_premium'] + + new_item['netPremium'] = abs(new_item['netCallPremium'] - new_item['netPutPremium']) + # Filter new_item to keep only specified elements + filtered_item = {key: new_item[key] for key in keep_elements if key in new_item} + updated_data.append(filtered_item) + except Exception as e: + print(f"Error processing ticker {item.get('ticker', 'unknown')}: {e}") + + # Add rank to each item + for rank, item in enumerate(updated_data, 1): + item['rank'] = rank + res_list[sector] = updated_data + + return res_list + + + def main(): - ''' + sector_data = get_sector_data() - if len(sector_data) > 0: - save_json(sector_data) - ''' - get_net_prem_ticks('XLB') + top_sector_tickers = get_top_sector_tickers() + data = {'sectorData': sector_data, 'topSectorTickers': top_sector_tickers} + if len(data) > 0: + save_json(data) + + + #get_net_prem_ticks('XLB') if __name__ == '__main__': diff --git a/app/main.py b/app/main.py index 6e16b26..10bb138 100755 --- a/app/main.py +++ b/app/main.py @@ -170,12 +170,12 @@ stock_screener_data_dict = {item['symbol']: item for item in stock_screener_data #------Init Searchbar Data------------# searchbar_data = stock_list_data + etf_list_data + for item in searchbar_data: try: # Look up the symbol in the stock_screener_data_dict symbol = item['symbol'] item['isin'] = stock_screener_data_dict[symbol]['isin'] - except Exception as e: item['isin'] = None diff --git a/app/test.py b/app/test.py index 52e3d7c..630e6a5 100644 --- a/app/test.py +++ b/app/test.py @@ -5,36 +5,24 @@ import os load_dotenv() api_key = os.getenv('UNUSUAL_WHALES_API_KEY') -url = 'https://api.unusualwhales.com/api/stock/XLB/net-prem-ticks' -headers = { - 'Accept': 'application/json', - 'Authorization': api_key +url = "https://api.unusualwhales.com/api/screener/stocks" + +querystring = { + 'order': 'net_premium', + 'order_direction': 'desc', + 'sectors[]': 'Technology' } -response = requests.get(url, headers=headers) +headers = { + "Accept": "application/json, text/plain", + "Authorization": api_key +} + +response = requests.get(url, headers=headers, params=querystring) + data = response.json()['data'] -fields_to_sum = [ - "net_call_premium", - "net_call_volume", - "net_put_premium", - "net_put_volume" -] -result = [] -for idx, e in enumerate(data): - e['net_call_premium'] = float(e['net_call_premium']) - e['net_put_premium'] = float(e['net_put_premium']) +print(data[0]) +print(len(data)) - #e['net_call_volume'] = float(e['net_call_volume']) - #e['net_put_volume'] = float(e['net_put_volume']) - - - if idx != 0: - for field in fields_to_sum: - e[field] += result[idx-1].get(field, 0) - - result.append(e) - -#print(result) -print(result[-1]['net_put_volume']*result[-1]['net_put_premium']*10**(-6)) \ No newline at end of file