Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ airflow_home
.env
env
node_modules/*
Honey.txt
Honey.txt
.venv/
8 changes: 6 additions & 2 deletions chess_piece/king.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def hive_master_root_db(info='\pollen\pollen\db'):
main_root = hive_master_root() # os.getcwd()
load_dotenv(os.path.join(main_root, ".env"))

pg_migration = os.getenv('pg_migration')
pg_migration = os.getenv('pg_migration', 'False').lower() == 'true'


def get_ip_address():
Expand Down Expand Up @@ -430,6 +430,11 @@ def PickleData(pickle_file, data_to_store, write_temp=False, console=True):
if not pickle_file.endswith('.pkl'):
pickle_file = pickle_file + ".pkl"
if pickle_file:
# Ensure the directory exists
directory = os.path.dirname(pickle_file)
if directory and not os.path.exists(directory):
os.makedirs(directory, exist_ok=True)

if write_temp:
root, name = os.path.split(pickle_file)
pickle_file_temp = os.path.join(root, ("temp" + name))
Expand Down Expand Up @@ -745,4 +750,3 @@ def send_email(
return True

#### #### if __name__ == '__main__' ###

151 changes: 72 additions & 79 deletions chess_piece/queen_bee.py

Large diffs are not rendered by default.

334 changes: 287 additions & 47 deletions chess_piece/queen_hive.py

Large diffs are not rendered by default.

59 changes: 32 additions & 27 deletions chess_piece/workerbees.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import threading
import ipdb
import requests
from tqdm import tqdm

from concurrent.futures import ThreadPoolExecutor, as_completed
from datetime import datetime
import os
Expand Down Expand Up @@ -1024,8 +1024,8 @@ def initiate_ttframe_charts(master_tickers, star_times, MACD_settings, MACD_WAVE
s_mainbeetime = datetime.now(est)
# WORKERBEE if backetesting no need to recall chart data
df_all = {}

for ticker in master_tickers:
print("INITIATING CHARTS for ", ticker)
res = Return_Init_ChartData(ticker_list=[ticker], chart_times=star_times)
df_tickers_data = res["init_charts"]
df_all.update(df_tickers_data)
Expand All @@ -1052,7 +1052,7 @@ def initiate_ttframe_charts(master_tickers, star_times, MACD_settings, MACD_WAVE
return pollen
except Exception as e:
print_line_of_error(f"BEES IINIT FAILED {e} ")
return None
raise e

def chunk(it, size):
it = iter(it)
Expand Down Expand Up @@ -1126,10 +1126,10 @@ def init_QueenWorkersBees(QUEENBEE, queens_chess_pieces, MACD_WAVES, queens_mast
if not qcp:
print("QCP", qcp_worker)
continue
master_tickers_og = qcp.get('tickers')
master_tickers = [i for i in master_tickers_og if i in queens_master_tickers]
master_tickers = qcp.get('tickers')
master_tickers = [i for i in master_tickers if i in queens_master_tickers]
if not master_tickers:
print("not tics available in master", master_tickers_og)
print("not tics available in master")
return None
# master_tickers = ['SPY', 'BTC/USD', 'ETH/USD', 'LTC/USD']

Expand Down Expand Up @@ -1159,9 +1159,6 @@ def init_QueenWorkersBees(QUEENBEE, queens_chess_pieces, MACD_WAVES, queens_mast
speed_gauges=speed_gauges,
reset_only=reset_only,
)
if not pollen:
print("no pollen for ", qcp_worker)
continue
WORKERBEE_QUEEN[qcp_worker]["pollencharts"] = pollen["pollencharts"]
WORKERBEE_QUEEN[qcp_worker]["pollencharts_nectar"] = pollen["pollencharts_nectar"]
WORKERBEE_queens[qcp_worker] = WORKERBEE_QUEEN
Expand All @@ -1175,7 +1172,9 @@ def init_QueenWorkersBees(QUEENBEE, queens_chess_pieces, MACD_WAVES, queens_mast
def queens_court__WorkerBees(QUEENBEE, prod, qcp_s, run_all_pawns=False, streamit=False, reset_only=reset_only):

if type(qcp_s) == str:
qcp_s = [qcp_s]
# qcp_s = [qcp_s]
# Handle comma-separated strings like "castle,bishop,knight"
qcp_s = [piece.strip() for piece in qcp_s.split(',')]
queens_chess_pieces = qcp_s # pq.get("queens_chess_pieces")

def confirm_tickers_available(alpaca_symbols_dict, symbols):
Expand Down Expand Up @@ -1250,7 +1249,7 @@ def handle_qcp_pawns(QUEENBEE, tickers, queens_chess_pieces=queens_chess_pieces,
print("> 20 catch call pawns")
for i in range(0, len(tickers), CHUNK_SIZE):
chunk = tickers[i:i + CHUNK_SIZE]
pawn = f'pawn_{len(QUEENBEE["workerbees"]) +1}'
pawn = f'{str(chunk)}'
pawn_qcp = init_qcp_workerbees(
init_macd_vars={"fast": 12, "slow": 26, "smooth": 9},
ticker_list=chunk,
Expand All @@ -1273,12 +1272,12 @@ def handle_qcp_pawns(QUEENBEE, tickers, queens_chess_pieces=queens_chess_pieces,
list_of_lists = [i.get('tickers') for qcp, i in QUEENBEE['workerbees'].items()]
all_symbols = [item for sublist in list_of_lists for item in sublist]
# ipdb.set_trace()
storygauge = init_queenbee(client_user='stefanstapinski@gmail.com', prod=True, revrec=True, pg_migration=True)['revrec'].get('storygauge')
# df_tickers = init_queenbee(client_user='stefanstapinski@gmail.com', prod=True, revrec=True, pg_migration=True)['revrec'].get('df_ticker')
tickers_to_add = []
for ticker in storygauge.index:
if ticker not in all_symbols and storygauge.loc[ticker, 'ticker_buying_power'] > 0:
# print(ticker, "NOT IN QUEENBEE adding to Castle")
tickers_to_add.append(ticker)
# for ticker in df_tickers.index:
# if ticker not in all_symbols and df_tickers.loc[ticker, 'ticker_buying_power'] > 0:
# # print(ticker, "NOT IN QUEENBEE adding to Castle")
# tickers_to_add.append(ticker)

new_symbols = [i for i in tickers_to_add if i not in all_symbols] # and i not in all_values
for i in new_symbols:
Expand Down Expand Up @@ -1310,17 +1309,23 @@ def handle_qcp_pawns(QUEENBEE, tickers, queens_chess_pieces=queens_chess_pieces,

if len(queens_master_tickers) > 89:
print("chunking queens")
QUEENBEE['workerbees'] = {}
QUEENBEE, queens_chess_pieces, queens_master_tickers = handle_qcp_pawns(QUEENBEE, queens_master_tickers, queens_chess_pieces=[], queens_master_tickers=[])


queen_workers = init_QueenWorkersBees(
QUEENBEE=QUEENBEE,
queens_chess_pieces=queens_chess_pieces,
MACD_WAVES=MACD_WAVES,
queens_master_tickers=queens_master_tickers,
reset_only=reset_only,
)
from tqdm import tqdm
for ticker in tqdm(queens_master_tickers):
queen_workers = init_QueenWorkersBees(
QUEENBEE=QUEENBEE,
queens_chess_pieces=queens_chess_pieces,
MACD_WAVES=MACD_WAVES,
queens_master_tickers=[ticker],
reset_only=reset_only,
)
else:
queen_workers = init_QueenWorkersBees(
QUEENBEE=QUEENBEE,
queens_chess_pieces=queens_chess_pieces,
MACD_WAVES=MACD_WAVES,
queens_master_tickers=queens_master_tickers,
reset_only=reset_only,
)
if reset_only:
msg=("EXITING RESET ONLY")
print(msg)
Expand Down
25 changes: 20 additions & 5 deletions master_ozz/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,25 @@
import requests
from PIL import Image

from elevenlabs import set_api_key
from elevenlabs import Voice, VoiceSettings, generate
from elevenlabs import save
# from elevenlabs import set_api_key
# from elevenlabs import Voice, VoiceSettings, generate
# from elevenlabs import save

# Elevenlabs functions - commented out due to pydantic compatibility issues
def set_api_key(key):
pass

def Voice(voice_id, settings=None):
return None

def VoiceSettings(stability=0.5, similarity_boost=0.5, style=0.0, use_speaker_boost=True):
return None

def generate(text, voice=None, model=None, stream=False):
return b"" # Return empty bytes

def save(audio, filename):
pass

from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores.faiss import FAISS
Expand Down Expand Up @@ -48,7 +64,7 @@
from chess_piece.pollen_db import PollenDatabase
from chess_piece.king import hive_master_root, hive_master_root_db

pg_migration = os.getenv('pg_migration')
pg_migration = os.getenv('pg_migration', 'False').lower() == 'true'

# from youtubesearchpython import *
#### AUTH UTILS #####
Expand Down Expand Up @@ -1220,4 +1236,3 @@ def init_stories():
return stories



51 changes: 39 additions & 12 deletions pages/chessboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@

from pq_auth import signin_main
from chess_piece.king import return_QUEEN_KING_symbols, master_swarm_QUEENBEE, local__filepaths_misc, print_line_of_error, ReadPickleData, PickleData, return_QUEENs__symbols_data, kingdom__global_vars
from chess_piece.queen_hive import star_names, kingdom__grace_to_find_a_Queen, pollen_themes, init_qcp_workerbees, generate_chessboards_trading_models, return_queen_controls, shape_chess_board, generate_chess_board, refresh_account_info, init_queenbee, unshape_chess_board, setup_chess_board, add_trading_model, set_chess_pieces_symbols, read_swarm_db, refresh_broker_account_portolfio
from chess_piece.queen_hive import star_names, kingdom__grace_to_find_a_Queen, pollen_themes, init_qcp_workerbees, generate_chessboards_trading_models, return_queen_controls, shape_chess_board, generate_chess_board, refresh_account_info, init_queenbee, unshape_chess_board, setup_chess_board, add_trading_model, set_chess_pieces_symbols, read_swarm_db, refresh_broker_account_portolfio,init_swarm_dbs

from chess_piece.queen_mind import refresh_chess_board__revrec, init_qcp
from custom_button import cust_Button
from custom_grid import st_custom_grid, GridOptionsBuilder
Expand Down Expand Up @@ -551,12 +552,22 @@ def chessboard(revrec, QUEEN_KING, ticker_allowed, themes, admin=False, qcp_bees
st.write("# Setup Your Portfolio, Try Selecting a Hedge Fund and Edit from there ! :star2:")
st.write(":warning: Symbols in the same Group will share a Budget - You can edit Exact Amounts Later :gear:")

hedge_funds = PollenDatabase.retrieve_data('db_sandbox', 'whalewisdom').get('latest_filer_holdings')
# print(len(hedge_funds))
# for fund in hedge_funds:
# print(len(fund))

hedge_fund_names = list(set(hedge_funds['filer_name'].tolist()))
# Handle missing whalewisdom data with fallback
try:
whalewisdom_data = PollenDatabase.retrieve_data('db_sandbox', 'whalewisdom')
if whalewisdom_data and 'latest_filer_holdings' in whalewisdom_data:
hedge_funds = whalewisdom_data.get('latest_filer_holdings')
if hedge_funds is not None and not hedge_funds.empty and 'filer_name' in hedge_funds.columns:
hedge_fund_names = list(set(hedge_funds['filer_name'].tolist()))
else:
print("Warning: whalewisdom data is empty or missing filer_name column")
hedge_fund_names = []
else:
print("Warning: whalewisdom data not found or invalid")
hedge_fund_names = []
except Exception as e:
print(f"Error loading whalewisdom data: {e}")
hedge_fund_names = []
all_portfolios = ['Queen']
save_as_main_chessboard = st.sidebar.checkbox("Save as Main Chessboard", True)

Expand All @@ -576,18 +587,28 @@ def chessboard(revrec, QUEEN_KING, ticker_allowed, themes, admin=False, qcp_bees
optoins.append({'id': op, 'icon': "fas fa-chess-pawn", 'label':op})

# chessboard_selection = hc.option_bar(option_definition=optoins, title='Queen is Your Portfolio', key='chessboard_selections', horizontal_orientation=True) #,override_theme=over_theme,font_styling=font_fmt,horizontal_orientation=True)
chessboard_selection = st.selectbox("Select Portfolio", [None] + hedge_fund_names)
# Create portfolio options with fallback
portfolio_options = ['Queen']
if hedge_fund_names:
portfolio_options.extend(hedge_fund_names)

chessboard_selection = st.selectbox("Select Portfolio", [None] + portfolio_options)
if not chessboard_selection:
chessboard_selection = 'Queen'
if chessboard_selection == 'Queen':
pass
if chessboard_selection in hedge_fund_names:
if chessboard_selection in hedge_fund_names and 'hedge_funds' in locals() and hedge_funds is not None:
if save_as_main_chessboard == False:
qcp_bees_key = chessboard_selection
if qcp_bees_key not in QUEEN_KING.keys():
QUEEN_KING[qcp_bees_key] = {}
# data = hedge_funds.get(chessboard_selection)
data = hedge_funds[hedge_funds['filer_name'] == chessboard_selection]
try:
data = hedge_funds[hedge_funds['filer_name'] == chessboard_selection]
except Exception as e:
print(f"Error filtering hedge fund data: {e}")
st.error("Error loading hedge fund data")
return
data = data.set_index('stock_ticker', drop=False)
data = data.replace('DROPME', .001)
data['current_percent_of_portfolio'] = pd.to_numeric(data['current_percent_of_portfolio'], errors='coerce')
Expand Down Expand Up @@ -766,6 +787,7 @@ def chessboard(revrec, QUEEN_KING, ticker_allowed, themes, admin=False, qcp_bees
# update board

if __name__ == '__main__':
init_swarm_dbs(prod=False)

signin_main()

Expand Down Expand Up @@ -797,7 +819,12 @@ def chessboard(revrec, QUEEN_KING, ticker_allowed, themes, admin=False, qcp_bees
# st.write(QUEEN_KING['chess_board'])


ticker_allowed = KING['alpaca_symbols_df'].index.tolist()
# Handle missing alpaca_symbols_df with fallback
if 'alpaca_symbols_df' in KING and not KING['alpaca_symbols_df'].empty:
ticker_allowed = KING['alpaca_symbols_df'].index.tolist()
else:
print("Warning: alpaca_symbols_df not found or empty, using fallback symbols")
ticker_allowed = ['SPY', 'QQQ', 'AAPL', 'MSFT', 'GOOGL', 'AMZN', 'TSLA', 'NVDA', 'META', 'NFLX', 'BTC/USD', 'ETH/USD']

alpaca_acct_info = refresh_account_info(api=api)
with st.sidebar:
Expand Down Expand Up @@ -829,4 +856,4 @@ def chessboard(revrec, QUEEN_KING, ticker_allowed, themes, admin=False, qcp_bees
# if admin:
if st.button("Reset RevRec"):

first_revrec_setup(QUEEN_KING)
first_revrec_setup(QUEEN_KING)
Loading