diff --git a/scripts/build_historical_memories.py b/scripts/build_historical_memories.py
index e91b6e49..d1eb40e0 100644
--- a/scripts/build_historical_memories.py
+++ b/scripts/build_historical_memories.py
@@ -27,11 +27,13 @@ logger = get_logger(__name__)
def main():
- logger.info("""
+ logger.info(
+ """
╔══════════════════════════════════════════════════════════════╗
║ TradingAgents - Historical Memory Builder ║
╚══════════════════════════════════════════════════════════════╝
- """)
+ """
+ )
# Configuration
tickers = [
diff --git a/scripts/build_strategy_specific_memories.py b/scripts/build_strategy_specific_memories.py
index 2849367c..d91dd050 100644
--- a/scripts/build_strategy_specific_memories.py
+++ b/scripts/build_strategy_specific_memories.py
@@ -89,7 +89,8 @@ def build_strategy_memories(strategy_name: str, config: dict):
strategy = STRATEGIES[strategy_name]
- logger.info(f"""
+ logger.info(
+ f"""
╔══════════════════════════════════════════════════════════════╗
║ Building Memories: {strategy_name.upper().replace('_', ' ')}
╚══════════════════════════════════════════════════════════════╝
@@ -98,7 +99,8 @@ Strategy: {strategy['description']}
Lookforward: {strategy['lookforward_days']} days
Sampling: Every {strategy['interval_days']} days
Tickers: {', '.join(strategy['tickers'])}
- """)
+ """
+ )
# Date range - last 2 years
end_date = datetime.now()
@@ -157,7 +159,8 @@ Tickers: {', '.join(strategy['tickers'])}
def main():
- logger.info("""
+ logger.info(
+ """
╔══════════════════════════════════════════════════════════════╗
║ TradingAgents - Strategy-Specific Memory Builder ║
╚══════════════════════════════════════════════════════════════╝
@@ -168,7 +171,8 @@ This script builds optimized memories for different trading styles:
2. Swing Trading - 7-day returns, weekly samples
3. Position Trading - 30-day returns, monthly samples
4. Long-term - 90-day returns, quarterly samples
- """)
+ """
+ )
logger.info("Available strategies:")
for i, (name, config) in enumerate(STRATEGIES.items(), 1):
@@ -216,11 +220,13 @@ This script builds optimized memories for different trading styles:
logger.info("\n" + "=" * 70)
logger.info("\n💡 TIP: To use a specific strategy's memories, update your config:")
- logger.info("""
+ logger.info(
+ """
config = DEFAULT_CONFIG.copy()
config["memory_dir"] = "data/memories/swing_trading" # or your strategy
config["load_historical_memories"] = True
- """)
+ """
+ )
if __name__ == "__main__":
diff --git a/scripts/update_positions.py b/scripts/update_positions.py
index 7bb99b60..d727d143 100755
--- a/scripts/update_positions.py
+++ b/scripts/update_positions.py
@@ -129,10 +129,12 @@ def main():
6. Save updated positions
7. Print progress messages
"""
- logger.info("""
+ logger.info(
+ """
╔══════════════════════════════════════════════════════════════╗
║ TradingAgents - Position Updater ║
-╚══════════════════════════════════════════════════════════════╝""".strip())
+╚══════════════════════════════════════════════════════════════╝""".strip()
+ )
# Initialize position tracker
tracker = PositionTracker(data_dir="data")
diff --git a/tradingagents/ui/pages/todays_picks.py b/tradingagents/ui/pages/todays_picks.py
index 2ce89772..8a5666fc 100644
--- a/tradingagents/ui/pages/todays_picks.py
+++ b/tradingagents/ui/pages/todays_picks.py
@@ -79,92 +79,103 @@ def _format_move_pct(window: pd.DataFrame) -> str:
return f"{move:+.2f}%"
-def _build_mini_chart(window: pd.DataFrame, timeframe: str) -> go.Figure:
- template = get_plotly_template()
+def _build_dynamic_chart(history: pd.DataFrame, timeframe: str) -> tuple[go.Figure, str, str]:
+ window = _slice_history_window(history, timeframe)
+ if window.empty:
+ return go.Figure(), "N/A", COLORS["text_muted"]
+
first_close = float(window["close"].iloc[0])
last_close = float(window["close"].iloc[-1])
line_color = COLORS["green"] if last_close >= first_close else COLORS["red"]
+ move_text = _format_move_pct(window)
+
+ template = dict(get_plotly_template())
fig = go.Figure()
+ fig.add_trace(
+ go.Scatter(
+ x=history["date"],
+ y=history["close"],
+ mode="lines",
+ line=dict(color="rgba(148,163,184,0.22)", width=1.1),
+ hovertemplate="%{x|%b %d, %Y}
$%{y:.2f}
%{{x|%b %d, %Y}}
$%{{y:.2f}}