Entry / Exit
Analyst team
Research debate
Risk debate
Decision
Tool node

Click any node to learn more

propagate(ticker, date) create_initial_state() messages, reports, debate states ① Analyst team (runs in sequence) Market Analyst get_stock_data · get_indicators tools_market tool call? done → Msg Clear Social Media Analyst get_news (Reddit/Twitter sentiment) tools_social tool call? done → Msg Clear News Analyst get_news · get_global_news · get_insider_transactions tools_news tool call? done → Msg Clear Fundamentals Analyst get_fundamentals · balance sheet · cashflow tools_fundamentals tool call? done → Msg Clear ② Research debate (Bull vs Bear, max_debate_rounds × 2 turns) Bull Researcher reads all 4 reports + memory Bear Researcher reads all 4 reports + memory argues → ← counters loop until investment_debate_state.count ≥ 2 × max_debate_rounds Research Manager synthesises debate → investment_plan · deep LLM Trader creates trader_investment_plan ③ Risk debate (Aggressive / Conservative / Neutral, max_risk_discuss_rounds × 3 turns) Aggressive Analyst maximise upside risk Conservative Analyst protect downside risk Neutral Analyst balanced risk view loop until risk_debate_state.count ≥ 3 × max_risk_discuss_rounds · Agg → Con → Neu → Agg → … ④ Final decision Risk Judge (Fund Manager) approves / rejects · writes final_trade_decision process_signal() extracts BUY / SELL / HOLD + rationale return (final_state, decision) full state + BUY / SELL / HOLD signal _log_state() JSON log