Dmitry Beresnev commited on
Commit
014e90f
Β·
1 Parent(s): 36e6d76

fix detailed report for the insider trades

Browse files
src/api/insiders/insider_trading_aggregator.py CHANGED
@@ -720,6 +720,7 @@ class InsiderTradingAggregator:
720
  trades=trades
721
  )
722
 
 
723
  def format_telegram_message(self, report: TradingReport) -> str:
724
  """Generate formatted Telegram message from trading report"""
725
  if not report:
@@ -778,6 +779,57 @@ class InsiderTradingAggregator:
778
  message += f"\nπŸ”— **Sources:** {', '.join(sources)}\n"
779
  message += f"⏰ Generated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
780
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
781
  return message
782
 
783
  # BUG FIX: This method was combined with the one below it, causing a SyntaxError.
 
720
  trades=trades
721
  )
722
 
723
+ '''
724
  def format_telegram_message(self, report: TradingReport) -> str:
725
  """Generate formatted Telegram message from trading report"""
726
  if not report:
 
779
  message += f"\nπŸ”— **Sources:** {', '.join(sources)}\n"
780
  message += f"⏰ Generated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
781
 
782
+ return message
783
+ '''
784
+
785
+ def format_telegram_message(self, report: TradingReport) -> str:
786
+ """Generate formatted Telegram message from trading report"""
787
+ if not report:
788
+ return "❌ No insider trading data found for the specified period."
789
+
790
+ trend_emoji = "πŸ“ˆ" if report.net_value > 0 else "πŸ“‰" if report.net_value < 0 else "➑️"
791
+
792
+ message = f"πŸ” *INSIDER TRADING REPORT* πŸ”\n\n"
793
+ message += f"🏒 *Company:* {report.company_name} (${report.symbol})\n"
794
+ message += f"πŸ“… *Period:* {report.period_start.strftime('%Y-%m-%d')} to {report.period_end.strftime('%Y-%m-%d')}\n\n"
795
+
796
+ message += "πŸ“Š *SUMMARY*\n"
797
+ message += f"β€’ Total Trades: {report.total_trades}\n"
798
+ message += f"β€’ Buy Trades: {report.buy_trades} 🟒\n"
799
+ message += f"β€’ Sell Trades: {report.sell_trades} πŸ”΄\n\n"
800
+
801
+ message += "πŸ’° *FINANCIAL IMPACT*\n"
802
+ message += f"β€’ Total Bought: ${report.total_value_bought:,.2f}\n"
803
+ message += f"β€’ Total Sold: ${report.total_value_sold:,.2f}\n"
804
+ message += f"β€’ Net Position: {trend_emoji} ${report.net_value:,.2f}\n\n"
805
+
806
+ message += "πŸ‘₯ *TOP INSIDERS BY ACTIVITY*\n"
807
+ for i, (name, count, value) in enumerate(report.top_insiders, 1):
808
+ display_name = (name[:35] + '...') if len(name) > 38 else name
809
+ message += f"`{i}.` {display_name}\n"
810
+ message += f" β”” Trades: {count} | Value: ${value:,.0f}\n"
811
+
812
+ if report.trades:
813
+ message += "\nπŸ“‹ *RECENT SIGNIFICANT TRADES*\n"
814
+ top_trades = sorted(report.trades, key=lambda x: abs(x.value), reverse=True)[:5]
815
+
816
+ for trade in top_trades:
817
+ insider_name = (trade.insider_name[:30] + '...') if len(trade.insider_name) > 33 else trade.insider_name
818
+ trans_type = "BUY" if "buy" in trade.transaction_type.lower() or "a" == trade.transaction_type.lower() else "SELL"
819
+ emoji = '🟒' if trans_type == 'BUY' else 'πŸ”΄'
820
+
821
+ date_str = trade.transaction_date_dt.strftime(
822
+ '%Y-%m-%d') if trade.transaction_date_dt else trade.transaction_date[:10]
823
+
824
+ message += f"\n{emoji} *{trans_type}* | {insider_name}\n"
825
+ message += f"`Date: {date_str}`\n"
826
+ message += f"`Shares: {trade.shares:,d}`\n"
827
+ message += f"`Value: ${abs(trade.value):,.0f}`\n"
828
+
829
+ sources = sorted(list(set(t.source for t in report.trades)))
830
+ message += f"\nπŸ”— *Sources:* {', '.join(sources)}\n"
831
+ message += f"⏰ Generated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
832
+
833
  return message
834
 
835
  # BUG FIX: This method was combined with the one below it, causing a SyntaxError.