From ddeb46d825375de97eadc828698ff0a6b400966e Mon Sep 17 00:00:00 2001 From: Chris Date: Sun, 21 Sep 2025 09:01:11 -0400 Subject: [PATCH] Added Stock Tickers to Email --- HedgeAnalyzer.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/HedgeAnalyzer.py b/HedgeAnalyzer.py index b7b729e..1e7f5f9 100755 --- a/HedgeAnalyzer.py +++ b/HedgeAnalyzer.py @@ -76,12 +76,20 @@ if 'shrsOrPrnAmt' in latest_df.columns: latest_df['shrsOrPrnAmt'] = latest_df['shrsOrPrnAmt'].apply(extract_shares) prev_df['shrsOrPrnAmt'] = prev_df['shrsOrPrnAmt'].apply(extract_shares) -# Verify required columns +# Verify required columns (ticker is optional but we'll add it if present) required_cols = ['cusip', 'nameOfIssuer', 'shrsOrPrnAmt', 'value'] for col in required_cols: if col not in latest_df.columns or col not in prev_df.columns: raise KeyError(f"Column {col} missing in holdings data") +# Add ticker column if present +if 'ticker' in latest_df.columns: + latest_df['ticker'] = latest_df['ticker'].fillna('N/A') + prev_df['ticker'] = prev_df['ticker'].fillna('N/A') +else: + latest_df['ticker'] = 'N/A' + prev_df['ticker'] = 'N/A' + # Format value with commas and dollar sign latest_df['value_formatted'] = latest_df['value'].apply(lambda x: f"${x:,.0f}") prev_df['value_formatted'] = prev_df['value'].apply(lambda x: f"${x:,.0f}") @@ -106,6 +114,11 @@ changes['share_change'] = changes['shrsOrPrnAmt_new'] - changes['shrsOrPrnAmt_ol changes = changes[changes['share_change'].notna()] changes = changes[abs(changes['share_change']) / changes['shrsOrPrnAmt_old'].replace(0, 1) > 0.1] changes['share_change'] = changes['share_change'].apply(lambda x: f"{x:,.0f}") +# Add ticker_new for changes +if 'ticker' in changes.columns: + changes['ticker_new'] = changes['ticker_new'].fillna('N/A') +else: + changes['ticker_new'] = 'N/A' # HTML table styling html_style = """ @@ -142,9 +155,9 @@ summary = f""" {html_style}

Point72 13F Changes {prev['periodOfReport']} to {latest['periodOfReport']}

-{df_to_html(additions, ['nameOfIssuer', 'shrsOrPrnAmt', 'value_formatted'], 'Additions')} -{df_to_html(removals, ['nameOfIssuer', 'shrsOrPrnAmt', 'value_formatted'], 'Removals')} -{df_to_html(changes, ['nameOfIssuer_new', 'share_change'], 'Changes')} +{df_to_html(additions, ['nameOfIssuer', 'ticker', 'shrsOrPrnAmt', 'value_formatted'], 'Additions')} +{df_to_html(removals, ['nameOfIssuer', 'ticker', 'shrsOrPrnAmt', 'value_formatted'], 'Removals')} +{df_to_html(changes, ['nameOfIssuer_new', 'ticker_new', 'share_change'], 'Changes')} """