diff --git a/tradingagents/agents/managers/portfolio_manager.py b/tradingagents/agents/managers/portfolio_manager.py index 00d5503cd..75508dca6 100644 --- a/tradingagents/agents/managers/portfolio_manager.py +++ b/tradingagents/agents/managers/portfolio_manager.py @@ -62,7 +62,7 @@ def create_portfolio_manager(llm): --- -Be decisive and ground every conclusion in specific evidence from the analysts. +Ground every conclusion in specific evidence from the analysts. Commit to a directional call only when the evidence clearly supports one; choose Hold when the case is balanced, materially conflicting, ambiguous, or insufficient to justify changing exposure, rather than forcing a direction to appear decisive. Weigh the analysts on their merits, independent of speaking order. {NO_EXTERNAL_TOOLS}{get_language_instruction()}""" diff --git a/tradingagents/agents/managers/research_manager.py b/tradingagents/agents/managers/research_manager.py index 1aec89572..85c2d8e90 100644 --- a/tradingagents/agents/managers/research_manager.py +++ b/tradingagents/agents/managers/research_manager.py @@ -36,7 +36,7 @@ def create_research_manager(llm): - **Underweight**: Cautious view; recommend trimming exposure - **Sell**: Strong conviction in the bear thesis; recommend exiting or avoiding the position -Commit to a clear stance whenever the debate's strongest arguments warrant one; reserve Hold for situations where the evidence on both sides is genuinely balanced. +Commit to a directional stance only when the debate's strongest arguments clearly warrant one. Choose Hold when the evidence is balanced, materially conflicting, ambiguous, or insufficient to justify changing exposure; do not manufacture a direction merely to appear decisive. Weigh the bull and bear cases on their merits, independent of which side spoke first or last. --- diff --git a/tradingagents/agents/schemas.py b/tradingagents/agents/schemas.py index 63ff221fd..961cde79a 100644 --- a/tradingagents/agents/schemas.py +++ b/tradingagents/agents/schemas.py @@ -82,9 +82,11 @@ class ResearchPlan(BaseModel): recommendation: PortfolioRating = Field( description=( "The investment recommendation. Exactly one of Buy / Overweight / " - "Hold / Underweight / Sell. Reserve Hold for situations where the " - "evidence on both sides is genuinely balanced; otherwise commit to " - "the side with the stronger arguments." + "Hold / Underweight / Sell. Choose Hold when the evidence is " + "balanced, materially conflicting, ambiguous, or insufficient to " + "justify changing exposure; otherwise commit to the side with the " + "clearly stronger arguments. Do not pick a direction merely to be " + "decisive." ), ) rationale: str = Field( @@ -197,7 +199,10 @@ class PortfolioDecision(BaseModel): rating: PortfolioRating = Field( description=( "The final position rating. Exactly one of Buy / Overweight / Hold / " - "Underweight / Sell, picked based on the analysts' debate." + "Underweight / Sell, picked based on the analysts' debate. Choose " + "Hold when the case is balanced, materially conflicting, ambiguous, " + "or insufficient to justify changing exposure, rather than forcing a " + "direction to appear decisive." ), ) executive_summary: str = Field(